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

时间:2017-12-20 09:35:44

标签: python ansible

我已经阅读了一些关于如何使用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')

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

1 个答案:

答案 0 :(得分: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')