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: falseansible_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]:收集 test01test02 的系统信息(因为 gather_facts: true)。
  3. TASK [out]:执行 debug 任务,输出每台主机的 ansible_hostnameport 变量值。
    • 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. 多主机批量管理 :一条命令同时管理 test01test02 两台主机,体现了 Ansible 的自动化优势。

相关推荐
Tassel_YUE2 天前
非 ansible 主机批量执行命令方法:psssh 和 pscp(随手记)
linux·网络·ssh·scp·ansible
SelectDB5 天前
StarRocks 适合做日志分析吗?
数据分析·json·自动化运维
不可能片场5 天前
日更流水线的防重复发布设计:台账主键、幂等判定与失败分类
自动化运维
考虑考虑5 天前
kubectl命令
运维·后端·自动化运维
SelectDB8 天前
开源!Apache Doris 上线 Profile 可视化诊断:基于 Doris Skills 破解 AI 误诊难题
数据库·agent·自动化运维
这个DBA有点耶9 天前
数据库运维的“自动驾驶”:KES-Operator如何把DBA经验编码为软件
数据库·dba·自动化运维
亿朝亿夕11 天前
ansible安装
ansible
.柒宇.12 天前
运维常见面试题_07_配置管理与监控(Ansible · Prometheus · Alertmanager)· 容器编排(Kubernetes)
运维·k8s·ansible·prometheus
相顾若初见12 天前
Ansible部署k8s
容器·kubernetes·ansible