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

相关推荐
凤炎忻2 天前
【GitHub】GitHub Actions 快速入门
github·自动化运维
SelectDB2 天前
Agentic Analytics 时代,AI Agent 真正需要怎样的数据基座?
大数据·agent·自动化运维
炸炸鱼.2 天前
Ansible 企业级实战:Playbook 与 Roles 完全指南
网络·ansible
风曦Kisaki3 天前
# 自动化运维Day03:Ansible模块进阶(setup,debug),四种常用变量,进阶语法;Ansible Roles(角色)
运维·自动化·ansible
炸炸鱼.5 天前
Ansible 部署应用:从入门到精通
ansible
Peace5 天前
【Ansible】
linux·运维·ansible
Plastic garden6 天前
K8s(1)前置ansible准备环境
容器·kubernetes·ansible
淼淼爱喝水8 天前
ansible 自动化部署多主机差异化服务(httpd + vsftpd)
自动化运维
遇见火星8 天前
从0到1掌握Ansible:让自动化运维不再是梦想
运维·自动化·ansible
遇见火星8 天前
Jenkins + Ansible 集成实战:把配置管理焊进流水线里
运维·ansible·jenkins