Ansible 之旅(六) 管理 Inventory
动态 Inventory
之前介绍的静态 inventory 很容易编写,但是这只适合管理小型的基础设施架构,在管理大型基础设施架构时,机器可能会经常变来变去,如现今的私有云公有云,此时很难再去保持静态的 inventory 不变,遇到这种情况静态 inventory 已经无法较好的管理托管主机了。
好在 Ansible 除了支持静态的 inventory 还支持动态 inventory 。动态 inventory 必须是可执行的脚本,脚本可以从 CMDB
或者其它外部数据源收集信息,并且输出的格式为 JSON
格式,这样就可以实时的去更新 Ansible 中的 inventory 了。
动态 inventory 的使用方式和静态 inventory 一致,可以在 ansible.cfg
中指定,也可以在命令行中通过 -i
进行指定。
现有的动态 Inventory
在自己需要动态 Inventory 并且准备开始编写时,最好先看一下是否已经存在现有的动态 Inventory ,避免重复造轮子。
一些现有的动态脚本已经通过开源社区捐献给了 Ansible 项目,但是要注意的是这些脚步不属于 Ansible Package
所以不会得到 Ansible 官方和 Redhat 的支持。这些动态的 Inventory 可以在 Github 上获取:https://github.com/ansible/ansible/tree/devel/contrib/inventory
在上面的项目中提供了一些动态 Inventory 脚本,包括:
类别 | 平台 |
---|---|
私有云 | OpenStack |
公有云 | AWS EC2 GCE RackSpace Cloud Azure |
混合云 | CloudForms |
虚拟化 | RHEV Vmware Vsphere |
PASS 解决方案 | Openshift |
生命周期管理工具 | Foreman Spacewalk |
主机提供商 | Digital Linode |
以上每个动态 Inventory 脚本都有可能有自己所需的依赖和环境要求,大部分是使用 Python
编写的,但并不是一定要使用 Python
进行编写。
编写动态 Inventory
如果上面开源的动态脚本不适用的话,用户也可以自己根据自己的数据源自定义动态 Inventory 程序,编写 Inventory 脚本可以使用任意编程语言,但是通过特定的选项返回 inventory 信息时一定是 Json
格式。
脚本的开头一定要有 shebang
(如:#!/usr/bin/python
),用来指定解释器。当使用 --list
选项时,脚本能够输出所有的管理主机并且以 Json
格式。如果需要自定义 Inventory 脚本,请移步到 Developing
Dynamic Inventory Sources :https://docs.ansible.com/ansible/latest/dev_guide/developing_inventory.html
祝你好运 :)
管理多个 Inventory
Ansible 在运行的时候支持多个 Inventory 文件。一般是在配置文件中或者命令行中指定 inventory 是一个目录的时候,这样 Ansible 会按照数字字母顺序在目录中顺序读取 inventory 。
在 inventory 目录中动态 inventory 和静态 inventory 的调用顺序,无法通过配置文件来指定的,它们是通过文件名按照数字字母顺序进行排序的,所以一旦在一个静态 inventory 中调用了动态 inventory 中的数据(如:主机或主机组),但是这个动态 inventory 没有被调用,此时将会报错。解决方法就是要么让动态 inventory 先调用(名称靠前),要么就是在静态 inventory 中先声名进行占位(如:先定义一个空的主机组)。
假设 Inventory 目录中还有其他的文件,但不希望 Ansible 进行调用的,可以在配置文件中定义 inventory_ignore_extensions
可以指定 Ansible 在目录中忽略相关后缀的 inventory 文件。
评论已关闭