我正在尝试通过在我的file_roots目录according to the Salt manual here的_grains子目录中添加python脚本来向minions添加自定义grain(在salt-stack中)。
我的方法是让脚本读入文本文件并将数据解析为字典中的列表并将其作为粒子加载(在本例中称为角色)。
my roles_file如下所示:
appserver:minion1.example,minion2.example,minion3.exapmle
webserver:minion1.example
dbserver:minion2.example,minion3.example
当读入一个词典时,它将如下所示:
roles_list {
appserver: [minion1.example,minion2.example,minion3.example],
webserver: [minion1.example],
dbserver: [minino2.example, minion3.example]
}
set_roles()
函数如下所示:
def set_roles():
"""
Set the 'roles' grain based on the host name.
"""
roles_list = {}
with open ('roles_file' ,'r') as inf:
for line in inf:
role , servers = line.partition(":")[::2]
roles_list[role] = (servers.rstrip()).split(',')
grains = {'roles': []}
hostname = _get_hostname() # defined elsewhere in my file
logger.debug('{0}'.format(roles_list))
for role, servers in roles_list.iteritems():
for server in servers:
if server == hostname:
grains['roles'].append(role)
return grains
这不起作用,并且未加载角色!我在这里错过了什么吗?
如何更好地调试?我知道在执行高位状态或调用set_roles()
时会调用saltutil.sync_grains
函数。但是我在哪里可以看到logger.debug
的输出?
答案 0 :(得分:0)
我发现没有添加的谷物因为roels_file
在爪牙上不存在。我必须先将文件复制到minions然后运行saltutil.sync_grains
然后才能工作。
我打算在我的环境中使用角色粒子来定位仆从。所以这显然是一个检查和蛋的情况。我需要谷物以瞄准仆从。如果我对roles_file
进行更改,我需要一个单独的状态文件(或顶级文件)来更新所有minions上的roles_file。是否有更好的方法可以从文件或列表中同步服装谷物?
用于调试。我使用salt-minion -l debug
命令在前台运行了minion。