Ansible模块——Ansible配置文件!
Ansible配置文件
Ansible 查找名为 ansible.cfg
的文件来作为自己的配置文件
[root@ansible ansible]# ansible --version
ansible [core 2.16.3]config file = /root/ansible/ansible.cfgconfigured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']ansible python module location = /usr/local/lib/python3.12/site-packages/ansible_core-2.16.3-py3.12.egg/ansibleansible collection location = /root/.ansible/collections:/usr/share/ansible/collectionsexecutable location = /usr/local/bin/ansiblepython version = 3.12.8 (main, Dec 12 2024, 16:30:29) [GCC 8.5.0 20210514 (Red Hat 8.5.0-22)] (/usr/bin/python3)jinja version = 3.1.6libyaml = True
文件位置和优先级
Ansible 的配置文件在四个位置可以出现:
-
•
ANSIBLE_CONFIG
的环境变量 -
• 当前工作目录下的
ansible.cfg
-
• 当前用户家目录下的
.ansible.cfg
隐藏文件 -
• 全局默认的配置文件
/etc/ansible/ansible.cfg
优先级由高到低:环境变量 → 当前工作目录 → 家目录 → /etc
所以执行 Ansible 指令时,先从环境变量中找配置文件,如果环境变量没有,就到当前工作目录下找配置文件,如果当前工作目录依然没有,就到当前用户的家目录下找配置文件,如果当前用户家目录下还没有,就去找 /etc/ansible/ansible.cfg
。
推荐的
ansible.cfg
管理方式:优先级从高到低如下:
1. 当前目录的
./ansible.cfg
2. 环境变量
ANSIBLE_CONFIG
指定的路径3. 用户目录下的
~/.ansible.cfg
4. 系统路径
/etc/ansible/ansible.cfg
生成一个默认的配置文件
[root@ansible ansible]# ansible-config init --disabled > ansible.cfg
文件内容
[root@ansible ansible]# grep -E '^\[' ansible.cfg
[defaults]
[privilege_escalation]
[persistent_connection]
[connection]
[colors]
[selinux]
[diff]
[galaxy]
[inventory]
[netconf_connection]
[paramiko_connection]
[jinja2]
[tags]
Ansible 配置段说明
配置段 | 用途 | 说明 |
[defaults] | 默认设置 | 主要配置 Ansible 的基础行为,比如 |
[privilege_escalation] | 提权控制 | 控制 |
[persistent_connection] | 持久连接参数 | 控制连接插件如 SSH 的持久化(可减少连接开销) |
[connection] | 通用连接配置 | 包括远程连接的超时、重试、缓存控制等 |
[colors] | 控制台颜色输出 | 定义输出中不同类型信息的颜色 |
[selinux] | SELinux 设置 | 是否自动管理 |
[diff] | 显示差异设置 | 控制是否开启 diff 模式,能在修改配置时显示差异 |
[galaxy] | Ansible Galaxy 设置 | 设置 Galaxy 源、缓存策略、角色下载等 |
[inventory] | 动态库存参数 | 针对 Inventory 插件的默认设置,比如缓存、路径等 |
[netconf_connection] | Netconf 连接参数 | 针对支持 NETCONF 的网络设备(如 Cisco、Juniper)连接设置 |
[paramiko_connection] | 使用 paramiko 时的设置 | 使用 paramiko(Python SSH 库)替代 OpenSSH 时的行为控制 |
[jinja2] | 模板渲染设置 | 控制模板变量、未定义变量行为、Jinja 环境等 |
[tags] | tag 行为 | 控制运行 playbook 时关于 tag 的匹配方式 |
常用配置选项
[defaults]
常用配置:
配置项 | 说明 | 示例 |
inventory | 指定主机清单路径 | inventory = ./hosts |
remote_user | 默认远程登录用户 | remote_user = ansible |
ask_pass | 是否在执行时询问 SSH 密码 | ask_pass = false |
ask_become_pass | 是否询问 sudo 密码 | ask_become_pass = true |
private_key_file | 指定私钥路径 | private_key_file = ~/.ssh/id_rsa |
host_key_checking | 是否启用 SSH 主机密钥检查 | host_key_checking = false |
timeout | 连接超时时间(秒) | timeout = 30 |
forks | 并发执行主机数 | forks = 10 |
retry_files_enabled | 是否生成 | retry_files_enabled = false |
log_path | 日志文件路径 | log_path = /var/log/ansible.log |
roles_path | 指定角色目录 | roles_path = ./roles |
gathering | 控制 facts 的收集方式(implicit、explicit、smart) | gathering = smart |
fact_caching | 是否启用 facts 缓存 | fact_caching = jsonfile |
fact_caching_connection | facts 缓存路径 | fact_caching_connection = ./fact_cache |
[privilege_escalation]
提权配置:
配置项 | 说明 | 示例 |
become | 是否启用提权 | become = true |
become_method | 使用提权方式(sudo/su/pbrun/doas 等) | become_method = sudo |
become_user | 提权后的目标用户 | become_user = root |
become_ask_pass | 是否询问提权密码 | become_ask_pass = false |
[ssh_connection]
(或 [connection]
)连接优化配置:
配置项 | 说明 | 示例 |
pipelining | 启用 SSH pipelining,加速执行 | pipelining = true |
control_path | SSH 控制连接的 socket 路径 | control_path = %(directory)s/%%h-%%r |
ssh_args | 传递给 SSH 的参数 | ssh_args = -o ControlMaster=auto -o ControlPersist=60s |
retries | SSH 失败重试次数 | retries = 3 |
[jinja2]
模板渲染相关:
配置项 | 说明 | 示例 |
undefined | 控制未定义变量的处理方式(如 | undefined = strict |
trim_blocks | 去除 Jinja2 模板中的空行 | trim_blocks = true |
lstrip_blocks | 去除 Jinja2 左侧空格 | lstrip_blocks = true |
[diff]
差异显示:
配置项 | 说明 | 示例 |
always | 是否始终显示变更 diff | always = true |
context | 显示上下文行数 | context = 5 |
[galaxy]
Ansible Galaxy 设置:
配置项 | 说明 | 示例 |
server_list | 指定 Galaxy 服务器 | server_list = ansible_galaxy |
ignore_certs | 忽略 Galaxy HTTPS 证书验证 | ignore_certs = false |
[inventory]
主机清单设置(动态库存):
配置项 | 说明 | 示例 |
enable_plugins | 启用的库存插件 | enable_plugins = host_list, yaml, ini |
cache | 启用主机缓存 | cache = true |
cache_plugin | 使用的缓存插件 | cache_plugin = jsonfile |
cache_timeout | 缓存有效时间 | cache_timeout = 600 |
其他配置段(可选):
段名 | 用途 |
[paramiko_connection] | 如果使用 paramiko 作为 SSH 连接后端,配置连接行为 |
[netconf_connection] | 管理 NETCONF 网络设备的连接参数 |
[colors] | 控制终端输出颜色样式 |
[selinux] | 配置如何处理 SELinux 标签修复 |
[tags] | 控制 tag 匹配行为,比如 |
配置案例
[defaults]
inventory = ./inventory # 主机清单的位置
fork = 20 # 并发执行的主机数
ask_pass = False # 执行 Ansible 时是否询问密码
remote_user = root # 表示使用 root 用户来访问被控节点
log_path = /var/log/ansible.log # 指定 Ansible 的日志文件位置
host_key_checking = False # 是否进行 SSH 主机 Key 检查
ansible_python_interpreter = /usr/bin/python3.9 # 指定被控端上 Python 的解释器
[privilege_escalation]
become = True # 是否提权
become_method = sudo # 提权的方式
become_user = root # 提权到哪个用户
become_ask_pass = False # 执行 Ansible 时是否询问提权密码
使用时删除注释。