Ansible配置文件与主机清单
Ansible配置文件与主机清单
Ansible的配置文件与主机清单是实现自动化管理的基础——配置文件定义Ansible的运行规则(如连接用户、并发数、权限升级等),主机清单指定待管理的目标主机及分组,二者配合确保Ansible命令与Playbook高效执行。本章将从配置文件结构、优先级、核心参数解析,到主机清单定义、实战配置展开详细说明。
一、/etc/ansible目录下的核心文件与目录
通过包管理工具(如yum
、apt
)安装Ansible后,默认在/etc/ansible
目录下生成3个核心文件/目录,分别承担不同功能:
文件名/目录名 | 类型 | 核心作用 |
---|---|---|
hosts | 文件 | Ansible的默认主机清单配置文件,用于记录待管理的受控主机IP/域名及分组信息。 |
ansible.cfg | 文件 | Ansible的主配置文件,定义Ansible的全局运行参数( |
roles | 目录 | 角色(Role)的默认存储目录,用于存放按功能模块化的Playbook |
二、Ansible配置文件的优先级
Ansible配置文件以ini
格式存储(键值对+分区结构),支持通过环境变量、不同路径的配置文件覆盖默认参数。运行Ansible命令(如ansible
、ansible-playbook
)时,会按以下从高到低的顺序查找配置文件,优先级高的配置会覆盖低优先级的配置:
-
环境变量
ANSIBLE_CONFIG
优先级最高,通过设置环境变量指定自定义配置文件路径,例如:export ANSIBLE_CONFIG=/home/student/ansible/ansible.cfg
该方式适合临时切换配置文件场景(如不同项目使用不同配置)。
-
当前工作目录下的
./ansible.cfg
若当前目录存在ansible.cfg
,则优先使用该文件(无需设置环境变量),适合项目级配置隔离(如每个项目目录下存放独立配置)。 -
当前用户家目录下的
~/.ansible.cfg
用户级配置文件,仅对当前用户生效,适合自定义个人常用配置(如默认连接用户、禁用主机密钥检查)。 -
系统默认配置文件
/etc/ansible/ansible.cfg
优先级最低,是Ansible安装时自动生成的全局默认配置,若未通过前3种方式指定配置,将使用此文件。
三、主配置文件/etc/ansible/ansible.cfg
核心参数解析
[defaults]
# 1. 主机清单配置
inventory = /etc/ansible/hosts # 指定默认主机清单路径,可修改为自定义路径# 2. 模块与工具路径
library = /usr/share/my_modules/ # Ansible默认搜寻自定义模块的目录(第三方模块存放路径)
module_utils = /usr/share/my_module_utils/ # 模块工具文件存放目录
roles_path = /etc/ansible/roles # 角色(Role)的默认存储路径,可添加多个路径(用冒号分隔,如"/path1:/path2")
collections_path = # 集合(Collection)的存储路径,第三方模块集合(如community.general)通常安装在此# 3. 临时文件配置
remote_tmp = ~/.ansible/tmp # 受控主机上存放临时Python命令文件的目录
local_tmp = ~/.ansible/tmp # 控制节点上存放临时文件的目录# 4. 并发与连接配置
forks = 5 # 默认并发执行任务的进程数(值越大执行越快,建议根据控制节点性能调整,如10、20)
poll_interval = 15 # 轮询任务状态的时间间隔(秒)
remote_port = 22 # 受控主机的SSH端口(默认22,若SSH端口修改需对应调整)
remote_user = root # 连接受控主机时使用的默认用户(建议改为普通用户,再通过提权获取权限)
host_key_checking = False # 是否检查受控主机的SSH密钥(False可避免首次连接时手动确认,适合自动化场景)# 5. 密码与权限询问配置
ask_sudo_pass = True # 执行`sudo`时是否询问密码(默认no,若受控主机sudo需密码则设为yes)
ask_pass = True # 连接受控主机时是否询问SSH密码(默认no,若未配置免密登录则设为yes)
2. [privilege_escalation]
:特权升级配置
Ansible默认使用连接用户执行任务,但普通用户通常无管理员权限(如安装软件、修改系统配置),该分区用于配置“权限升级”(类似sudo
),让普通用户临时获取root
权限:
[privilege_escalation]
become = true # 是否默认开启权限升级(true表示自动提权,false需手动在Playbook中指定)
become_method = sudo # 权限升级方式(默认sudo,其他可选su、pbrun等)
become_user = root # 升级后的目标用户(默认root,即提权到root)
become_ask_pass = false# 执行提权时是否询问密码(false表示无需密码,需提前在受控主机配置sudo免密)
四、主机清单配置
主机清单是Ansible识别“管理范围”的核心,用于定义受控主机的IP/域名、分组、组内变量等,示例如下:
# 1. 单主机(直接写IP或域名,未分组)
host1.example.com # 域名形式
host2.example.com
192.168.100.10 # IP形式# 2. 主机组(用"[组名]"标识,组内包含多个主机)
[hostservers] # 组名:webservers(Web服务主机组)
host1.example.com
host2.example.com# 3. 子组(用"[父组名:children]"标识,父组包含多个子组)
[all:children] # 父组名:all(内置组,代表所有主机),子组为hostservers
hostservers
2. 主机清单常用命令
通过ansible
命令查看清单中的主机信息,验证清单配置是否正确:
# 1. 查看清单中所有受控主机(-i指定清单路径,--list-hosts仅显示主机列表)
ansible all -i /etc/ansible/hosts --list-hosts# 2. 查看指定组(如webservers)包含的受控主机
ansible hostservers -i /etc/ansible/hosts --list-hosts# 3. 查看自定义清单(如/home/student/ansible/inventory)中的主机
ansible all -i /home/student/ansible/inventory --list-hosts
五、实战:在控制节点配置Ansible
以“控制节点server.example.com
”为例,完成Ansible的安装与基础配置,满足指定需求:
1. 步骤1:安装Ansible所需软件包
根据系统类型选择安装命令(以RHEL/CentOS为例):
# 1. 配置YUM仓库(若未配置)
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo# 2. 安装Ansible
sudo dnf install -y ansible# 3. 验证安装(查看Ansible版本)
ansible --version
2. 步骤2:创建静态主机清单/home/student/ansible/inventory
需求:node1
属dev
组、node2
属test
组、node3
属prod
组,且prod
组是webservers
组的子组。
创建并编辑清单文件:
# 1. 创建目录(若不存在)
mkdir -p /home/student/ansible# 2. 编辑清单文件
vim /home/student/ansible/inventory
写入以下内容:
# 定义各主机及所属组
[dev]
node1[test]
node2[prod]
node3# 定义子组:webservers包含prod组
[webservers:children]
prod
3. 步骤3:创建配置文件/home/student/ansible/ansible.cfg
需求:指定主机清单路径为/home/student/ansible/inventory
,角色路径包含/home/student/ansible/roles
。
创建并编辑配置文件:
vim /home/student/ansible/ansible.cfg
写入以下内容:
[defaults]
# 指定主机清单路径(覆盖默认的/etc/ansible/hosts)
inventory = /home/student/ansible/inventory# 指定角色路径(支持多个路径,用冒号分隔,此处添加自定义路径)
roles_path = /home/student/ansible/roles:/etc/ansible/roles# 可选:添加常用优化配置
remote_user = student # 用student用户连接受控主机(需提前配置免密登录)
host_key_checking = False # 禁用SSH密钥检查,避免手动确认
forks = 10 # 并发数调整为10,提升执行效率[privilege_escalation]
become = true # 默认开启提权
become_method = sudo # 提权方式为sudo
become_user = root # 提权到root
become_ask_pass = false# sudo免密(需在受控主机配置student用户sudo免密)
4. 步骤4:验证配置
# 1. 查看当前使用的配置文件(确认加载自定义配置)
ansible --version # 输出中"config file"应显示为/home/student/ansible/ansible.cfg# 2. 查看清单中的主机分组(验证清单配置)
ansible all -i /home/student/ansible/inventory --list-hosts
ansible webservers -i /home/student/ansible/inventory --list-hosts # 查看webservers组(应包含node3)
通过以上配置,控制节点server.example.com
已具备Ansible自动化管理能力,可基于自定义的配置文件与主机清单执行后续任务(如运行Playbook、批量执行命令)。