Ansible模块——Ansible配置文件!

Ansible配置文件

Ansible 查找名为 ansible.cfg 的文件来作为自己的配置文件

复制代码
[root@ansible ansible]# ansible --version
ansible [core 2.16.3]
  config file = /root/ansible/ansible.cfg
  configured 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/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python 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.6
  libyaml = True

文件位置和优先级

Ansible 的配置文件在四个位置可以出现:

  • ANSIBLE_CONFIG 的环境变量

  • • 当前工作目录下的 ansible.cfg

  • • 当前用户家目录下的 .ansible.cfg 隐藏文件

  • • 全局默认的配置文件 /etc/ansible/ansible.cfg

优先级由高到低:环境变量 → 当前工作目录 → 家目录 → /etc

所以执行 Ansible 指令时,先从环境变量中找配置文件,如果环境变量没有,就到当前工作目录下找配置文件,如果当前工作目录依然没有,就到当前用户的家目录下找配置文件,如果当前用户家目录下还没有,就去找 /etc/ansible/ansible.cfg

推荐的 ansible.cfg 管理方式:

优先级从高到低如下:

    1. 当前目录的 ./ansible.cfg
    1. 环境变量 ANSIBLE_CONFIG 指定的路径
    1. 用户目录下的 ~/.ansible.cfg
    1. 系统路径 /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 的基础行为,比如 inventory, remote_user, timeout, roles_path
privilege_escalation 提权控制 控制 become, become_user, become_method 等提权行为(如 sudo)
persistent_connection 持久连接参数 控制连接插件如 SSH 的持久化(可减少连接开销)
connection 通用连接配置 包括远程连接的超时、重试、缓存控制等
colors 控制台颜色输出 定义输出中不同类型信息的颜色
selinux SELinux 设置 是否自动管理 semanage、标签恢复等(对启用 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 文件 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 控制未定义变量的处理方式(如 strict 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 匹配行为,比如 skip_tags 默认值等

配置案例

复制代码
[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 时是否询问提权密码

使用时删除注释。

相关推荐
Android系统攻城狮32 分钟前
Linux PipeWire深度解析之pw_context_add_spa_lib调用流程与实战(二十九)
linux·运维·服务器·音频进阶·pipewire音频进阶
Dovis(誓平步青云)1 小时前
《如何在CentOS 7中添加Plex官方软件源:解决文件磁盘难管理难题》
linux·运维·服务器·后端·生成对抗网络·centos
草莓熊Lotso1 小时前
【Linux网络】深入理解Linux IO多路复用:select服务器完善、内核原理与poll实战
linux·运维·服务器·c语言·网络·c++
byte轻骑兵1 小时前
BlueZ源码编译环境配置全指南:Linux桌面原生编译 + 嵌入式ARM交叉编译 + 定制裁剪与调试实战
linux·arm开发·蓝牙·bluez·电脑蓝牙
纪伊路上盛名在1 小时前
NVML ERROR_ RM has detected an NVML_RM version mismatch
linux·数据库·gpu·驱动
醉逍遥_祥1 小时前
Linux进程与NuttX任务(Linux Processes vs NuttX Tasks)
linux·单片机·嵌入式软件
AndyHeee1 小时前
Linux 内核底层机制:设备树(Device Tree)的数据结构与内存组织
linux·前端·数据结构
XH华2 小时前
Linux系统第二章:常见的Linux指令(上)
linux·运维·服务器
触底反弹11 小时前
Vibe Coding 不写 Git,等于悬崖边飙车
人工智能·git·面试
FoldWinCard11 小时前
D5 Linux 网络及端口命令
linux·运维·服务器