linux企业实战 --ansible之清单配置 (INI语法&YAML语法)

本文详细介绍了Ansible清单配置的两种方式:INI和YAML语法。涵盖了如何通过IP、主机名及免密连接添加服务器,以及如何利用分组功能进行高效管理。深入探讨了YAML语法在清单配置中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、INI配置ansible清单

cd /etc/ansible
vim hosts	#ansible的清单文件

在这里插入图片描述

1. 将一台服务器添加到清单中:

a. 用IP连接
vim hosts	#编辑清单文件

在这里插入图片描述

ansible 172.25.42.2 -m ping		#使用ansible的ping模块连接

在这里插入图片描述

发现连接失败,是因为ansible并不知道我们要连接的用户和密码

再次编辑ansible清单,写入用户和密码:

在这里插入图片描述
在这里插入图片描述
此时连接成功!!

b. 用主机名连接

我们还可以不用ip地址去连接,而给每台主机起一个别名:

vim hosts

在这里插入图片描述

ansible server2 -m ping	#连接成功

在这里插入图片描述

c. 免密连接(简化清单书写)

其实也可以不必在清单中写入这么多的信息,我们可以做好免密:

ssh-keygen
ssh-copy-id server1
ssh-copy-id server2
ssh-copy-id server3
ssh-copy-id server4

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

vim hosts 

在这里插入图片描述

ansible 172.25.254.3 -m ping	#连接成功

在这里插入图片描述
使用别名连接:

vim hosts 

在这里插入图片描述

ansible server3 -m ping	#连接成功

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

2. ansible的分组功能

引言: 做好免密连接后,加入两个IP

vim hosts 
写入:
172.25.42.2
172.25.42.3

在这里插入图片描述

ansible all -m ping

在这里插入图片描述

a. 分组类别一:

写法一:

[A]
172.25.42.2
172.25.42.3

[B]
172.25.42.4

在这里插入图片描述在这里插入图片描述

写法二:

[A]
172.25.42.[2:3]		# 注意:此处的[2:3]表示23,如果你有n台主机,也可以写[2:n]

在这里插入图片描述
在这里插入图片描述
写法三:使用主机名的方式配置

[A]
servera
serverb

注意: 主机名和别名的区别在于,别名要指定ip地址,而主机名必须写好解析
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
写法四:

[A]
server[a:b]

在这里插入图片描述在这里插入图片描述

b. 分组类别二:
[proA]
172.25.42.3
[proB]
172.25.42.4

[pro:children]
proA
proB

在这里插入图片描述在这里插入图片描述

二、YAML语法配置ansible清单

1. YAML语法

YAML:(Yet Another Markup Language)语言(发音/'jaemal/ )是一个类似XML、JSON的标记性语言。YAML强调以数据为中心,并不是以标识语言为重点。因而YAML本身的定义比较简单,号称“一种人性化的数据格式语言”。目的就是方便人类读写。它实质上是一种通用的数据串行化格式
我们可以使用YAML编写配置文件,而ansible的清单也支持YAML的语法,所以我们可以使用YAML语法编写清单,从而管理受管主机

2. YANL配置清单

a. 配置一

INI

172.25.42.2
172.25.42.3

YAML

all:
  hosts:
    172.25.42.2:
    172.25.42.3:

在这里插入图片描述
在这里插入图片描述

b. 配置二

INI

172.25.42.2
[test1]
172.25.42.3
[test2]
172.25.42.4

YNML

all:
  hosts:
    172.25.42.2:
  children:
    test1:
      hosts:
        172.25.42.3:
    test2:
      hosts:
        172.25.42.4:

在这里插入图片描述在这里插入图片描述

c. 配置三

INI

INI:
[proA]
172.25.42.2
[proB]
172.25.42.3

[pro:children]
proA
proB

YAML

all:
  children:
    pro:
      children:
        proA:
          hosts:
            172.25.42.3:
        proB:
          hosts:
            172.25.42.4:

在这里插入图片描述在这里插入图片描述在这里插入图片描述

d. 配置四

使用别名的方式配置受管主机

INI

172.25.42.2
serverc ansible_host=172.25.42.3
172.25.42.4

YAML

all:
  hosts:
    172.25.42.2:
    serverc:
      ansible_host:  172.25.42.3
    172.25.42.4:

在这里插入图片描述
在这里插入图片描述

<think>嗯,用户让我介绍一下Ansible的主机清单配置。首先,我需要回忆一下Ansible的基础知识。Ansible是一个自动化工具,主机清单(Inventory)是它的核心组件之一,用来管理目标主机的信息。那用户可能刚接触Ansible,需要了解如何组织和配置主机清单。 首先,我应该解释主机清单的基本概念,它的作用和常见形式。默认情况下,Ansible使用/etc/ansible/hosts文件,但用户也可以自定义。接下来,可能需要分点说明,比如清单的结构、分组、变量设置等。 用户可能需要知道如何定义主机和组。例如,如何将主机分组,方便批量操作。比如webservers组、dbservers组,这样在playbook中可以指定对哪个组执行任务。还要提到主机变量的定义,比如ansible_user、ansible_ssh_private_key_file这些常用参数。 然后,主机清单的格式,可能是INI格式或者YAML。需要举例子说明这两种格式的不同写法,比如INI中使用方括号分组,YAML则用结构化的方式。同时,动态清单的概念可能也需要提一下,不过用户如果是初学者,可能暂时用不上,可以简单带过。 另外,主机别名和端口指定也很重要。比如,如果主机的SSH端口不是默认的22,怎么在清单中指定。还有,如何为主机或组设置变量,这些变量可以在playbook中引用。 可能用户还会关心如何验证主机清单是否正确,比如使用ansible命令的--list-hosts选项来测试。或者如何同时使用多个清单文件,通过-i参数指定。 需要注意避免使用复杂术语,保持解释简洁,结合示例会更清楚。例如,给出一个INI格式的示例,展示分组和变量设置,再给出对应的YAML示例。同时提醒用户注意语法格式,比如缩进、冒号等,避免常见错误。 还有,用户可能在实际操作中遇到问题,比如主机无法连接,权限问题等,可以建议他们检查SSH配置、密钥权限,或者使用ansible -m ping来测试连通性。不过这部分可能属于故障排除,可以稍微提及,但重点还是配置方法。 最后,总结一下主机清单的重要性,以及正确配置对自动化任务的影响。可能还需要提到进阶内容,比如动态清单和自定义插件,但暂时不深入,保持基础知识的完整性。</think>Ansible 的主机清单(Inventory)是定义和管理目标主机的核心配置文件。它记录了哪些主机或组可以被 Ansible 控制,并支持灵活的分组和变量定义。以下是详细说明: --- ### 一、基础概念 1. **作用** - 标识被管理的主机(IP/域名) - 对主机进行逻辑分组(如 `webservers`, `dbservers`) - 为单个主机或组设置变量(如 SSH 端口、连接用户) 2. **默认路径** - `/etc/ansible/hosts`(可通过 `-i` 参数指定自定义文件) --- ### 二、主机清单配置格式 #### 1. **INI 格式(常用)** ```ini # 定义单个主机 192.168.1.10 example.com # 指定别名和SSH端口 web01 ansible_host=192.168.1.11 ansible_port=2222 # 主机分组 [webservers] 192.168.1.20 192.168.1.21 [dbservers] db01.example.com db02.example.com # 嵌套分组(:children) [production:children] webservers dbservers ``` #### 2. **YAML 格式** ```yaml all: hosts: web01: ansible_host: 192.168.1.11 ansible_port: 2222 children: webservers: hosts: 192.168.1.20: 192.168.1.21: dbservers: hosts: db01.example.com: db02.example.com: ``` --- ### 三、常用配置项 #### 1. **主机变量** ```ini [webservers] web01 ansible_ssh_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa ``` #### 2. **组变量** ```ini [webservers:vars] ansible_ssh_user=admin http_port=80 ``` #### 3. **特殊分组** - `all`:所有主机 - `ungrouped`:未分组的独立主机 --- ### 四、高级用法 1. **动态清单** 通过脚本动态生成清单(如从云平台 API 获取主机列表): ```bash ansible -i dynamic_inventory.py all --list-hosts ``` 2. **多文件管理** 将清单拆分为多个文件,存放在 `inventory/` 目录: ```bash ansible-playbook -i inventory/ playbook.yml ``` 3. **变量继承** 使用 `:vars` 和 `:children` 实现层级变量覆盖: ```ini [production:children] webservers [production:vars] env=prod ``` --- ### 五、验证清单 ```bash # 列出所有主机 ansible all --list-hosts # 列出指定分组的主机 ansible webservers --list-hosts # 测试连通性 ansible all -m ping ``` --- ### 六、注意事项 1. 主机别名需唯一,避免冲突 2. 变量优先级:主机变量 > 组变量 > 全局变量 3. 推荐使用 `ansible.cfg` 配置默认清单路径 通过合理配置主机清单,可以实现对复杂环境的精准控制,是 Ansible 自动化任务的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值