Ansible【第三课】:管理变量和事实

RH294 第 3 章 管理变量和事实

一、管理变量

变量 = 给数据起名字,不用写死数值,方便修改复用。

1、变量定义位置(优先级:越往下优先级越高,会覆盖上面)

  1. Inventory 清单内:主机变量、组变量(给机器 / 机器组设置变量)
    • 目录方式:host_vars/主机名.yml、group_vars/组名.yml,单独文件存变量,推荐用。
  2. Playbook 内部:play 下vars:块,只对当前这个 play 生效
  3. 命令行传入:‑e "var=xxx",优先级最高,会覆盖所有其他地方变量

优先级:命令行 - e > playbook 内 vars > inventory 主机变量 > inventory 组变量

2、变量引用

用双大括号 {{ 变量名 }}

3、复杂变量

  • 字典:key: {k1:v1, k2:v2},取值两种写法 user.name / user'name'
  • 列表:数组,存放一组数据

4、管理变量

两个play,第一个play五个task,第二个play一个task,所有用到的变量写在vars里统一存储,需要修改变量时只改vars里的,task里用到的会随时同步更新,方便修改。

ansible-navigator run -m stdout playbook.yml -e "web_pkg=nginx"

(命令行覆盖变量,把 web 服务器换成 nginx)

ansible‑navigator run -m stdout playbook.yml --syntax‑check

(语法检查,只校验 yml 语法,不会真正执行)

ansible‑navigator run -m stdout playbook.yml

(真正执行 playbook,并把内容显示在终端上)

二、Ansible‑Vault(加密敏感数据)

密码、数据库密码不能明文写 yml,用 vault 加密文件。

bash

#新建加密文件

ansible-vault create secret.yml

#编辑加密文件

ansible-vault edit secret.yml

#加密已存在明文文件

ansible-vault encrypt plain.yml

#解密

ansible-vault decrypt secret.yml

#运行带vault的playbook

ansible-navigator run play.yml -m stdout --ask-vault-pass

注意:只能加密整个文件,不能加密 yml 里面某一行。

三、事实 facts(重点,考试常考)

Facts(事实):Ansible 执行 playbook 时,自动收集受控主机的系统信息(主机名、CPU、内存、Python 版本、网卡等),全部存放在内置变量 ansible_facts 里,不需要自己定义变量。

  1. facts:ansible 自动采集远程主机系统信息(IP、磁盘、网卡)
  2. 默认开启收集;gather_facts: no关闭,加快执行
  3. 取值:ansible_facts'default_ipv4''address'
  4. 子集收集:setup模块gather_subset只取部分信息
  5. 自定义事实:被控机/etc/ansible/facts.d/下放.fact文件,支持 INI/JSON,不支持 YAML

魔法变量(内置,不用采集)

  • hostvars:读取其他主机变量
  • inventory_hostname:inventory 清单里的主机名

三、核心考点速记(做题用)

  1. 变量优先级:命令行‑e 最高,覆盖其他所有变量
  2. host_vars、group_vars目录,一个文件对应一台主机 / 一个组,是规范写法
  3. vault:加密整个文件,运行需要--ask‑vault‑pass输入解密密码
  4. facts 是远程主机系统信息,默认自动收集;gather_facts:no关闭收集提速
  5. 自定义事实放 /etc/ansible/facts.d/,后缀.fact,不支持 YAML 格式
  6. 魔法变量hostvars,可以在 A 机器的 playbook 里面读取 B 机器的变量。

容易混淆区分

  • 普通变量:人自己写的
  • facts 事实:Ansible 自动从远程机器抓取系统信息
  • 魔法变量:Ansible 内置,不需要收集,直接可用
相关推荐
Nturmoils8 小时前
集中式与分布式怎么选:从订单读写看 KingbaseES 的架构边界
数据库
xiaomuzuirenzhen8 小时前
大专电子商务从事电商运营分析师需要考证吗?
大数据·数据库
翔云12345611 小时前
RocksDB中,客户端每写入一次数据,需要访问几次磁盘
运维·数据库·mysql
DevOpenClub11 小时前
职教高考控制线 API:招生类别枚举、筛选与空分数含义
java·数据库·高考
GeW12 小时前
新质生产力路线图解读:数据库性能优化与Linux调优专场
linux·数据库
在多学一点14 小时前
MYSQL第二次作业
android·数据库·mysql
Risehuxyc14 小时前
Microsoft.Data.Sqlite体验
数据库·sqlite
骑着蜗牛撵大象32714 小时前
MySQL 8.0 迁移后 SQL 变慢:执行计划里 3 类被忽略的成本差异
android·数据库·sql·mysql·优化器·执行计划
ZENERGY-众壹16 小时前
告警风暴怎么压?100MW 电站监控平台告警引擎架构复盘
数据库·架构·iot·电站监控
zhengfei61116 小时前
Go-fastdfs /reload 未授权访问: 有效PoC
数据库·sql