我正在尝试查询Ansible中设置的全局组变量.我似乎得到一个空字典,我不知道我还能做什么.我的代码看起来像这样:
def __init__(self, inventory_path=None):
self.loader = DataLoader()
self.variable_manager = VariableManager()
self.inventory = Inventory(loader=self.loader, variable_manager=self.variable_manager, host_list=inventory_path)
self.variable_manager.set_inventory(self.inventory)
Run Code Online (Sandbox Code Playgroud)
然后,当我尝试获得如下的组变量:
inventory_asg_groups = filter(lambda g: 'asg' in g, self.inventory.groups)
for group in inventory_asg_groups:
print(self.inventory.get_group_vars(self.inventory.get_group(group)))
Run Code Online (Sandbox Code Playgroud)
我得到一个空字典:
{}
Run Code Online (Sandbox Code Playgroud)
当我做一个:
print(self.inventory.localhost.vars)
Run Code Online (Sandbox Code Playgroud)
我明白了:
{'ansible_python_interpreter': '/usr/local/opt/python/bin/python2.7', 'ansible_connection': 'local'}
Run Code Online (Sandbox Code Playgroud)
我知道正在加载库存,因为我列出了库存中的所有组.如何通过python ansible api 获取group_vars/all中列出的变量?
如果您定义了特定于组的变量 (group_vars/.yml),这实际上是有效的。这是因为 get_group_vars 直接读取 'all' you can use self.inventory.get_group_vars(self.inventory.get_group('all'))
。
完整示例如下:
污垢/主机
# hosts
[asg_2]
localhost1
[asg_1]
localhost2
[something]
localhost3
Run Code Online (Sandbox Code Playgroud)
目录/group_vars/all.yml
setting_something: "5"
Run Code Online (Sandbox Code Playgroud)
目录/group_vars/ags_1.yml
setting_something: "6500"
Run Code Online (Sandbox Code Playgroud)
目录/ansible_loader.py
from ansible.parsing.dataloader import DataLoader
from ansible.vars import VariableManager
from ansible.inventory import Inventory
class AnsibleLoader:
def __init__(self, inventory_path=None):
self.loader = DataLoader()
self.variable_manager = VariableManager()
self.inventory = Inventory(loader=self.loader, variable_manager=self.variable_manager, host_list=inventory_path)
self.variable_manager.set_inventory(self.inventory)
inventory_asg_groups = filter(lambda g: 'asg' in g, self.inventory.groups)
print(inventory_asg_groups)
for group in inventory_asg_groups:
print('vars for: %s' % group)
print(self.inventory.get_group_vars(self.inventory.get_group(group)))
print(self.inventory.get_group_vars(self.inventory.get_group('all')))
AnsibleLoader(inventory_path='hosts')
Run Code Online (Sandbox Code Playgroud)
输出
[u'asg_2', u'asg_1']
vars for: asg_2
{}
vars for: asg_1
{u'setting_something': u'6500'}
{u'setting_something': u'5'}
Run Code Online (Sandbox Code Playgroud)
因此它会打印 asg_1 的值,因为它在 group_vars 中有文件,但不会打印 asg_2 的值。最后一行正在访问“全部”
全部用ansible 2.0完成,不确定你使用哪个版本。
归档时间: |
|
查看次数: |
1308 次 |
最近记录: |