我正在尝试在Python + Jinja中创建一个反应器以响应某些事件。该文档有关于如何使用YAML格式创建反应器的相当好的示例。但是,在Python中创建反应器的文档非常缺乏。
这是我到目前为止所得到的:
#!jinja|py
"""
reactors can be also complete Python programs instead of Jinja + YAML
"""
def run():
'''
I can have fairly complex logic here, but it is all executed on the
master.
'''
# I can define variable like this
var = "{{ data['id'] }}" # this is the id of the minion that sent the signal
# I can call a salt module like this:
__salt__['pkg.install']('figlet') # this will install figlet on the master
return {}
文档说明
SLS文件应该包含一个名为run的函数,它返回高状态数据。
但到目前为止,我还没有看到如何从这本字典中瞄准所需的小兵。 我知道我可以使用salt API,但我现在想避免这种情况。
这里有人可以举例说明如何通过返回正确的高状态数据来调用状态,目标和小兵?
答案 0 :(得分:2)
事实证明,我访问上下文数据的方式是错误的。没有必要在Jinja中包装python脚本。不幸的是,目前没有记录。 如果你用Python写一个州或者一个回归者,那就是
里面的一切{{ data }} # in Jinja + YAML
现在可以使用名为(不是令人惊讶的)data
的全局变量。这个变量也是字典。
#!py
def run():
'''
'''
# I can define variable like this
var = data['id'] # this is the id of the minion that sent the signal
return {}