我正在使用Ansible回调,并希望使用在v2_playbook_on_start(self, playbook)
方法中执行的剧本的名称(例如“ansible-test”)。
到目前为止,这是我编写自定义回调的方法
class CallbackModule(CallbackBase):
CALLBACK_VERSION = 2.0
CALLBACK_TYPE = 'notification'
CALLBACK_NAME = 'XXXX'
CALLBACK_NEEDS_WHITELIST = True
def __init__(self, display=None):
super(CallbackModule, self).__init__(display=display)
def v2_playbook_on_start(self, playbook):
# How to get the playbook name?
def v2_playbook_on_stats(self, stats):
# ...
我已经尝试了几件事,但到目前为止没有任何作用:
playbook._load_playbook_data
,playbook.__module__
我在docs中找不到任何内容。
我怎样才能得到这个名字?
注意:就我而言,我无法使用playbook._basedir
修改
更多细节以澄清我的观点。
到目前为止,我的结构如下:
- ansible-deploy-apache
- defaults
- main.yml
- tasks
- main.yml
- vars
- ...
此处,Playbook执行的任务在tasks/main.yml
中定义。
playbook._file_name
给我的是main.yml
tasks
(不是内容,只是名称)ansible-deploy-apache
。我想从回调方法ansible-deploy-apache
得到的是sampleString
。
答案 0 :(得分:1)
您可以尝试_file_name
:
def v2_playbook_on_start(self, playbook):
display.warning('Current playbook: {}'.format(playbook._file_name))
编写插件需要一些逆向工程:)
v2_playbook_on_start
的{{3}}。
答案 1 :(得分:0)
此代码为所有主机发布了一个事实:
def v2_playbook_on_start(self,playbook):
self.env = {
"playbook_name": playbook._file_name
}
def v2_playbook_on_play_start(self, play):
variable_manager = play._variable_manager
hosts = variable_manager._inventory.get_hosts()
for host in hosts:
variable_manager.set_host_variable(host,"env",self.env)
然后在您的剧本中,您只需使用以下内容即可访问事实:
{{ env.playbook_name }}
当然,您可以根据需要重命名事实。