首页 文章

Ansible Python API - 无法加载组变量

提问于
浏览
0

Ansible版本:2.3.1.0

Python版本:2.7.5

命令:ansible-playbook -i inventoryories / DEV / playbooks / patching.yml -e“ticketnum = 12345 perform_action = stop ansible_ssh_user = abc”-k

Build :

项目

|_____ 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

上面的代码无法获得在库存/ [DEV或QA]下定义的group_vars和host_vars下定义的变量

请帮助我获取这些多阶段环境变量 .

1 回答

  • 0

    我能够使用以下代码加载组变量 .

    variable_manager.add_group_vars_file(groupvarfile, loader)
    

相关问题