我已经阅读了一些关于如何使用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
更新:
我发现VariableManager
有set_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')
我现在找不到更好的办法。
用你的InventoryData
试试:
data.add_group('windows')
data.set_variable('windows','ansible_connection','winrm')
data.add_host('host1', group='windows')
data.add_host('host2', group='windows')