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 内置,不需要收集,直接可用
相关推荐
weixin_382395232 小时前
0-500 人工厂的生产 PMC 系统怎么做?基于 Tauri + SQLite 的性能架构实践与 5000 物料压测实录
数据库·架构·sqlite
l1t2 小时前
DeepSeek总结的 DuckDB 2.0 文档新内容
服务器·网络·数据库
IvorySQL2 小时前
PostgreSQL 日报| PG19 主备切换挂起修复(10 月 17 日)
数据库·postgresql
roman_日积跬步-终至千里2 小时前
【数据Agent论文·查询与语义|11】EntSQL:给了业务文档,模型为何还是写不对SQL?
数据库·人工智能·sql·数据分析
2601_962885723 小时前
如何用 Python 算最大回撤和回撤恢复期?
java·数据库·python
zcn1263 小时前
Left join+or exists+like关联优化
数据库·sql优化改写
我科绝伦(Huanhuan Zhou)3 小时前
Oracle 表空间碎片整理实战:shrink space 与 move table 全解析
数据库·oracle
Yyyyyy~3 小时前
【Mysql】表的操作
数据库·mysql
TDengine (老段)3 小时前
工业数据十大痛点系列 · 第 6 篇
数据库·时序数据库·tdengine·涛思数据·idmp·工业数据分析·ai 分析数据