2.1 Ansible Inventory

在大规模的配置管理工作中,我们需要管理不同业务的不同机器,这些机器的信息都存放在 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'
2
3 [web]
4 172.18.12.5[1:4]
5
6 [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 ~]#

内置参数

https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html

results matching ""

    No results matching ""