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 的自动化优势。

相关推荐
终端行者1 天前
Jenkins Pipeline 企业级用法 参数化构建+Ansible发布---上
docker·ansible·jenkins·cicd
淼淼爱喝水1 天前
【Ansible 入门实战】三种变量详解
java·linux·数据库·ansible·playbook
http阿拉丁神猫2 天前
ansible脚本解读
服务器·ansible·apache
小林学AI3 天前
掌握这 5 个 Skills 高级玩法,Claude Code 效率翻倍少走 90% 弯路
自动化运维
汪汪大队u4 天前
基于 K8s 的物联网平台运维体系:Ansible+Zabbix 自动化监控与故障自愈(一)—— 环境准备与 Zabbix Server 部署
运维·kubernetes·自动化·ansible·zabbix
o_insist7 天前
Docker 入门:从镜像、容器到项目部署
docker·自动化运维·devops
IT大白鼠7 天前
Ansible vs 运维智能体:自动化工具的优劣对比与适用场景分析
运维·自动化·ansible
PanShanShan9 天前
从 EOTP 到 E404:一次 npm 自动发布踩坑全记录
自动化运维
悠悠121389 天前
从0到1掌握Ansible:让自动化运维不再是梦想
运维·自动化·ansible