Ansible回调:获取正在执行的剧本的名称

时间:2017-03-28 12:05:11

标签: python ansible

我正在使用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_dataplaybook.__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

2 个答案:

答案 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 }}                                            

当然,您可以根据需要重命名事实。