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

2024-06-25 23:40:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

编辑

一些更详细的细节来阐明我的观点。在

到目前为止,我的结构如下:

^{pr2}$

在这里,术语集执行的任务在tasks/main.yml中定义。在

playbook._file_name给我的是main.yml(不是内容,只是名称)tasks。我想从回调方法ansible-deploy-apache得到的是ansible-deploy-apache。在


Tags: 方法nameself名称initondefstats
2条回答

此代码为所有主机发布事实:

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)

然后在您的行动手册中,您可以通过以下方式简单地访问事实:

^{pr2}$

当然,你可以根据你的需要重命名事实。在

您可能想尝试_file_name

def v2_playbook_on_start(self, playbook):
    display.warning('Current playbook: {}'.format(playbook._file_name))

编写插件需要一些逆向工程:)
Context代表v2_playbook_on_start。在

相关问题 更多 >