我们的ansible库存文件日益变得越来越大。所以我们想用目录和文件模块化它。 比如说。
[webservers]
foo.example.com
bar.example.com
[dbservers]
one.example.com
two.example.com
three.example.com
这可以转换成
|--production
| |--WEBSERVERS
| | |--webservers
| |--DBSERVERS
| | |--dbservers
网络服务器是文件;
[webservers]
foo.example.com
bar.example.com
和 dbservers 是一个文件;
[dbservers]
one.example.com
two.example.com
three.example.com
对于简单的库存文件,它工作正常。当我创建一组组时出现问题。
喜欢
[webservers]
foo.example.com
bar.example.com
[dbservers]
one.example.com
two.example.com
three.example.com
[master:children]
webservers
dbservers
我无法想象这个和它的目录结构。有人可以指导我到正确的教程。 感谢
答案 0 :(得分:7)
Ansible支持“动态库存”,你可以在这里阅读更多相关信息:http://docs.ansible.com/ansible/developing_inventory.html
以特定格式生成JSON的简单脚本(python,ruby,shell等)。
创建最能反映您需求的文件夹结构,并将服务器配置放在那里。然后创建一个简单的可执行文件来读取这些文件并输出结果。
#!/usr/bin/python
import yaml
import json
web = yaml.load(open('web.yml', 'r'))
inventory = { '_meta': { 'hostvars': {} } }
# Individual server configuration
for server, properties in web['servers'].iteritems():
inventory['_meta']['hostvars'][server] = {}
inventory['_meta']['hostvars'][server]['ansible_ssh_host'] = properties['ip']
# Magic group for all servers
inventory['all'] = {}
inventory['all']['hosts'] = web['servers'].keys()
# Groups of servers
if 'groups' in web:
for group, properties in web['groups'].iteritems():
inventory[group] = {}
inventory[group]['hosts'] = web['groups'][group]
print json.dumps(inventory, indent=2)
web.yml
---
servers:
foo:
ip: 192.168.42.10
bar:
ip: 192.168.42.20
groups:
webservers:
- foo
dbservers:
- bar
然后将您的剧本称为usuall,您将获得与使用标准ini
文件相同的结果。