Ansible清单 inventory

目录

inventory概述

inventory使用

步骤

格式

简化定义方式

inventory变量

变量示例

inventory使用实例


inventory概述

  • 在Ansible中,"inventory"(清单)是指用于定义和管理要管理的主机列表的文件或目录。清单文件是一个文本文件,其中列出了要连接和管理的远程主机的IP地址或主机名。

  • 清单文件可以包含多个组(group),每个组可以包含一个或多个主机。通过将主机分组,可以更方便地对它们进行管理和组织。例如,可以创建一个名为"webservers"的组,其中包含所有的Web服务器,另一个名为"databaseservers"的组,其中包含所有的数据库服务器。

  • 清单文件还可以包含变量,用于定义主机或组的特定属性。这些变量可以在Playbook中使用,以根据需要进行配置和定制。

  • 除了文本文件,Ansible还支持其他类型的清单,如动态清单。动态清单可以从外部源(如云平台、数据库或脚本)动态生成主机列表,以实现更灵活的主机管理。

  • 总之,清单是Ansible中用于定义要管理的主机列表的文件或目录。它是组织和管理主机的重要工具,使得可以轻松地对不同组的主机进行操作和配置。

inventory使用

步骤

使用Ansible的清单(Inventory)是指定要连接和管理的远程主机的关键步骤之一。

  • 创建清单文件:首先,创建一个文本文件,用于定义主机和组的结构。清单文件可以使用INI格式或YAML格式编写。你可以根据需要创建多个清单文件。

  • 定义主机和组:在清单文件中,使用方括号([])定义主机组,然后在组内列出相应的主机。可以根据需要创建多个组,并将主机分配到适当的组中。

  • 添加变量(可选):如果需要为主机或组定义特定的属性或变量,可以在清单文件中添加变量。变量可以用于配置任务和Playbook的行为。

  • 配置清单文件位置:默认情况下,Ansible会在/etc/ansible/hosts文件中查找清单文件。如果你的清单文件位于不同的位置,可以通过命令行参数或Ansible配置文件指定清单文件的位置。

  • 测试连接:在使用清单之前,可以使用Ansible的ping模块测试与主机的连接。这可以确保Ansible能够成功连接到清单中的主机。

  • 执行Playbook或任务:一旦清单文件准备就绪,就可以使用Ansible来执行Playbook或任务。在Playbook中,可以使用清单中定义的组或主机来选择要执行任务的目标。

以下是一个简单的示例清单文件:

[web_servers]
web1.example.com
web2.example.com

[database_servers]
db1.example.com
db2.example.com

在上面的示例中,有两个组:web_serversdatabase_servers。每个组下面列出了相应的主机。

使用Ansible时,可以通过命令行参数指定清单文件的位置,例如:

ansible-playbook -i /path/to/inventory_file playbook.yml

这样,Ansible将使用指定的清单文件来确定要连接和管理的主机。

格式

Ansible的Inventory文件可以使用多种格式,最常见的是INI格式和YAML格式。

INI格式: INI格式的Inventory文件使用简单的键值对结构来定义主机和组。以下是一个示例:

[webservers]
192.168.10.10
192.168.10.11

[dbservers]
192.168.10.20
192.168.10.21

在上述示例中,[webservers][dbservers]是组的名称,而下面的行则是该组内的主机列表。

YAML格式: YAML格式的Inventory文件使用缩进和层级结构来定义主机和组。以下是一个示例:

all:
  children:
    webservers:
      hosts:
        192.168.10.10:
        192.168.10.11:
    dbservers:
      hosts:
        192.168.10.20:
        192.168.10.21:

在上述示例中,all是顶级组,webserversdbservers是子组。每个组下面的hosts键定义了该组内的主机列表。

使用Inventory文件时,可以根据需要选择使用INI格式或YAML格式。无论使用哪种格式,都可以定义主机和组,并为它们设置变量。这样可以方便地组织和管理主机,并在Ansible任务中使用它们。

简化定义方式

在Ansible的Inventory文件中使用特定的语法或模式来简化主机或组的定义。这样可以减少手动列出每个主机的工作量,并提高配置文件的可读性和可维护性。

在Ansible中,有几种常见的简化定义的方式:

  • 使用模式匹配:可以使用通配符或范围来表示一组连续的主机。例如,192.168.41.3[0:3]表示匹配从192.168.41.30192.168.41.33的主机。

  • 使用变量:可以为主机或组设置变量,以便在任务中使用。这样可以将共享的配置信息集中管理,并在需要时进行修改。

  • 使用组嵌套:可以将多个组合并为一个新的组,以便在任务中对它们进行统一的操作或配置。这样可以简化配置文件的结构,并使组织和管理主机更加灵活。

通过使用这些简化定义的方式,可以减少冗余的配置信息,提高配置文件的可维护性,并使配置更加灵活和可扩展。这对于管理大规模的主机群组或复杂的系统配置非常有帮助。

inventory变量

Ansible清单(Inventory)中常用的变量名及其含义:

  • ansible_host: Ansible连接节点时使用的IP地址。

  • ansible_port: 连接远程主机时使用的端口号,默认为22(SSH默认端口)。

  • ansible_user: 连接远程主机时使用的用户名。如果未指定,则使用执行Ansible命令的用户。

  • ansible_password: 连接远程主机时使用的用户密码,仅在未使用SSH密钥对进行验证时有效。

  • ansible_ssh_private_key_file: 指定使用的SSH私钥文件路径,用于密钥认证的SSH连接。

  • ansible_ssh_common_args: 提供给SSH、SFTP、SCP命令的额外参数。

  • ansible_become: 允许在远程主机上提升权限(切换到超级用户)。

  • ansible_become_method: 指定提升权限的方式,例如使用sudo、su、runas等方式。

  • ansible_become_user: 指定提升权限后切换到的用户,默认为root用户。

  • ansible_become_password: 提升权限时指定的密码。

这些变量可以在清单文件中为主机或组定义,也可以在Playbook中使用vars关键字定义。通过设置这些变量,可以根据需要配置连接远程主机的参数、权限提升方式以及相关的认证信息。

请注意,为了安全起见,建议避免在清单文件中明文存储敏感信息(如密码)。可以使用Ansible Vault等工具来加密和保护这些敏感信息。

变量示例

当使用Ansible清单(Inventory)时,以下是一些示例变量的用法和含义:

ansible_host:

[web_servers]
web1 ansible_host=192.168.1.100
web2 ansible_host=192.168.1.101

在上面的示例中,ansible_host变量指定了连接到web1web2主机时使用的IP地址。

ansible_port:

[database_servers]
db1 ansible_host=192.168.1.200 ansible_port=2222
db2 ansible_host=192.168.1.201 ansible_port=2222

在上面的示例中,ansible_port变量指定了连接到db1db2主机时使用的非默认SSH端口号。

ansible_user:

[web_servers]
web1 ansible_host=192.168.1.100 ansible_user=ubuntu
web2 ansible_host=192.168.1.101 ansible_user=admin

在上面的示例中,ansible_user变量指定了连接到web1web2主机时使用的用户名。

ansible_password:

[database_servers]
db1 ansible_host=192.168.1.200 ansible_password=secretpassword
db2 ansible_host=192.168.1.201 ansible_password=anotherpassword

在上面的示例中,ansible_password变量指定了连接到db1db2主机时使用的密码。请注意,这种方式不推荐,建议使用SSH密钥对进行认证。

ansiblesshprivatekeyfile:

[web_servers]
web1 ansible_host=192.168.1.100 ansible_ssh_private_key_file=/path/to/private_key.pem
web2 ansible_host=192.168.1.101 ansible_ssh_private_key_file=/path/to/another_key.pem

在上面的示例中,ansible_ssh_private_key_file变量指定了连接到web1web2主机时使用的SSH私钥文件路径。

这些示例展示了在Ansible清单中使用变量的常见情况。根据实际需求,可以根据主机或组的特定要求定义和使用更多的变量。这些变量可以根据需要配置连接参数、认证信息和其他相关设置,以实现更灵活和可配置的主机管理。

inventory使用实例

  • Ansible主机清单文件用于定义要管理的主机和组,并可以为每个主机或组设置变量。

创建主机清单

首先,通过编辑"/etc/ansible/hosts"文件可以创建主机清单。可以使用列表的方式标识不同的主机。例如:

vim /etc/ansible/hosts

[webservers]
192.168.41.31:2222        
192.168.41.3[1:5]       

[dbservers]
db-[a:f].example.org    

在上述示例中,[webservers][dbservers]是组的名称,而下面的行则是该组内的主机列表。

  • [webservers]组中,有两个主机:192.168.41.31:2222192.168.41.3[1:5]。冒号后面的2222表示远程连接端口,默认是SSH的22端口。而192.168.41.3[1:5]表示一个范围,匹配从192.168.41.31192.168.41.35的主机。

  • [dbservers]组中,使用了模式匹配。db-[a:f].example.org表示匹配以db-开头,后跟一个字母从af,最后以.example.org结尾的主机。

通过这种方式,可以方便地定义名称类似的主机,并将它们分组以便在Ansible中进行管理和操作。

Ansible中的主机变量、组变量和组嵌套的用法

在主机清单文件中,还可以定义主机变量和组变量。主机变量是针对特定主机的变量,组变量是针对整个组的变量。

主机变量示例:

[webservers]
192.168.41.31 ansible_port=22 ansible_user=root ansible_password=abc1234

在这个示例中,[webservers]是一个主机组,其中包含一个主机192.168.41.31。而ansible_portansible_useransible_password是针对该主机的变量设置。

  • ansible_port=22指定了远程连接端口为22,这是SSH的默认端口。

  • ansible_user=root指定了连接该主机时使用的用户名为root

  • ansible_password=123指定了连接该主机时使用的密码为123

通过在主机组中设置这些变量,可以在Ansible的任务中使用它们来进行特定的配置或操作。例如,可以使用ansible_useransible_password来进行远程主机的身份验证,或者使用ansible_port来指定非默认的连接端口。这样可以根据需要对不同的主机进行个性化的设置。

组变量示例:

[webservers:vars]            #表示为 webservers 组内所有主机定义变量
ansible_user=root
ansible_password=123

[all:vars]                    #表示为所有组内的所有主机定义变量
ansible_port=22

在这个示例中,展示了组变量的用法。组变量允许为特定的组内的所有主机定义变量,以便在Ansible任务中使用。

  • [webservers:vars] 表示为 webservers 组内的所有主机定义了变量。在这个示例中,为 webservers 组内的所有主机设置了两个变量:

  • ansible_user=root:指定了连接这些主机时使用的用户名为 root

  • ansible_password=123:指定了连接这些主机时使用的密码为 123

  • [all:vars] 表示为所有组内的所有主机定义了变量。在这个示例中,为所有组内的所有主机设置了一个变量:

  • ansible_port=22:指定了连接所有主机时使用的远程连接端口为 22,这是 SSH 的默认端口。

通过组变量,可以在一个地方为整个组内的主机设置共享的变量。这样可以简化配置,并确保组内的所有主机都具有相同的设置。在任务中,可以使用这些变量来实现一致的操作或配置。

此外,还可以进行组嵌套,即一个组可以包含其他组内的主机。例如:

[nginx]
192.168.41.20
192.168.41.21
192.168.41.22

[apache]
192.168.41.3[0:3]

[webs:children]        #表示为 webs 主机组中包含了 nginx 组和 apache 组内的所有主机
nginx
apache

在这个示例中,展示了组嵌套的用法。组嵌套允许创建一个包含其他组内所有主机的新组。

  • [nginx] 定义了一个名为 nginx 的组,并列出了三个主机:192.168.41.20192.168.41.21192.168.41.22

  • [apache] 定义了一个名为 apache 的组,并使用模式匹配列出了一些主机:192.168.41.30192.168.41.31192.168.41.32192.168.41.33

  • [webs:children] 定义了一个名为 webs 的组,它包含了 nginx 组和 apache 组内的所有主机。这意味着 webs 组中的主机是 nginx 组和 apache 组的并集。

通过组嵌套,可以方便地将多个组合并为一个新的组,以便在任务中对它们进行统一的操作或配置。在这个示例中,webs 组包含了 nginx 组和 apache 组内的所有主机,可以使用 webs 组来执行针对这些主机的任务。这样可以简化配置,并使组织和管理主机更加灵活。

在Ansible主机清单文件中,还可以使用其他变量来自定义连接节点的IP地址、端口号、用户名、密码等信息。例如:

ansible_host                  ansible连接节点时的IP地址
ansible_port                  连接对方的端口号,ssh连接时默认为22
ansible_user                  连接对方主机时使用的主机名。不指定时,将使用执行ansible或ansible-playbook命令的用户
ansible_password              连接时的用户的ssh密码,仅在未使用密钥对验证的情况下有效
ansible_ssh_private_key_file  指定密钥认证ssh连接时的私钥文件
ansible_ssh_common_args       提供给ssh、sftp、scp命令的额外参数
ansible_become                允许进行权限提升
ansible_become_method         指定提升权限的方式,例如可使用sudo/su/runas等方式
ansible_become_user           提升为哪个用户的权限,默认提升为root
ansible_become_password       提升为指定用户权限时的密码

这些变量可以根据需要在主机清单文件中进行设置,以满足不同的连接和权限要求。

你可能感兴趣的:(自动运维,ansible,网络,服务器,docker,架构,运维,云计算)