Доступ к данным столба в пользовательском модуле зерна в Salt

Возможно, это не лучший способ настроить пользовательские зерна, но я хочу настроить «роли» пользовательских зерен, прочитав данные столба. Это позволит легко редактировать синтаксис YAML для данных столба, в то время как пользовательские зерна имеют наивысший приоритет и не перезаписываются другими конфигурациями.

Мой вопрос заключается в том, как получить доступ к данным столба в пользовательском файле python зерна в каталоге _grain?

Я пытался:

hosts = __salt__['pillar.get']('hosts',None)

но я получаю сообщение об ошибке:

NameError: global name '__salt__' is not defined

Даже когда я добавляю

import salt.client
import salt.config

person jinzoo    schedule 13.01.2016    source источник


Ответы (1)


Я просмотрел встроенные гранулы Salts (точнее, core.py зерновой модуль). Там они сами определяют объект __salt__ (строка 44ff .):

__salt__ = {
    'cmd.run': salt.modules.cmdmod._run_quiet,
    'cmd.retcode': salt.modules.cmdmod._retcode_quiet,
    'cmd.run_all': salt.modules.cmdmod._run_all_quiet,
    'smbios.records': salt.modules.smbios.records,
    'smbios.get': salt.modules.smbios.get,
}

Теоретически (не проверено!), вы также должны иметь возможность сделать это в своем пользовательском зерне. Когда вам понадобится модуль pillar.get, вам, конечно, нужно будет импортировать другую функцию:

import salt.modules.pillar

__salt__ = {
    'pillar.get': salt.modules.pillar.get
}

Конечно, вы также можете просто вызвать salt.modules.pillar.get('hosts', None) напрямую, не беспокоясь о создании словаря __salt__.

person helmbert    schedule 13.01.2016
comment
Спасибо за ответ. Я попытался использовать пользователя salt.modules.pillar.get, но получаю сообщение об ошибке opts не определено! Я помню, я где-то читал, что вам нужно как-то определить эту переменную параметров, но я не могу понять, как это сделать. Любые идеи? - person jinzoo; 14.01.2016