ansible python API来设置没有本地yml文件的变量

问题描述 投票:0回答:1

我已经阅读了一些关于如何使用ansible python API的示例。一些示例依赖于一些现有的本地文件,例如inventory,group_vars。 http://docs.ansible.com/ansible/latest/dev_guide/developing_api.html#python-api-2-0

现在我尝试从一个python代码设置所有数据而不使用其他本地文件。对于InventoryManager,我使用下面的例子。 https://gist.github.com/cbwest3/cb4e9ac16261595a82f8b4ab54629bac

对于VariableManager,我可以设置的任何一个例子,使它等同于我的group_vars/windows.yml? (这是为我的windows组机器设置使用winrm连接。)

ansible_user: MY_USER
ansible_password: MY_SECRET
ansible_port: 5985
ansible_connection: winrm
ansible_winrm_transport: ntlm
ansible_winrm_server_cert_validation: ignore

更新:

我发现VariableManagerset_host_variable方法,它允许我为我所有的windows主机设置变量,如:

    for host in self.inventory._inventory.hosts.values():
        for group in host.groups:
            if group.name == 'windows':
                self.vars_manager.set_host_variable(host, 'ansible_user', r'MY_USER')
                self.vars_manager.set_host_variable(host, 'ansible_password', r'MY_SECRET')
                self.vars_manager.set_host_variable(host, 'ansible_port', '5985')
                self.vars_manager.set_host_variable(host, 'ansible_connection', 'winrm')
                self.vars_manager.set_host_variable(host, 'ansible_winrm_transport', 'ntlm')
                self.vars_manager.set_host_variable(host, 'ansible_winrm_server_cert_validation', 'ignore')

我现在找不到更好的办法。

python ansible
1个回答
1
投票

用你的InventoryData试试:

data.add_group('windows')
data.set_variable('windows','ansible_connection','winrm')
data.add_host('host1', group='windows')
data.add_host('host2', group='windows')
© www.soinside.com 2019 - 2024. All rights reserved.