构建清单

清单将受管理的节点组织到集中式文件中,这些文件为 Ansible 提供系统信息和网络位置。使用清单文件,Ansible 可以用单个命令管理大量主机。

要完成以下步骤,您需要至少一个主机系统的 IP 地址或完全限定域名 (FQDN)。为了演示目的,该主机可以在容器或虚拟机中本地运行。您还需要确保您的公共 SSH 密钥已添加到每个主机的 authorized_keys 文件中。

继续使用 Ansible 入门并构建清单,如下所示

  1. 在您在 上一步 中创建的 ansible_quickstart 目录中创建一个名为 inventory.ini 的文件。

  2. inventory.ini 文件添加一个新的 [myhosts] 组,并指定每个主机系统的 IP 地址或完全限定域名 (FQDN)。

    [myhosts]
    192.0.2.50
    192.0.2.51
    192.0.2.52
    
  3. 验证您的清单。

    ansible-inventory -i inventory.ini --list
    
  4. ping 清单中的 myhosts 组。

    ansible myhosts -m ping -i inventory.ini
    

    注意

    如果控制节点和受管理节点上的用户名不同,请使用 ansible 命令传递 -u 选项。

    192.0.2.50 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python3"
        },
        "changed": false,
        "ping": "pong"
    }
    192.0.2.51 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python3"
        },
        "changed": false,
        "ping": "pong"
    }
    192.0.2.52 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python3"
        },
        "changed": false,
        "ping": "pong"
    }
    

恭喜,您已成功构建清单。继续使用 Ansible 入门,方法是 创建剧本

INI 或 YAML 格式的清单

您可以创建 INI 文件或 YAML 中的清单。在大多数情况下,例如前面步骤中的示例,INI 文件对于少量受管理的节点来说很简单且易于阅读。

当受管理的节点数量增加时,以 YAML 格式创建清单成为一个明智的选择。例如,以下是 inventory.ini 的等效项,它为受管理的节点声明唯一的名称并使用 ansible_host 字段

myhosts:
  hosts:
    my_host_01:
      ansible_host: 192.0.2.50
    my_host_02:
      ansible_host: 192.0.2.51
    my_host_03:
      ansible_host: 192.0.2.52

构建清单的技巧

  • 确保组名称有意义且唯一。组名称区分大小写。

  • 在组名称中避免空格、连字符和前导数字(使用 floor_19,而不是 19th_floor)。

  • 根据受管理节点的 WhatWhereWhen 将主机逻辑地分组到您的清单中。

    What

    根据拓扑结构对主机进行分组,例如:db、web、leaf、spine。

    Where

    按地理位置对主机进行分组,例如:数据中心、区域、楼层、建筑物。

    When

    按阶段对主机进行分组,例如:开发、测试、预发布、生产。

使用元组

使用以下语法创建一个元组,该元组将清单中的多个组组织在一起

metagroupname:
  children:

以下清单说明了数据中心的典型结构。此示例清单包含一个 network 元组,其中包含所有网络设备,以及一个 datacenter 元组,其中包含 network 组和所有 web 服务器。

leafs:
  hosts:
    leaf01:
      ansible_host: 192.0.2.100
    leaf02:
      ansible_host: 192.0.2.110

spines:
  hosts:
    spine01:
      ansible_host: 192.0.2.120
    spine02:
      ansible_host: 192.0.2.130

network:
  children:
    leafs:
    spines:

webservers:
  hosts:
    webserver01:
      ansible_host: 192.0.2.140
    webserver02:
      ansible_host: 192.0.2.150

datacenter:
  children:
    network:
    webservers:

创建变量

变量为受管理的节点设置值,例如 IP 地址、FQDN、操作系统和 SSH 用户,因此您在运行 Ansible 命令时无需传递这些值。

变量可以应用于特定主机。

webservers:
  hosts:
    webserver01:
      ansible_host: 192.0.2.140
      http_port: 80
    webserver02:
      ansible_host: 192.0.2.150
      http_port: 443

变量也可以应用于组中的所有主机。

webservers:
  hosts:
    webserver01:
      ansible_host: 192.0.2.140
      http_port: 80
    webserver02:
      ansible_host: 192.0.2.150
      http_port: 443
  vars:
    ansible_user: my_server_user

另请参阅

如何构建您的清单

了解有关 YAMLINI 格式的清单的更多信息。

向清单添加变量

详细了解清单变量及其语法。

Ansible Vault

了解如何加密清单中的敏感内容,例如密码和密钥。