如何在 python3.5 中以编程方式运行 ansible-playbook 时设置额外的变量?(Ansible 版本 - 2.8)

Posted

技术标签:

【中文标题】如何在 python3.5 中以编程方式运行 ansible-playbook 时设置额外的变量?(Ansible 版本 - 2.8)【英文标题】:How to set extra_vars while running ansilbe-playbook programmatically in python3.5?(Ansible version - 2.8) 【发布时间】:2019-12-08 13:59:33 【问题描述】:
import os
import json
from collections import namedtuple
from ansible import context
from ansible.module_utils.common.collections import ImmutableDict
from ansible.utils.vars import load_extra_vars
from ansible.parsing.dataloader import DataLoader
from ansible.vars.manager import VariableManager
from ansible.inventory.manager import InventoryManager
from ansible.playbook.play import Play
from ansible.executor.playbook_executor import PlaybookExecutor

def execute_ansible_playbook(CLOUD_TO_USE=None, PLAYBOOK=None):
    playbook_path = PLAYBOOK
    #inventory_path = "hosts"

    #Options = namedtuple('Options', ['connection', 'module_path', 'forks', 'become', 'become_method', 'become_user', 'check', 'diff', 'listhosts', 'listtasks', 'listtags', 'syntax'])
    loader = DataLoader()
    passwords = dict(vault_pass='secret')

    inventory = InventoryManager(loader=loader, sources='inventory/' + CLOUD_TO_USE)
    #inventory = InventoryManager(loader=loader, sources='localhost')
    variable_manager = VariableManager(loader=loader, inventory=inventory)
    executor = PlaybookExecutor(  
                playbooks=[playbook_path], 
                inventory=inventory, 
                variable_manager=variable_manager, 
                loader=loader,  
                passwords=passwords
            )  
    results = executor.run()  
    print (results)


我从Run Ansible playbook programmatically?得到这个代码

这对于其他 ansible-playbook 运行正常。但现在我想将 extra_vars 传递给 ansible-playbook。我找不到合适的答案。

我该怎么做?

【问题讨论】:

【参考方案1】:

FWIW。使用ansible-runner。 documentation 不完整。所有参数都在source中描述。

【讨论】:

以上是关于如何在 python3.5 中以编程方式运行 ansible-playbook 时设置额外的变量?(Ansible 版本 - 2.8)的主要内容,如果未能解决你的问题,请参考以下文章

当app运行时,如何在android中以编程方式关闭通知?

如何在 Linux Mint 中以编程方式发送密钥(模拟密钥输入)?

如何在 ubuntu 14.04 上运行的 ruby​​ 中以编程方式解压缩 .tar.xz 文件(没有中间体)?

如何在android中以编程方式检测MIUI ROM?

如何在 Android 中以编程方式启用禁用 GPS? [复制]

如何在 Python 中以编程方式传递密码