Granos de sal personalizados

Estoy tratando de escribir granos personalizados. Pongo este código en /etc/salt/grains

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

Y para probarlo he creado este script:

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

Tengo este error:

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

¿Qué pasa con esto?

/etc/salt/grains es donde la sal almacena los granos establecidos por la salt targetid grains.setval y amigos Es un archivo yaml plano, estático.

Los granos personalizados a través de python entran en / srv / salt / _grains, y luego se sincronizan con minions con salt \* saltutil.sync_grains . Aquí es donde debes poner tu script de python.

Aquí hay un ejemplo similar a su código con registro y verificación:

 $ 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