写点什么

Ansible Inventory

用户头像
耳东
关注
发布于: 2021 年 05 月 09 日

在大规模的配置管理工作中,我们需要管理不同业务的不同机器,这些机器的信息都存放在 Ansible 的 Inventory 组件里。在我们工作中配置部署针对的主机必须先存放在 Inventory 里边,这样才能使用 Ansible 对它进行操作。默认 Ansible 的 Inventory 是一个静态的 INI 格式的文件,/etc/ansible/hosts ,还可以通过 ANSIBLE_HOSTS 环境变量或者在运行 ansible 和 ansible-playbook 的时候用 -i 参数临时指定 .

定义主机和主机组

1 172.18.12.47 ansible_ssh_pass='123456'23 [web]4 172.18.12.5[1:4]56 [docker:vars]7 ansible_ssh_pass='123456'8 [ansible:children]9 docker
复制代码


  • 第 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 命令针对这些主机进行操作和管理。


ansible 172.18.12.47 -m ping -o
复制代码


 -o, --one-line     精简输出
复制代码

多个 Inventory 列表

Ansible 默认的 Inventory 文件是一个 ini 的静态文件,其实 Ansible 还支持多个 Inventory 文件,这样可以方便的管理不同业务或者不同环境中的机器。


使用方法是修改 ansible.cfg 中 hosts 文件的定义。


首先准备一个文件夹。里边将存放多个 Inventory 文件,目录如下,


[root@test ~ ]# tree inventory/inventory/|--- docker|--- hosts
复制代码


不同的文件可以存放不同的主机,接下来修改 ansible.cfg 文件中的 inventory 的值,不再指向一个文件,指向一个目录,修改如下,


inventory      = /etc/ansible/inventory/
复制代码


这样可以使用 ansible 的 --list-hosts 参数来进行验证。


[root@172-18-12-6 ~]# ansible web --list-hosts  hosts (1):    172.18.12.47[root@172-18-12-6 ~]#
复制代码

动态 Inventory

在实际应用部署中,会有大量的主机列表。如果手动维护这些列表将是一个非常繁琐的事情。ansible 其实支持动态的 Inventory ,动态的 Inventory 就是 ansible 所有的 Inventory 文件里边的主机列表和变量信息都支持从外部拉取。比如从 云提供商、LDAP、Cobbler、CMDB 系统获取所有的主机信息,然后使用 Ansible 进行管理。这样可以方便的将 Ansible 和其他运维系统结合起来。


使用方法有两种,一种是 Inventory Plugin,一种是 Inventory 脚本。


脚本配置方法也比较简单,只要把 ansible.cfg 文件中的 inventory 的定义值改成一个执行脚本即可。脚本的内容不受编程语言显示,但是对这个脚本使用参数和执行结果有一定的格式要求。


这个脚本需要支持两个参数


  • --list 或者 -l ,这个参数运行后会显示所有的主机以及主机组的信息,必须是 json 格式。

  • --host 或者 -H,这个参数后面需要指定一个 host ,运行结果会返回这台主机的所有信息,包括认证信息、变量等,必须是 json 格式。


输出格式如下:


[root@172-18-12-6 ~]# sh hosts.sh --list{    "web": {        "hosts": {            "172.18.12.45",            "172.18.12.46",            "172.18.12.47"        }    }}[root@172-18-12-6 ~]#[root@172-18-12-6 ~]# sh hosts.sh -H 172.18.12.47{    "ansible_ssh_pass": "123456"}[root@172-18-12-6 ~]#
复制代码


发布于: 2021 年 05 月 09 日阅读数: 13
用户头像

耳东

关注

还未添加个人签名 2020.05.24 加入

主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,知识星球同名,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site

评论

发布
暂无评论
Ansible Inventory