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

使用时删除注释。

相关推荐
chilavert31826 分钟前
深度剖析Node.js的原理及事件方式
linux·node.js·编辑器·vim
☆凡尘清心☆1 小时前
CentOS 7 环境中部署 LNMP(Linux + Nginx + MySQL 5.7 + PHP)
linux·nginx·centos·lnmp
2401_874275171 小时前
linux、docker、git相关操作
linux·git·docker
唐青枫1 小时前
Linux 下如何查看进程的资源限制信息?
linux
孙克旭_2 小时前
day024-网络基础-TCP与UDP、DNS
linux·运维·网络·网络协议·tcp/ip·udp
qq_243050792 小时前
thc-ssl-dos:SSL 压力测试的轻量级工具!全参数详细教程!Kali Linux教程!
linux·网络·安全·网络安全·压力测试·ssl·kali linux
regedit802 小时前
Centos7升级openssl
linux·运维·服务器
渡我白衣3 小时前
Linux操作系统之进程(四):命令行参数与环境变量
linux
藥瓿亭3 小时前
2024 CKA模拟系统制作 | Step-By-Step | 18、题目搭建-备份还原Etcd
linux·运维·服务器·ubuntu·kubernetes·etcd·cka
洁✘3 小时前
lvs-keepalived高可用群集
linux·服务器·lvs