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

这条命令是用 vim编辑器修改 Ansible 的主机清单文件 ,需要 sudo 权限,因为 /etc/ansible/hosts 是系统配置文件。
test01 port=80
test02 port=8080
test03 port=8090
这就是我执行结果里 port 变量不同的原因:
test01的主机变量port=80test02的主机变量port=8080test03的主机变量port=8090
关键知识点
-
主机清单(Inventory)的作用
/etc/ansible/hosts是 Ansible 默认的主机清单文件,用来定义目标主机和主机变量。你这里的port=80属于主机变量,Ansible 会自动把这些变量注入到对应主机的执行环境中。 -
变量优先级:主机清单变量 > Play 级变量我 第一个 Play 里的
vars: ports: 10000被注释了,所以 Ansible 会优先读取主机清单里的port变量,这就是为什么两台主机输出的端口不一样。
二、命令 2:vim test1.yaml
作用
这是 Linux 系统里用 vim 编辑器创建 / 修改 test1.yaml 文件的命令

对应文件内容解析关键知识点
-
gather_facts: true为什么必须开?我 在debug里用了{``{ansible_hostname}},这是 Ansible 的内置事实变量 ,需要通过gather_facts收集目标主机信息才能获取。- 如果设置
gather_facts: false,ansible_hostname会是None,直接报错。 - 这也是我标注 "必须开启,不然报错" 的原因。
- 如果设置
-
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 里定义的任务。
逐行解读
PLAY [varout]:开始执行名为varout的 Play。TASK [Gathering Facts]:收集test01和test02的系统信息(因为gather_facts: true)。TASK [out]:执行debug任务,输出每台主机的ansible_hostname和port变量值。test01输出the test01 ports is 80test02输出the test02 ports is 8080
PLAY RECAP:执行结果汇总,两台主机都执行成功(ok=2,无失败 / 不可达)。
四、整个流程的核心意义
这一套操作,完整演示了 Ansible 最基础也最重要的几个概念:
- 主机清单(Inventory)的使用 :在
/etc/ansible/hosts中定义目标主机和主机变量。 - Playbook 的编写与执行 :用
vim写 Playbook,用ansible-playbook执行。 - 内置事实变量与自定义变量的结合 :用
ansible_hostname获取主机名,用主机清单变量port定义不同主机的端口。 debug模块的调试作用:验证变量是否被正确读取,是 Ansible 排错的必备技能。- 多主机批量管理 :一条命令同时管理
test01和test02两台主机,体现了 Ansible 的自动化优势。