详解Ansible清单文件:静态与动态清单配置实例

在这里插入图片描述

Ansible清单

在使用Ansible管理多个主机时,需要定义一个清单文件来描述这些主机的列表。Ansible的清单文件可以是静态的,也可以是动态的。以下详细介绍静态清单和动态清单的使用方式,并提供新的举例说明。

静态清单
静态清单文件概述

默认情况下,Ansible使用 /etc/ansible/hosts 文件作为系统的默认静态清单文件。清单文件的作用是告诉Ansible哪些主机需要管理。该文件格式是INI格式,其中可以定义主机名或IP地址,以及主机组。除了默认路径外,清单文件也可以放在系统的任何路径下,不过运行时需要指定其路径,可以使用 --inventory-i 选项来指定。

创建静态清单文件
  1. 编辑 /etc/ansible/hosts 文件,添加需要管理的主机:

    [webservers]
    server1.example.com
    server2.example.com
    192.168.1.10
    
    [dbservers]
    db1.example.com
    db2.example.com
    192.168.1.20
    

    在上述配置中,我们定义了两个主机组 webserversdbservers,分别包含了多个主机名或IP地址。

  2. 也可以将清单文件放在其他路径下,然后在执行命令时指定其路径。例如,将清单文件放在 /home/user/myinventory

    [webservers]
    server1.example.com
    server2.example.com
    192.168.1.10
    
    [dbservers]
    db1.example.com
    db2.example.com
    192.168.1.20
    

    使用 -i 选项指定清单文件:

    ansible all -i /home/user/myinventory --list-hosts
    
主机组嵌套

Ansible允许创建嵌套的主机组,通过在组名后添加 :children 实现。例如:

[web]
web1.example.com
web2.example.com

[db]
db1.example.com
db2.example.com

[all:children]
web
db

在上述配置中,定义了两个主机组 webdb,并通过 all:children 将两个主机组合并为一个更大的组 all

也可以使用简写形式:

[web]
web[1:2].example.com

[db]
db[1:2].example.com

[webdb:children]
web
db

这种方式可以更加简洁地定义多个连续编号的主机。

动态清单
动态清单概述

动态清单文件是一种可执行脚本或程序,它可以动态生成主机列表。这对于那些主机环境变化频繁的场景特别有用。Ansible会调用这个脚本,并解析其输出结果作为清单内容。

创建动态清单文件
  1. 编写一个Python脚本作为动态清单文件 dynamic_inventory.py

    #!/usr/bin/env python3
    
    import json
    
    def main():
        inventory = {
            "webservers": {
                "hosts": ["web1.example.com", "web2.example.com", "192.168.1.10"]
            },
            "dbservers": {
                "hosts": ["db1.example.com", "db2.example.com", "192.168.1.20"]
            }
        }
        print(json.dumps(inventory))
    
    if __name__ == "__main__":
        main()
    

    在上述脚本中,我们定义了两个主机组 webserversdbservers,并通过输出JSON格式的数据来描述主机列表。

  2. 赋予脚本可执行权限:

    chmod +x dynamic_inventory.py
    
  3. 使用动态清单运行Ansible命令:

    ansible all -i ./dynamic_inventory.py --list-hosts
    
运行Playbook
  1. 创建一个简单的Playbook文件 deploy.yml

    ---
    - name: Deploy web servers
      hosts: webservers
      tasks:
        - name: Install Nginx
          apt:
            name: nginx
            state: present
            update_cache: yes
    
  2. 使用动态清单运行Playbook:

    ansible-playbook -i ./dynamic_inventory.py deploy.yml
    

清单例子

简单静态清单

在最简单的形式中,INI格式的静态清单文件是受管主机的主机名或IP地址的列表,每行一个:

web1.example.com
web2.example.com
db1.example.com
db2.example.com
192.0.2.42
分组静态清单

通常而言,您可以将受管主机组织为主机组。通过主机组,您可以更加有效地对一系列系统运行Ansible。这时,每一部分的开头为以方括号 [] 括起的主机组名称,其后为该组中每一受管主机的主机名或IP地址,每行一个。

在以下示例中,主机清单定义了两个主机组:webserversdbservers

[webservers]
web1.example.com
web2.example.com
192.0.2.42

[dbservers]
db1.example.com
db2.example.com
嵌套主机组

通过创建后缀为 :children 的主机组名称来实现,例如:

[web]
web1.example.com
web2.example.com

[db]
db1.example.com
db2.example.com

[all:children]
web
db

在上述配置中,定义了两个主机组 webdb,并通过 all:children 将两个主机组合并为一个更大的组 all

也可以使用简写形式:

[web]
web[1:2].example.com

[db]
db[1:2].example.com

[webdb:children]
web
db

这种方式可以更加简洁地定义多个连续编号的主机。

清单验证

在创建或修改清单文件后,可以通过Ansible的命令来验证清单内容是否正确。

  1. 查看指定主机组的主机列表:

    ansible web --list-hosts
    

    示例输出:

    hosts (2):
      web1.example.com
      web2.example.com
    
  2. 查看所有主机列表(不包括本地):

    ansible all --list-hosts
    
  3. 指定清单文件路径查看主机列表:

    ansible all -i /path/to/inventory --list-hosts
    
  4. 查看本地主机列表:

    ansible localhost --list-hosts
    

Ansible的清单文件是管理多个主机的关键,通过定义静态或动态清单文件,可以灵活地组织和管理受管主机。静态清单文件适用于主机数量相对固定的场景,而动态清单文件则适用于主机环境变化频繁的场景。通过清单验证命令,可以确保清单文件的正确性,为后续的自动化操作提供保障。

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周同学的技术栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值