Dynamic Inventory 动态inventory
配置管理系统的用户经常想要保存inventory到不同的软件系统中。Ansible提供了一个基本的基于文本的系统,正如inventory中描述的那样,但是如果你要其他的怎么办?
常见的例子包括从云提供者、LDAP、Cobbler中拉取inventory,或者一种昂贵的CMDB软件。
Ansible很容易支持所有的这些选项,通过外部的inventory系统。contrib/inventory 目录已经包含的一些为EC2/Eucalyptus、Rackspace 云,以及OpenStack,下面有详细的细节。
Ansible Tower同样提供了一个数据库来存储inventory,可以通过web和REST访问。Tower同步你可能正在使用的所有的Ansible动态inventory,并且同时包含图形inventory编辑器。通过使用一个数据库记录所有的主机,很容易关联过去的历史事件,并且查看在过去的playbooks执行时那一台主机失败过。
Example: The Cobbler External Inventory Script
特定例子,略
Example: AWS EC2 External Inventory Script
特定例子,略
Example: OpenStack External Inventory Script
特定例子,略
Other inventory scripts
其他选择例子,略
Using Inventory Directories and Multiple Inventory Sources 使用Inventory 目录和多个Inventory 源
如果Ansible使用-i指定的位置是一个目录,(或者同样在ansible.cfg同样配置),Ansible可以同时使用多个inventory源。当如此做时,在相同的ansible运行混合动态的和静态的inventory管理资源是可能的。即混合云。
在一个Inventory目录中,可执行文件会被当作动态inventory资源,并且大部分其他文件当作静态的。以下面列出的模式结尾的文件将被忽略:
~, .orig, .bak, .ini, .cfg, .retry, .pyc, .pyo
你可以替换这个列表,通过在ansible.cfg中配置inventory_ignore_extensions
这个选项,或者设置ANSIBLE_INVENTORY_IGNORE
环境变量。这个值是逗号分割的模式,如上展示。
任何在inventory目录下 group_vars
and host_vars
的子目录,将按照预期翻译,使得inventory目录称为一种强大的组织配置的方式。
Static Groups of Dynamic Groups 动态组中的静态组
当在静态inventory文件中定义组中组时,子组必须被定义在静态inventory文件中,否则ansible会返回一个错误。
如果你想要在动态子组的静态组,在inventory文件中定义动态组为为空即可,例如:
[tag_Name_staging_foo] [tag_Name_staging_bar] [staging:children]
tag_Name_staging_foo
tag_Name_staging_bar