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.pswp.cn/bicheng/82390.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

了解FTP搜索引擎

根据资料, FTP搜索引擎是专门搜集匿名FTP服务器提供的目录列表,并向用户提供文件信息的网站; FTP搜索引擎专门针对FTP服务器上的文件进行搜索; 就是它的搜索结果是一些FTP资源; 知名的FTP搜索引擎如下, …

【大模型面试每日一题】Day 28:AdamW 相比 Adam 的核心改进是什么?

【大模型面试每日一题】Day 28:AdamW 相比 Adam 的核心改进是什么? 📌 题目重现 🌟🌟 面试官:AdamW 相比 Adam 的核心改进是什么? #mermaid-svg-BJoVHwvOm7TY1VkZ {font-family:"trebuch…

C++系统IO

C系统IO 头文件的使用 1.使用系统IO必须包含相应的头文件,通常使用#include预处理指令。 2.头文件中包含了若干变量的声明,用于实现系统IO。 3.头文件的引用方式有双引号和尖括号两种,区别在于查找路径的不同。 4.C标准库提供的头文件通常没…

多模态理解大模型高性能优化丨前沿多模态模型开发与应用实战第七期

一、引言 在前序课程中,我们系统剖析了多模态理解大模型(Qwen2.5-VL、DeepSeek-VL2)的架构设计。鉴于此类模型训练需消耗千卡级算力与TB级数据,实际应用中绝大多数的用户场景均围绕推理部署展开,模型推理的效率影响着…

各个网络协议的依赖关系

网络协议的依赖关系 学习网络协议之间的依赖关系具有多方面重要作用,具体如下: 帮助理解网络工作原理 - 整体流程明晰:网络协议分层且相互依赖,如TCP/IP协议族,应用层协议依赖传输层的TCP或UDP协议来传输数据&#…

11.8 LangGraph生产级AI Agent开发:从节点定义到高并发架构的终极指南

使用 LangGraph 构建生产级 AI Agent:LangGraph 节点与边的实现 关键词:LangGraph 节点定义, 条件边实现, 状态管理, 多会话控制, 生产级 Agent 架构 1. LangGraph 核心设计解析 LangGraph 通过图结构抽象复杂 AI 工作流,其核心要素构成如下表所示: 组件作用描述代码对应…

相机--基础

在机器人开发领域,相机种类很多,作为一个机器人领域的开发人员,我们需要清楚几个问题: 1,相机的种类有哪些? 2,各种相机的功能,使用场景? 3,需要使用的相机…

【备忘】 windows 11安装 AdGuardHome,实现开机自启,使用 DoH

windows 11安装 AdGuardHome,实现开机自启,使用 DoH 下载 AdGuardHome解压 AdGuardHome启动 AdGuard Home设置 AdGuardHome设置开机自启安装 NSSM设置开机自启重启电脑后我们可以访问 **http://127.0.0.1/** 设置使用 AdGuardHome DNS 效果图 下载 AdGua…

安装部署配置jenkins

随着现代软件开发流程的不断演进,持续集成(CI)和持续交付(CD)已经成为了开发团队必不可少的工具。而Jenkins作为最为广泛应用的CI/CD工具,能够自动化执行构建、测试、部署等任务。Maven作为Java生态中广泛使用的构建工具,它能够帮助开发人员自动化管理项目的构建、依赖和…

How to balance work and personal life?

How to balance work and personal life? 1. Background2. How to balance work and personal life?References 1. Background Let me introduce /ˌɪntrəˈdjuːs/ the background /ˈbkɡraʊnd/ first. Today we will talk about this topic: How to balance work and …

存储引擎系列--LSM的Compaction研究方法论

本文主要包含以下内容: 1、Compaction 设计空间的四个原语:触发器、数据布局、压缩粒度、数据移动策略。任何已有的compaction策略和新的策略都可以由这个四个原语组建构成。 2、详细介绍这四个原语的定义,策略方法 3、现有的基于LSM的知名系统的compaction策略按照四个原语…

关系数据库基础入门

关系数据库概述 相关名词 1、关系:在关系数据库中,实体以及实体间的联系都是用关系来表示的。类似于程序设计语言中变量的概念。 2、关系模式:是对关系的描述。类似于程序设计语言中类型定义的概念。 3、关系模型:是由若干个关系…

图解BERT

图解 Bert 大家可以访问 图解Bert 获取更加优质的阅读体验。 图解BERT一文还在持续更新中。 环境搭建 按序执行以下命令完成环境搭建: git clone https://github.com/DA-southampton/Read_Bert_Code.git cd Read_Bert_Code conda create -n Read_Bert_Code python3.9.22 co…

【HarmonyOS 5】鸿蒙中的UIAbility详解(一)

【HarmonyOS 5】鸿蒙中的UIAbility详解(一) 一、UIAbility是什么? Stage模型中的组件类型名,即UIAbility组件,包含UI,提供展示UI的能力,主要用于和用户交互。 UIAbility类似于传统移动开发An…

Transformer预训练模型微调技术全解析

引言:Transformer预训练模型与微调的浪潮 近年来,人工智能领域取得了令人瞩目的成就,特别是在自然语言处理(NLP)方面。引领这场变革的核心技术之一便是Transformer架构。自2017年 Vaswani 等人在论文 "Attention Is All You Need" 中提出以来,Transformer凭借…

《算法笔记》12.2小节——字符串专题->KMP算法 问题 C: 剪花布条

题目描述 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? 输入 输入中含有一些数据,分别是成对出现的…

实现一个前端动态模块组件(Vite+原生JS)

1. 引言 在前面的文章《使用Vite创建一个动态网页的前端项目》中我们实现了一个动态网页。不过这个动态网页的实用价值并不高,在真正实际的项目中我们希望的是能实现一个动态的模块组件。具体来说,就是有一个页面控件同时在多个页面中使用,那…

NTFS0x90属性和0xa0属性和0xb0属性的一一对应关系是index_entry中的index_node中VCN和runlist和bitmap

第一部分: 0: kd> dt _FILE_RECORD_SEGMENT_HEADER 0xc1241400 Ntfs!_FILE_RECORD_SEGMENT_HEADER 0x000 MultiSectorHeader : _MULTI_SECTOR_HEADER 0x008 Lsn : _LARGE_INTEGER 0x80e74aa 0x010 SequenceNumber : 5 0x012 Referen…

PCB 通孔是电容性的,但不一定是电容器

哼?……这是什么意思?…… 多年来,流行的观点是 PCB 通孔本质上是电容性的,因此可以用集总电容器进行建模。虽然当信号的上升时间大于或等于过孔不连续性延迟的 3 倍时,这可能是正确的,但我将向您展示为什…

Flutter 3.32 新特性

2天前,Flutter发布了最新版本3.32,我们来一起看下29到32有哪些变化。 简介 欢迎来到Flutter 3.32!此版本包含了旨在加速开发和增强应用程序的功能。准备好在网络上进行热加载,令人惊叹的原生保真Cupertino,以及与Fir…