【发布时间】:2019-01-17 23:44:09
【问题描述】:
Ansible 版本:2.3.1.0
Python 版本:2.7.5
命令:ansible-playbook -i inventory/DEV/playbooks/patching.yml -e "ticketnum=12345 perform_action=stop ansible_ssh_user=abc" -k
设置:
项目
|_____ pythonengine
|______ engine.py
|_____ playbooks
|_____ patching.yml
|_____ inventories
|_____ DEV
|____hosts
|____group_vars
|____all
|___ all.yml
|____host_vars
|____host1
|___ all.yml
|_____ QA
|____hosts
|____group_vars
|____all
|___ all.yml
|____host_vars
|____host2
|___ all.yml
剧本执行得非常好,作为自动化的一部分,从 Python API [engine.py] 调用剧本时,它无法获取在 group_vars 和 host_vars 下定义的变量。
这里是代码:
def runPlaybook(self, playbookYML, hostfile, remoteUser, remoteUserpwd, ticketnum, patchAction, envt):
try:
loader = Dataloader()
inventory = Inventory(loader=loader, variable_manager=VariableManager(), host_list=hostfile)
variable_manager = VariableManager()
variable_manager.extra_vars = { 'ticketnum': ticketnum, 'perform_action': patchAction, 'ansible_ssh_user': remoteUser }
options = namedtuple('Options', ['listtags','listtasks', 'listhosts', 'syntax', 'connection', 'module_path', 'fork', 'remote_user', 'ssh_common_args', 'ssh_extra_args', 'sftp_extra_args', 'scp_extra_args', 'verbosity', 'check', 'diff', 'become', 'become_method','become_user'])
options = Options(listtags=False,listtasks=False, listhosts=False, syntax=False, connection='ssh', module_path=None, fork=100, remote_user=remoteUser, ssh_common_args=None, ssh_extra_args=None, sftp_extra_args=None, scp_extra_args=None, verbosity=None, check=False, diff=False, become=False, become_method=sudo,become_user=remoteUser)
passwords = {'conn_pass': remoteUserPwd}
pbex = PlaybookExecutor(playbook=[playbookYML], inventory=inventory, variable_manager=variable_manager, loader=loader, option=options, passwords=passwords)
results = pbex.run
except Exception as e:
logger.error(traceback.print_exc())
raise
上面的代码无法获取group_vars和host_vars下定义的变量,定义在inventories/[DEV or QA]下
请帮助我加载这些多阶段环境变量。
【问题讨论】:
标签: python ansible ansible-inventory