Ansible 入门实战:四种变量优先级比较实验

一、修改目标

在现有的三种变量(主机 / Play 内部 / 外部文件)基础上参考链接内容https://blog.csdn.net/2501_91644987/article/details/161257384?fromshare=blogdetail&sharetype=blogdetail&sharerId=161257384&sharerefer=PC&sharesource=2501_91644987&sharefrom=from_linkhttps://blog.csdn.net/2501_91644987/article/details/161257384?fromshare=blogdetail&sharetype=blogdetail&sharerId=161257384&sharerefer=PC&sharesource=2501_91644987&sharefrom=from_link,加入第 4 种:命令行 --extra-vars,并通过任务直观对比最终值。


二、具体修改步骤(直接复制执行)

步骤 1:备份原来的文件(防止改错)

运行

复制代码
cd ~/management
cp test.yaml test.yaml.bak

步骤 2:修改 test.yaml,加入新任务(可选,更直观)

用 vim 打开文件:

运行

复制代码
vim test.yaml

在 tasks 部分,最后添加一个新任务,用来展示最终值,修改后完整内容如下(直接复制替换即可):

yaml

复制代码
---
- name: 四种同名变量优先级测试
  hosts: test01,test02
  gather_facts: true

  # 外部变量文件(port=20000)
  vars_files:
    - ./vars-file/server.yaml

  # Play 内部变量(port=10000)
  vars:
    port: 10000

  tasks:
    # 任务1:直接打印主机变量(hostvars 是 Ansible 自带的字典,直接用)
    - name: 查看主机变量 port 的值
      ansible.builtin.debug:
        msg: "主机变量 port = {{ hostvars[inventory_hostname].port }}"

    # 任务2:直接打印当前生效的 port(优先级最高的那个)
    - name: 查看最终生效的 port
      ansible.builtin.debug:
        msg: "最终生效的 port = {{ port }}"

    # 任务3:直接打印 Play 内部定义的 port
    - name: 查看 Play 内部变量 port
      ansible.builtin.debug:
        msg: "Play 内部变量 port = {{ vars.port }}"

    # 新增任务4:展示命令行变量的影响(其实和任务2是同一个值,只是为了强调)
    - name: 当前最终 port
      ansible.builtin.debug:
        msg: "最终生效的 port(含命令行变量)= {{ port }}"

:wq 保存退出即可。


三、测试命令

所有命令都在 ~/management 目录执行:

运行

复制代码
cd ~/management

ansible-playbook test.yaml

✅ 结果:最终 port = 20000(外部变量文件覆盖 Play 内部变量)


测试 :加上命令行 --extra-vars(最高优先级,覆盖所有)

直接在测试 3 的文件基础上,加上命令行参数:

运行

复制代码
ansible-playbook test.yaml --extra-vars "port=30000"

✅ 结果:最终 port = 30000(命令行变量覆盖所有其他变量)


四、最终优先级结论(Ansible 2.9 环境)

复制代码
命令行 --extra-vars(30000) > 外部变量文件(20000) > Play 内部变量(10000) > 主机变量(80/8080)

五、一键恢复原来的文件

所有测试完成后,如果你想恢复原来的 test.yaml:

运行

复制代码
mv test.yaml.bak test.yaml

相关推荐
梯度下降者7 天前
Python从0到100(三):Python中的变量介绍
python·作用域·变量·数据类型·计算机常识
垚垚学技术_聚焦云原生7 天前
Ansible Vault 安全实践:敏感密码、密钥加密存储方案
安全·elasticsearch·ansible
广目软件9 天前
HA分布式架构采集节点变更操作手册20261029
运维·服务器·ansible·zabbix·prometheus
Moshow郑锴10 天前
Ansible 批量部署 Node.js 服务:ZIP 直解与共享目录分发两种方案对比
node.js·ansible
垚垚学技术_聚焦云原生10 天前
Ansible Playbook 进阶:when 条件、loop 循环、handlers 触发器落地
linux·ansible·自动化运维·devops
Moshow郑锴10 天前
GCP MIG 重建后 Ansible 初始化实战:PowerShell + NSSM 挂载 Windows 服务
windows·ansible
承渊政道12 天前
新增一台服务器时还要重新装Nginx?Ansible只改hosts目标列表,同一份Playbook继续执行
运维·nginx·ansible·内网穿透·cpolar
Helix25014 天前
Ansible混合环境自动化:Windows与Linux统一配置管理实战
windows·自动化·ansible·playbook·配置管理·winrm·混合环境
垚垚学技术_聚焦云原生15 天前
Ansible 变量体系详解:主机变量、组变量、全局变量优先级实战
ansible·自动化运维·devops·变量优先级
I'mChloe24 天前
不再逐台装Docker:我用Ansible Playbook批量统一服务器环境
服务器·docker·ansible