Skip to content

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 文件。


小菜园 原创文章,未经允许,请勿转载!

本文链接: https://www.imxcai.com/devops/ansible/ansible-manager-inventory.html


发表评论

电子邮件地址不会被公开。 必填项已用*标注