2014-12-09 2 views
3

주문 곡물을 쓰려고합니다. 나는소금 맞춤 곡물

#!/usr/bin/env python 
def function(): 
    grains = {} 
    grains['test'] = "test" 
    return grains 

/etc/salt/grains에서이 코드를 삽입하고 나는이 스크립트를 만들어 테스트 :

import salt.config 
import salt.loader 
__opts__ = salt.config.minion_config('/etc/salt/minion') 
__grains__ = salt.loader.grains(__opts__) 
test = __grains__['test'] 
print test 

나는이 오류가있어 :

dirs = __grains__['test'] 
KeyError: 'test' 

이에 어떤 문제가 있습니까?

+0

__ [ '검사']'. 제공된 코드에서 변수 dirs를 볼 수 없습니다. 어쩌면 뭔가가 당신을 다른 곳으로 데려다 줄 것입니까? –

답변

8

/etc/salt/grains은 소금이 salt targetid grains.setval 및 친구들에 의해 설정된 곡물을 저장하는 곳입니다. 그것은 평평하고 정적 인 yaml 파일입니다.

파이썬을 통한 맞춤 곡물은/srv/salt/_grains에 들어가고, salt \* saltutil.sync_grains으로 미니언과 동기화됩니다. 여기서 파이썬 스크립트를 넣어야합니다. 여기

로깅 및 인증 코드와 유사한 예이다 :`__grains 할당되는 dirs`된다

$ cat /srv/salt/_grains/spam.py 
#!/usr/bin/env python 
import logging 
log = logging.getLogger(__name__) 

def function(): 
    log.trace('Setting grains["spam"] to "eggs"') 
    grains = {} 
    grains['spam'] = "eggs" 
    return grains 

$ sudo salt lead saltutil.sync_grains 
lead: 
    - grains.spam 

$ sudo salt-call grains.item spam -l trace 2>&1 \ 
    | egrep '^local|spam' 
[TRACE ] Added spam.function to grain 
[TRACE ] Setting grains["spam"] to "eggs" 
local: 
    spam: eggs 

$ cat /tmp/spam_taster.py 
#!/usr/bin/env python 
import salt.config 
import salt.loader 
__opts__ = salt.config.minion_config('/etc/salt/minion') 
__grains__ = salt.loader.grains(__opts__) 
spam = __grains__['spam'] 
print spam 

$ python /tmp/spam_taster.py 
eggs 
+0

고마워, 나는 이렇게 만들었어, 나는 여전히 같은 오류가있다. 나는 동기화가 작동하지 않는다고 생각한다. – 4m1nh4j1

+0

여기에 제공되지 않은 다른 코드가 있다고 의심됩니다. 'dirs'는 예제에 없습니다. 로거를 사용하여 코드를 추적 할 수 있습니다 : 'import logging; log = logging.getLogger (__name __)'그런 다음 코드 주위에'log.trace ("코드의이 부분에서") 부분을 뿌리십시오. –

+0

@ 4m1nh4j1이 답변을 고려해보십시오. –