【CI/CD】Ansible知识库
一、主机清单配置
1. 配置文件路径
- 默认路径
/etc/ansible/hosts
这是 Ansible 的全局默认库存文件路径,但许多用户可能不会直接使用它。 - 项目目录或自定义路径
用户通常会为不同项目创建独立的库存文件,例如:
当前目录下的 hosts、inventory 或 inventory.ini 文件。
通过命令行 -i 参数指定路径,例如:
bash
ansible-playbook -i /path/to/my_inventory playbook.yml - 通过配置覆盖路径
Ansible 的配置文件 ansible.cfg 可以定义默认库存文件位置。检查以下位置:
当前目录:./ansible.cfg
用户家目录:~/.ansible.cfg
全局配置:/etc/ansible/ansible.cfg
在 ansible.cfg 中查找 inventory 参数,例如:
[defaults]
inventory = /my/custom/inventory_path
- 通过命令检查当前配置
运行以下命令查看生效的配置路径:
# 这会显示当前生效的库存文件路径。
ansible-config dump | grep DEFAULT_HOST_LIST
- 环境变量
通过 ANSIBLE_INVENTORY 环境变量指定路径:
export ANSIBLE_INVENTORY=/path/to/inventory
总结
默认路径:/etc/ansible/hosts
更常见的用法:项目目录下的自定义文件(如 inventory)或通过 -i 参数指定。
优先级:命令行参数 -i > 环境变量 > ansible.cfg > 默认路径。
💡 提示:如果找不到文件,可以通过 ansible-inventory --list 验证当前加载的库存信息
2. 配置语法
[主机组1]
10.10.1.111 ansible_port=222 ansible_user=user ansible_password=password # 配置端口用户密码
10.2.3.4
10.2.3.[0:100] # 范围主机
www[001:007].example.com
db-01-node-example.com
db-[99:100]-node-example.com
3. ssh连接的第一次为防止后面发生中间人工具,会主动记录对方主机的指纹
解决方案:
- 一个一个手动连接一次,确认指纹
- 忽略指纹保存,编辑/etc/ansible/ansible.cfg,设置host_key_checking=False,会在ssh时忽略指纹信息
如果机器太多,而且内网比较可信的环境可以忽略指纹
二、ansible命令模式(也叫ad-hot模式,拉丁语,临时性的意思)
ansible 主机组 -m 模块名 -a "hostname"
不写-m,默认-m command,执行单条命令,
比如ansible 10.1.1.1 -a 'hostname'
就是查询10.1.1.1的主机名
all
是特殊关键字,代表所有主机
三、执行结果分析
- 绿色的结果:用户执行
完成
,状态没有发生改变
- 黄色的结果:用户执行
完成
,状态发生了改变
- 紫色的结果:
告警
信息 - 红色的结果:执行
失败
- 蓝色的结果:
详细的执行过程
相比直接用命令运行,ansible的模块会智能记录目标机器的执行状态和修改状态
不要用shell执行修改操作
,ansible无法判断是否修改,只会判断是否执行成功,所以默认都是黄色CHANGED,比如安装用yum模块插件,而不是直接运行yum命令
四、插件模块学习
插件文档查询
ansible-doc -l #查看模块列表
ansible -s ping # 查看ping模块用法
官方文档查询:https://docs.ansible.com/ansible/latest/collections/ansible/builtin/index.html#plugins-in-ansible-builtin
模块用法
1. ping
ansible all -m ping
2. command
# 简单命令模块
# 不支持变量定义,不支持特殊符号,只能运行单一命令
ansible xxx -a "touch aa chdir=/" # 先进入/再执行命令
ansible xxx -a "touch aa creates=/app/file" # 文件/文件夹不存在则执行
ansible xxx -a "touch aa removes=/app/file" # 文件/文件夹存在则执行