当前位置: 首页 > java >正文

Ansible配置文件常用选项详解

Ansible 的配置文件采用 INI 格式,分为多个模块,每个模块包含特定功能的配置参数。
以下是ansible.cfg配置文件中对各部分的详细解析:
[defaults](全局默认配置)
inventory
指定主机清单文件路径,默认值为 /etc/ansible/hosts。若取消注释,Ansible 会从此文件读取主机信息。

#inventory = /etc/ansible/hosts

remote_user
默认远程登录用户(如 root)。若未在 Playbook 中指定 remote_user,则使用此值。

#remote_user = root

host_key_checking
是否验证 SSH 主机密钥。默认启用(True)。禁用需取消注释并设为 False(适用于测试环境):

#host_key_checking = False

forks
并发任务数,默认 5。增大此值可提升执行效率(需根据控制机性能调整)。

#forks = 5

gathering
控制是否自动收集主机信息(facts)。默认 implicit(隐式收集,可通过 gather_facts: False 关闭)。

#gathering = implicit

roles_path
指定 Ansible 角色的搜索路径(支持多路径,用 : 分隔)。

#roles_path = /etc/ansible/roles

log_path
指定日志文件路径,默认不记录日志。取消注释后启用日志:

#log_path = /var/log/ansible.log

module_name 默认模块(如 command、shell)

module_name = shell

private_key_file 默认 SSH 私钥路径

private_key_file = ~/.ssh/id_rsa

vault_password_file Vault 密码文件路径

vault_password_file = ~/.vault_pass

display_skipped_hosts 是否显示跳过的任务

display_skipped_hosts = False  # 默认True

hash_behaviour 变量冲突时的行为(replace 或 merge)

hash_behaviour = merge 默认replace 

nocows 禁用 cowsay 动画 默认0

nocows = 1

nocolor 禁用输出颜色 默认0

	nocolor = 1

fact_caching 缓存 Facts 的存储类型(如 jsonfile、redis)

fact_caching = jsonfile # 默认memory

fact_caching_connection 缓存存储路径(如 Redis 为 localhost:6379:0)

fact_caching_connection = /tmp/facts

[inventory](主机清单配置)
enable_plugins
指定启用的清单插件,默认包括 host_list, script, auto 等。可添加自定义插件(如 virtualbox)。

#enable_plugins = host_list, virtualbox, yaml, constructed

ignore_extensions
解析目录作为清单源时,忽略指定扩展名的文件。

#ignore_extensions = .pyc, .pyo, .swp, .bak, ~, .rpm, .md, .txt

ignore_patterns 忽略的文件匹配模式 默认空

ignore_patterns = test_*

unparsed_is_failed 未解析的清单文件是否报错 默认False

unparsed_is_failed = True

[privilege_escalation](权限提升配置)
become
是否启用权限提升(如 sudo)。默认 True。

#become = True

become_method
提升权限的方式(如 sudo、su)。

#become_method = sudo

become_user
提升权限后的用户(默认 root)。

#become_user = root

become_ask_pass
是否在权限提升时提示输入密码。默认 False。

#become_ask_pass = False

[paramiko_connection]

[ssh_connection](SSH 连接优化)
ssh_args
SSH 连接参数。默认启用 ControlPersist 提升性能:

#ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s

pipelining
启用管道传输以提升性能。需确保目标主机的 sudoers 文件禁用 requiretty。

#pipelining = False  # 改为 True 启用

retries
SSH 连接失败后的重试次数(默认 3 次)。

#retries = 3

transfer_method
文件传输方式(sftp、scp、piped)默认smart

transfer_method = sftp

[persistent_connection](持久连接配置)
connect_timeout
持久连接的空闲超时时间(默认 30 秒)。

#connect_timeout = 30

command_timeout
单条命令的超时时间(默认30秒)

command_timeout = 60

[accelerate](加速模式配置)
accelerate_port 加速模式端口

accelerate_port = 6000  # 默认5099

accelerate_timeout 加速连接超时时间(秒)

accelerate_timeout = 60 # 默认30

accelerate_multi_key 允许多个密钥

accelerate_multi_key = yes # 默认 no

[selinux](SELinux 配置)
special_context_filesystems 需要特殊处理的文件系统,默认nfs, vboxsf, fuse, ramfs, 9p, vfat

special_context_filesystems = cifs

libvirt_lxc_noseclabel 允许 libvirt_lxc 无 SELinux 标签,默认no

libvirt_lxc_noseclabel = yes

[colors](输出颜色配置)
自定义不同日志级别的颜色(如错误信息为红色):

#error = red
#ok = green

[diff](差异显示配置)
always
是否始终显示文件差异(等同于命令行参数 -D)。

#always = no  # 改为 yes 启用

context 差异显示的上下文行数

context = 3 # 默认

常见配置场景
禁用 SSH 主机密钥检查(适用于测试环境):

[defaults]
host_key_checking = False

启用管道传输优化性能:

[ssh_connection]
pipelining = True

配置默认权限提升:

[privilege_escalation]
become = True
become_method = sudo
become_user = root

总结
优先级:Ansible 配置按以下顺序加载(优先级从高到低):
环境变量 ANSIBLE_CONFIG
当前目录的 ansible.cfg
用户家目录的 .ansible.cfg
/etc/ansible/ansible.cfg
建议:在项目目录中创建 ansible.cfg,覆盖全局配置,避免修改系统级文件。

以下是hosts文件中对各部分的详细解析:
Ansible 的主机清单文件(Inventory File)用于定义被管理的主机和组,支持灵活的主机分组、模式匹配及变量定义。以下是对配置文件的逐部分解析:
1.基础结构
文件路径:默认路径为 /etc/ansible/hosts,但可通过 ansible.cfg 或命令行参数自定义。
注释与空白行:以 # 开头的行是注释,空白行会被忽略。

2.未分组的主机
直接在文件顶部列出主机(不归属任何组):

# green.example.com
# blue.example.com
# 192.168.100.1
# 192.168.100.10

取消注释后,这些主机会被 Ansible 识别,但无组归属。

3.分组主机
使用 [组名] 定义组,组内列出主机名或 IP:

# [webservers]
# alpha.example.org
# beta.example.org
# 192.168.1.100
# 192.168.1.110

取消注释后,组 webservers 包含 4 台主机。
作用:可针对组执行任务(如 ansible webservers -m ping)。

4.主机范围模式
使用 [start:end] 简化连续主机的定义:

# www[001:006].example.com

实际解析为:
www001.example.com, www002.example.com, …, www006.example.com。
支持格式:数字填充(如 001 表示 3 位补零),也支持无前导零(见下方示例)。

5.无前导零的主机范围
直接使用数字区间:

# db-[99:101]-node.example.com

实际解析为:
db-99-node.example.com, db-100-node.example.com, db-101-node.example.com。

6.高级用法(需手动添加)
用户示例
未展示,但以下功能是 Ansible 支持的:

嵌套组:
使用 :children 定义父组包含子组:

[web:children]
webservers
loadbalancers

变量定义:
为组或主机设置变量:

[webservers]
web1.example.com ansible_user=admin
[dbservers:vars]
db_port=3306

动态清单:
通过脚本或云平台 API 动态生成主机清单(需可执行文件返回 JSON 格式)。

7.示例配置(取消注释后)

[webservers]
alpha.example.org
beta.example.org
192.168.1.100
192.168.1.110[dbservers]
db01.intranet.mydomain.net
db02.intranet.mydomain.net
10.25.1.56
10.25.1.57# 使用主机范围
www[001:003].example.com
db-[99:101]-node.example.com

Ansible内置变量:
在这里插入图片描述
示例:

[webservers]
web1.example.com ansible_ssh_pass='your_password'
web2.example.com ansible_ssh_pass='your_password'

8.常见问题与注意事项
1.主机范围语法:
格式必须为 [start:end],支持数字和字母(如 web[a:d].example.com 生成 weba 到 webd)。
补零操作:www[01:05].example.com 生成 www01, www02, …, www05。
2.组与变量优先级:
主机变量 > 组变量 > 父组变量 > 全局变量。
3.动态清单:
更适合云环境,可通过 ansible-inventory -i dynamic_inventory.py --list 测试。
4.别名与端口:
定义别名和指定 SSH 端口:

jump ansible_host=192.168.1.200 ansible_port=2222

9.验证清单
使用命令检查主机清单是否正确解析:

ansible-inventory -i hosts.cfg --list

rules目录的的主要作用及示例
一、Roles 的主要作用
Ansible Roles 是一种模块化设计模式,用于将 Playbook 拆解为可复用的组件。其主要作用包括:

1.代码组织
将任务、变量、文件、模板等按功能分类,形成标准化的目录结构,提升代码可读性。

2.复用性
同一 Role 可在多个 Playbook 中重复使用,避免重复编写相似代码。

3.协作友好
通过 Roles 分离不同功能模块,便于团队分工开发和维护。

4.变量与逻辑分离
将配置变量(如端口、路径)与任务逻辑解耦,增强灵活性。

5.易于扩展
支持依赖管理(通过 meta/main.yml),可定义 Role 之间的依赖关系。

二、Roles 的标准目录结构
一个完整的 Role 目录通常包含以下子目录和文件(以 roles/nginx 为例):

roles/
└── nginx/                  # Role 名称├── tasks/              # 任务定义│   └── main.yml        # 主任务文件├── handlers/           # 触发器(服务重启等)│   └── main.yml├── templates/          # Jinja2 模板文件│   └── nginx.conf.j2├── files/              # 静态文件(无需模板渲染)│   └── custom_404.html├── vars/               # 角色专用变量│   └── main.yml├── defaults/           # 默认变量(优先级最低)│   └── main.yml├── meta/               # 角色元数据(依赖、作者等)│   └── main.yml└── README.md           # 角色说明文档

三、Roles 示例:部署 Nginx
1.目录结构

roles/
└── nginx/├── tasks/│   └── main.yml├── handlers/│   └── main.yml├── templates/│   └── nginx.conf.j2└── defaults/└── main.yml

2.关键文件内容
tasks/main.yml(核心任务)

- name: Install Nginxapt:name: nginxstate: present- name: Copy Nginx configurationtemplate:src: nginx.conf.j2dest: /etc/nginx/nginx.confnotify: restart nginx- name: Ensure Nginx is runningservice:name: nginxstate: startedenabled: yes

handlers/main.yml(触发器)

- name: restart nginxservice:name: nginxstate: restarted

templates/nginx.conf.j2(模板文件)

user www-data;
worker_processes {{ nginx_worker_processes }};
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;events {worker_connections {{ nginx_worker_connections }};
}

defaults/main.yml(默认变量)

nginx_worker_processes: 2
nginx_worker_connections: 1024

四、使用 Role 的 Playbook
在 Playbook 中引用 Role(site.yml):

- hosts: webserversroles:- role: nginxvars:nginx_worker_processes: 4  # 覆盖默认变量
http://www.xdnf.cn/news/8826.html

相关文章:

  • [c语言实战]C语言多线程编程:从零开发高并发任务调度器(五)
  • 浅谈ggplot2图表美化~
  • 8:OpenCV—仿射变换和坐标映射
  • 每日Prompt:龙虎斗
  • LangChain4j 项目实战——idea快捷键搜索
  • 力扣第157场双周赛
  • NISP和CISP有什么区别,哪个更好
  • 内容中台的核心价值是什么?
  • 决策引擎与规则引擎在交易所业务风控中的建设思路、架构设
  • 【开源项目】成本50元内的开源项目
  • 只能上百度b站打不开其他网页
  • 关于 java: 2. 面向对象编程(OOP)核心概念
  • lc hot 100之:回文链表
  • 探索容器技术:Docker与Kubernetes的实践指南
  • TiDB:从快速上手到核心原理与最佳实践
  • FreeRTOS--信号量
  • JavaEE 网络编程套接字详解与实战示例
  • QNAP NEXTCLOUD 域名访问
  • GO语言基础4 Errors 报错
  • Redis之金字塔模型分层架构
  • go实现钉钉三方登录
  • 开源 OIDC(OpenID Connect)身份提供方(IdP)、iam选型
  • 历年安徽大学保研上机真题
  • AWS EC2 使用Splunk DB connect 连接 RDS mysql
  • ​​C++ 中 protected/public/private 访问控制修饰符的区别​
  • 白皮精读:全国统一数据资产登记体系建设白皮书【附全文阅读】
  • 使用Vue3制作一款个性化上传组件
  • 刷leetcode hot100返航版--栈和队列5/24
  • java多态的学习笔记
  • 从工程实践角度分析H.264与H.265的技术差异