Ansible 变量管理实验

一、命令 1:sudo vim /etc/ansible/hosts

作用

这条命令是用 vim编辑器修改 Ansible 的主机清单文件 ,需要 sudo 权限,因为 /etc/ansible/hosts 是系统配置文件。

复制代码
test01  port=80
test02  port=8080
test03  port=8090

这就是我执行结果里 port 变量不同的原因:

  • test01 的主机变量 port=80
  • test02 的主机变量 port=8080
  • test03 的主机变量 port=8090

关键知识点

  1. 主机清单(Inventory)的作用 /etc/ansible/hosts 是 Ansible 默认的主机清单文件,用来定义目标主机和主机变量。你这里的 port=80 属于主机变量,Ansible 会自动把这些变量注入到对应主机的执行环境中。

  2. 变量优先级:主机清单变量 > Play 级变量我 第一个 Play 里的 vars: ports: 10000 被注释了,所以 Ansible 会优先读取主机清单里的 port 变量,这就是为什么两台主机输出的端口不一样。

二、命令 2:vim test1.yaml

作用

这是 Linux 系统里用 vim 编辑器创建 / 修改 test1.yaml 文件的命令

对应文件内容解析关键知识点

  1. gather_facts: true 为什么必须开?我 在 debug 里用了 {``{ansible_hostname}},这是 Ansible 的内置事实变量 ,需要通过 gather_facts 收集目标主机信息才能获取。

    • 如果设置 gather_facts: false,ansible_hostname 会是 None,直接报错。
    • 这也是我标注 "必须开启,不然报错" 的原因。
  2. debug 模块的正确 / 错误写法我 这里的 debug 直接写在了和 name 同级的位置,属于错误写法 。正确写法是放在 tasks 下:

    yaml

    复制代码
    - name: out
      hosts: test01,test02
      gather_facts: true
      tasks:
        - name: debug port info
          debug: msg="the {{ansible_hostname}} ports is {{port}}"

    我现在的写法能跑通,是因为 Ansible 做了兼容


三、命令 3:ansible-playbook test1.yaml

作用

这是执行 Ansible Playbook 的核心命令,用来批量执行 test1.yaml 里定义的任务。

逐行解读

  1. PLAY [varout]:开始执行名为 varout 的 Play。
  2. TASK [Gathering Facts]:收集 test01 和 test02 的系统信息(因为 gather_facts: true)。
  3. TASK [out]:执行 debug 任务,输出每台主机的 ansible_hostname 和 port 变量值。
    • test01 输出 the test01 ports is 80
    • test02 输出 the test02 ports is 8080
  4. PLAY RECAP:执行结果汇总,两台主机都执行成功(ok=2,无失败 / 不可达)。

四、整个流程的核心意义

这一套操作,完整演示了 Ansible 最基础也最重要的几个概念:

  1. 主机清单(Inventory)的使用 :在 /etc/ansible/hosts 中定义目标主机和主机变量。
  2. Playbook 的编写与执行 :用 vim 写 Playbook,用 ansible-playbook 执行。
  3. 内置事实变量与自定义变量的结合 :用 ansible_hostname 获取主机名,用主机清单变量 port 定义不同主机的端口。
  4. debug 模块的调试作用:验证变量是否被正确读取,是 Ansible 排错的必备技能。
  5. 多主机批量管理 :一条命令同时管理 test01 和 test02 两台主机,体现了 Ansible 的自动化优势。

相关推荐
考虑考虑5 天前
nohup启动java程序
后端·自动化运维
东莞市云毅网络有限公司6 天前
PDF 表格抽取的三条技术路线对比:规则、库解析与版面识别
python·sqlite·自动化运维·geo·数据监测
东莞市云毅网络有限公司9 天前
用标准库做网页正文抽取:从 HTML 到结构化字段的轻量实现
python·sqlite·自动化运维·geo·数据监测
考虑考虑9 天前
docker compose V2版本新属性
运维·后端·自动化运维
迷茫的大专生10 天前
服务器部署与 MySQL 运维学习笔记:从 Ansible 到高可用与性能优化
mysql·nginx·ansible·mysql优化·keepalive
杜子不疼.12 天前
Ansible 批量部署 Node Exporter:从单机安装流程到远程主机统一执行
ai·ansible
东莞市云毅网络有限公司12 天前
用 SQLite FTS5 给企业知识库做问答检索原型:中文二元切分与 BM25 排序
python·sqlite·自动化运维·geo·数据监测
考虑考虑12 天前
cmd局部设置java变量
运维·后端·自动化运维
运维全栈笔记13 天前
Ansible 自动化 Nginx 集群部署实战:动态 Inventory、滚动发布与 Role 工程化
nginx·自动化·ansible
宋均浩14 天前
重跑率 31% → 6%,变更失败率 12% → 4%:CI/CD 流水线治理实战的 5 个配置
ci/cd·自动化运维·devops