我已经阅读了一些关于如何使用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')
我现在找不到更好的方法。
答案 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')