我继承了一个使用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']
答案 0 :(得分:3)
很难猜出你想要达到的目标 但是,ansible也很酷,因为你可以随时查看它的源代码 看看slack.py回调插件。
extra_vars
和playbook
访问权限:
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