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

【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
  1. 环境变量
    通过 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" # 文件/文件夹存在则执行

相关文章:

  • # 使用自定义Shell脚本hello快速配置Linux用户账户
  • 【408--复习笔记】数据结构
  • 第十三届蓝桥杯单片机省赛程序设计试题
  • linux/android 如何获取当前系统启动时长
  • Vue学习笔记集--导航篇
  • 精华贴分享|从不同的交易理论来理解头肩形态,殊途同归
  • WPF的MVVM的基础知识
  • 推荐一个可以自定义github主页的网站
  • 深度剖析 Spring 源码 性能优化:核心原理与最佳实践
  • uniapp 在app上 字体如何不跟着系统字体大小变
  • deepseek(2)——deepseek 关键技术
  • OpenEuler linux samba部分目录无法访问的问题
  • 使用 Spring Boot 3.2 集成 MinIO 8.5:实现高效对象存储
  • 爬虫豆瓣电影
  • 大模型开发框架LangChain GO
  • 基于Kubernetes部署Prometheus监控平台
  • 探索PyMOL新插件NRGSuite-Qt:全面提升分子对接、结合位点预测与动力学模拟的研究效率
  • spring batch 中JpaNamedQueryProvider、JpaNativeQueryProvider两种查询方式对比
  • Graphpad Prism for Mac医学绘图
  • Svelte 深度理解
  • 顺利撤离空间站,神十九乘组踏上回家之旅
  • 邮储银行一季度净赚超252亿降逾2%,营收微降
  • 习近平在上海考察
  • 中方会否公布铁线礁的领海基线?外交部:中方执法活动旨在反制菲方侵权挑衅
  • 中国贸促会:有近50%的外贸企业表示将减少对美业务
  • 第二十届中国电影华表奖揭晓!完整获奖名单来了