通过Ansible 2.0回调访问变量

时间:2016-08-26 19:53:37

标签: ansible ansible-2.x

我继承了一个使用Ansible 1.9的回调插件。我们升级到2.1,它不再有效。

看起来它正在尝试访问该剧本对象,但它没有被传递到" v2_playbook_on_stats。"我的Python很生疏,所以我不确定如何访问这些数据。我试着访问" extra-vars"变量,但它给了我以下错误:

[WARNING]: Failure using method (v2_playbook_on_stats) in callback plugin
(</home/deployment/scripts/playbooks-2.0/callback/log_to_mongo.CallbackModule object at 0x2b8cf90>): 'NoneType'     object has no attribute 'extra_vars'

class CallbackModule(object):
    """
    An ansible callback module for saving Ansible output to a database log
    """
    def __init__(self):
        self.playbook = None
        self.playbook_name = None
        self.play = None
        self.task = None

def v2_playbook_on_stats(self, stats):
    global jira_ticket
    global deployed_modules
    global ocd_job_id
    global environment_id

    deployed_modules = []
    jira_ticket = self.playbook.extra_vars['jira_ticket']
    ocd_job_id = self.playbook.extra_vars['ocd_job_id']
    environment_id = self.playbook.extra_vars['environment_id']

2 个答案:

答案 0 :(得分:3)

很难猜出你想要达到的目标 但是,ansible也很酷,因为你可以随时查看它的源代码 看看slack.py回调插件。

extra_varsplaybook访问权限:

def __init__(self, display=None):

    ...

    if cli:
        self._options = cli.options

    ...

def v2_playbook_on_start(self, playbook):
    self.playbook_name = os.path.basename(playbook._file_name)

    ...

    extra_vars = self._options.extra_vars

    ...

如果您需要稍后在playbook中使用v2_playbook_on_stats对象,请在self.playbook = playbook时指定v2_playbook_on_start

答案 1 :(得分:1)

如果要捕获命令行传递的额外变量,则必须使用

您必须使用变量管理器对象:

def v2_playbook_on_play_start(self, play):

    self.playbook_on_play_start(play.name)
    self.current_play = play
    self.vm = play.get_variable_manager()

然后您可以访问此对象以获取var: def v2_playbook_on_stats(自身,状态):

    self._display.banner("##########  start of debug    ############")
    for key in debug_vars.keys():
        self._display.display("var %s --> %s" % (key, debug_vars[key]))
    self._display.banner("##########    end of debug    ############")

    self._display.banner("##########    debug hostvars    ############")
    for key in debug_vars['hostvars']:
        self._display.display("var %s --> %s" % (key, debug_vars['hostvars'][key]))

    self._display.banner("##########    debug localhost    ############")
    localhost = debug_vars['hostvars']['localhost']
    for key in localhost:
        self._display.display("var %s --> %s" % (key, localhost[key]))

结果将是这样:

##########  start of debug    ############ ********************************************************************************************************************************************************************************************
var playbook_dir --> /Users/XXXXXXXX/projects/voyager/playbooks
var ansible_playbook_python --> /Users/XXXXXXXX/.pyenv/versions/3.7.2/bin/python3.7
var groups --> {'all': ['localhost'], 'ungrouped': [], 'local': ['localhost']}
var omit --> __omit_place_holder__e834e30aa3812ca0793e60c4024e1b54b5fb28b3
var ansible_version --> {'string': '2.8.4', 'full': '2.8.4', 'major': 2, 'minor': 8, 'revision': 4}
var ansible_check_mode --> False
var ansible_diff_mode --> False
var ansible_forks --> 25
var ansible_inventory_sources --> ('/Users/XXXXXXXX/projects/voyager/inventories/local/hosts',)
var ansible_skip_tags --> ()
var ansible_run_tags --> ('all',)
var ansible_verbosity --> 0
var hostvars --> {'localhost': {'inventory_file': '/Users/XXXXXXXX/projects/voyager/inventories/local/hosts', 'inventory_dir': '/Users/XXXXXXXX/projects/voyager/inventories/local', 'ansible_user': 'ansible', 'ansible_connection': 'local', 'ansible_python_interpreter': '/usr/bin/env python', 'inventory_hostname': 'localhost', 'inventory_hostname_short': 'localhost', 'group_names': ['local'], 'ansible_facts': {}, 'voyager_extra_vars2': {'uno': 'esto es una prueba', 'dos': 22, 'tres': 666666, 'cuatro': 'esto es otra prueba'}, 'voyager_extra_vars3': {'uno': 'esto es una prueba', 'dos': 2222, 'tres': 666666, 'cuatro': 'esto es otra prueba'}, 'test_var_play_2': 'Esto es una prueba de var en el play 2', 'playbook_dir': '/Users/XXXXXXXX/projects/voyager/playbooks', 'ansible_playbook_python': '/Users/XXXXXXXX/.pyenv/versions/3.7.2/bin/python3.7', 'groups': {'all': ['localhost'], 'ungrouped': [], 'local': ['localhost']}, 'omit': '__omit_place_holder__e834e30aa3812ca0793e60c4024e1b54b5fb28b3', 'ansible_version': {'string': '2.8.4', 'full': '2.8.4', 'major': 2, 'minor': 8, 'revision': 4}, 'ansible_check_mode': False, 'ansible_diff_mode': False, 'ansible_forks': 25, 'ansible_inventory_sources': ('/Users/XXXXXXXX/projects/voyager/inventories/local/hosts',), 'ansible_skip_tags': (), 'ansible_run_tags': ('all',), 'ansible_verbosity': 0}}

##########    end of debug    ############ ********************************************************************************************************************************************************************************************

##########    debug hostvars    ############ ******************************************************************************************************************************************************************************************
var localhost --> {'inventory_file': '/Users/XXXXXXXX/projects/voyager/inventories/local/hosts', 'inventory_dir': '/Users/XXXXXXXX/projects/voyager/inventories/local', 'ansible_user': 'ansible', 'ansible_connection': 'local', 'ansible_python_interpreter': '/usr/bin/env python', 'inventory_hostname': 'localhost', 'inventory_hostname_short': 'localhost', 'group_names': ['local'], 'ansible_facts': {}, 'voyager_extra_vars2': {'uno': 'esto es una prueba', 'dos': 22, 'tres': 666666, 'cuatro': 'esto es otra prueba'}, 'voyager_extra_vars3': {'uno': 'esto es una prueba', 'dos': 2222, 'tres': 666666, 'cuatro': 'esto es otra prueba'}, 'test_var_play_2': 'Esto es una prueba de var en el play 2', 'playbook_dir': '/Users/XXXXXXXX/projects/voyager/playbooks', 'ansible_playbook_python': '/Users/XXXXXXXX/.pyenv/versions/3.7.2/bin/python3.7', 'groups': {'all': ['localhost'], 'ungrouped': [], 'local': ['localhost']}, 'omit': '__omit_place_holder__e834e30aa3812ca0793e60c4024e1b54b5fb28b3', 'ansible_version': {'string': '2.8.4', 'full': '2.8.4', 'major': 2, 'minor': 8, 'revision': 4}, 'ansible_check_mode': False, 'ansible_diff_mode': False, 'ansible_forks': 25, 'ansible_inventory_sources': ('/Users/XXXXXXXX/projects/voyager/inventories/local/hosts',), 'ansible_skip_tags': (), 'ansible_run_tags': ('all',), 'ansible_verbosity': 0}

##########    debug localhost    ############ *****************************************************************************************************************************************************************************************
var inventory_file --> /Users/XXXXXXXX/projects/voyager/inventories/local/hosts
var inventory_dir --> /Users/XXXXXXXX/projects/voyager/inventories/local
var ansible_user --> ansible
var ansible_connection --> local
var ansible_python_interpreter --> /usr/bin/env python
var inventory_hostname --> localhost
var inventory_hostname_short --> localhost
var group_names --> ['local']
var ansible_facts --> {}
var voyager_extra_vars2 --> {'uno': 'esto es una prueba', 'dos': 22, 'tres': 666666, 'cuatro': 'esto es otra prueba'}
var voyager_extra_vars3 --> {'uno': 'esto es una prueba', 'dos': 2222, 'tres': 666666, 'cuatro': 'esto es otra prueba'}
var test_var_play_2 --> Esto es una prueba de var en el play 2
var playbook_dir --> /Users/XXXXXXXX/projects/voyager/playbooks
var ansible_playbook_python --> /Users/XXXXXXXX/.pyenv/versions/3.7.2/bin/python3.7
var groups --> {'all': ['localhost'], 'ungrouped': [], 'local': ['localhost']}
var omit --> __omit_place_holder__e834e30aa3812ca0793e60c4024e1b54b5fb28b3
var ansible_version --> {'string': '2.8.4', 'full': '2.8.4', 'major': 2, 'minor': 8, 'revision': 4}
var ansible_check_mode --> False
var ansible_diff_mode --> False
var ansible_forks --> 25
var ansible_inventory_sources --> ['/Users/XXXXXXXX/projects/voyager/inventories/local/hosts']
var ansible_skip_tags --> []
var ansible_run_tags --> ['all']
var ansible_verbosity --> 0