Ansible Inventory
在大规模的配置管理工作中,我们需要管理不同业务的不同机器,这些机器的信息都存放在 Ansible 的 Inventory 组件里。在我们工作中配置部署针对的主机必须先存放在 Inventory 里边,这样才能使用 Ansible 对它进行操作。默认 Ansible 的 Inventory 是一个静态的 INI 格式的文件,/etc/ansible/hosts ,还可以通过 ANSIBLE_HOSTS 环境变量或者在运行 ansible 和 ansible-playbook 的时候用 -i
参数临时指定 .
定义主机和主机组
第 1 行定义了一个主机 172.18.12.47,然后使用 Inventory 内置变量定义了 SSH 登陆密码
第 3 行定义了一个组叫 web
第 4 行定义了 web 组下面的 4 台主机,IP 地址为 172.18.12.51 ~ 172.18.12.54
第 6 行到第 7 行定义了 docker 组使用 Inventory 内置变量定义了 SSH 登陆密码
第 8 行到第 9 行定义了 ansible 组,这个组下面含 docker 组。
ansible_ssh_pass 参数是 Ansible Inventory 的内置参数。Inventory 文件一般用来定义远端主机的认证信息,比如 SSH 登陆密码、用户名以及 key 相关信息。
添加完主机和主机组以后我们就可以使用 Ansible 命令针对这些主机进行操作和管理。
多个 Inventory 列表
Ansible 默认的 Inventory 文件是一个 ini 的静态文件,其实 Ansible 还支持多个 Inventory 文件,这样可以方便的管理不同业务或者不同环境中的机器。
使用方法是修改 ansible.cfg 中 hosts 文件的定义。
首先准备一个文件夹。里边将存放多个 Inventory 文件,目录如下,
不同的文件可以存放不同的主机,接下来修改 ansible.cfg 文件中的 inventory 的值,不再指向一个文件,指向一个目录,修改如下,
这样可以使用 ansible 的 --list-hosts
参数来进行验证。
动态 Inventory
在实际应用部署中,会有大量的主机列表。如果手动维护这些列表将是一个非常繁琐的事情。ansible 其实支持动态的 Inventory ,动态的 Inventory 就是 ansible 所有的 Inventory 文件里边的主机列表和变量信息都支持从外部拉取。比如从 云提供商、LDAP、Cobbler、CMDB 系统获取所有的主机信息,然后使用 Ansible 进行管理。这样可以方便的将 Ansible 和其他运维系统结合起来。
使用方法有两种,一种是 Inventory Plugin,一种是 Inventory 脚本。
脚本配置方法也比较简单,只要把 ansible.cfg 文件中的 inventory 的定义值改成一个执行脚本即可。脚本的内容不受编程语言显示,但是对这个脚本使用参数和执行结果有一定的格式要求。
这个脚本需要支持两个参数
--list 或者 -l ,这个参数运行后会显示所有的主机以及主机组的信息,必须是 json 格式。
--host 或者 -H,这个参数后面需要指定一个 host ,运行结果会返回这台主机的所有信息,包括认证信息、变量等,必须是 json 格式。
输出格式如下:
版权声明: 本文为 InfoQ 作者【耳东】的原创文章。
原文链接:【http://xie.infoq.cn/article/229332892f3e99f91dd536bdc】。文章转载请联系作者。
评论