【Ansible】变量、机密、事实

变量

变量有哪些类别?优先级如何?

  • 主机变量 (host variables) 应用到特定的主机

  • 组变量 (group variables) 应用到某一或某组主机组中的所有主机

  • 主机变量优先于组变量,但 playbook 中定义的变量的优先级比这两者更高

怎么定义这些变量?(优先级由低到高)

  • 在清单中定义的组变量

  • 在清单或 playbook 所在目录的 group_vars 子目录中定义的组变量

  • 在清单中定义的主机变量

  • 在清单或 playbook 所在目录的 host_vars 子目录中定义的主机变量

  • 在运行时中发现的主机事实

  • playbook 中的 play 变量 (vars 和 vars_files)

  • 任务变量

  • 在命令行中定义的额外变量,使用 --extra-vars 或 -e 选项定义

优先级高的变量可以覆盖低的

Playbook中怎么定义变量?

放在 playbook 开头的 vars 块中。

在外部文件中定义 playbook 变量。此时不使用 vars,使用vars_files 指令,而后,以 YAML 格式在文件中定义 playbook 变量

若要引用变量,可将变量名称放在双花括号内,建议为变量使用引号 "{{ 变量名 }}"

怎么利用变量捕获命令的输出?

使用 register 语句捕获命令的输出,输出保存在一个变量中,可用于调试或其他目的,例如输出命令的结果

示例:

机密

怎么管理Ansible机密?

  1. 使用随 Ansible 提供的 Ansible Vault,可以加密和解密任何由Ansible 使用的结构化数据文件 (可能包括清单变量; playbook 中含有的变量文件;在执行 playbook 时作为参数传递的变量文件;或 Ansible 角色中定义的变量)
  2. 若要使用 Ansible Vault,可通过一个名为 ansible-vault 的命令行工具创建、编辑、加密、解密和查看文件

常用命令

bash 复制代码
ansible-vault create filename    #创建新的加密文件

ansible-vault view filename    #查看

ansible-vault edit filename     #编辑

ansible-vault encrypt filename   #加密已存在的文件

ansible-vault decrypt filename    #永久解密

ansible-vault rekey filename     #更改加密文件密码

ansible-navigator run -m stdout --playbook-artifact-enable false 文件名 --vault-id @prompt     #用口令访问加密文件的playbook

ansible-navigator run -m stdout 文件名 --vault-password-file=vault-pw-file   #用密码文件访问

密码文件的默认位置可使用$ANSIBLE_VAULT_PASSWORD_FILE 环境变量来指定

注意:必须禁用 playbook artifact 才能以交互方式输入 Vault 密码。如果ansible-navigator 命令需要提示输入交互式 Vault 密码,并且 playbook artifact 未禁用,则该命令会挂起。

变量管理文件的推荐做法?

  1. 若要简化管理,将敏感变量和所有其他变量保存在相互独立的文件中。然后,包含敏感变量的一个或多个文件可通过 ansible-vault 命令进行保护
  2. 管理组变量和主机变量的首选方式是在 playbook 级别上创建目录
  • group_vars 目录通常包含名称与它们所应用的主机组匹配的变量文件

  • host_vars 目录包含名称与它们所应用的受管主机名称匹配的变量文件

3.不过,除了使用 group_vars 或 host_vars 中的文件外,也可对每一主机组或受管主机使用多个目录。这些目录而后可包含多个变量文件,它们都由该主机组或受管主机使用。

事实

事实是什么?什么用处?有哪些常见事实?

  1. 从受管节点收集的变量、可以在 playbook 中使用。由 ansible.builtin.setup 模块调取。可以创建自定义事实,这些事实存储在受管主机上并且对于该系统来说是唯一的。
  2. 借助 Ansible 事实,可以方便地检索受管节点的状态,并根据其状态决定要执行的操作 。
  • 可以根据当前内核版本来重新启动服务器

  • 可以根据可用的内存来自定义 MySQL 配置文件

  • 可以根据主机名称来创建用户

3、事实提供如下相关的信息:主机名称、内核版本、网络接口、IP 地址、操作系统版本、各种环境变量、CPU 数量、提供的或可用的内存、可用磁盘空间

事实格式?

Ansible 2.5 之前,事实变量的前缀是 ansible_ , 2.5之后,事实变量的前 缀变为 ansible_facts , 下表是新老事实变量名的区别:

怎么关闭事实收集?

gather_facts 关键字设置为 no

什么是自定义事实

  1. 管理员可以自行创建事实,将它们推送到受管节点
  2. 创建后,自定义事实将由 ansible.builtin.setup 模块收集和读取
  3. 保存在 /etc/ansible/facts.d 目录中,Ansible 可以找到该事实
  4. 文件的扩展名必须为 .fact,采用 INI 或 JSON 格式的纯文本文件,⾃定义事实⽂件不能采用 playbook 那样的 YAML 格式。JSON 格式是最为接近的等效格式
  5. 自定义事实和默认事实的使用方式相同

什么是 魔法变量? 什么时候使用魔法变量,举例说明?

一些变量并非是 ansible.buildin.setup 模块采集的事实或配置信息,但是很有用,仍可以被 ansible 使用,称为 magic variables

有 4 种常用类型:

  • hostvars:列出受管主机的非事实变量

  • group_names:列出受管主机所属的所有组

  • groups:列出所有 inventory 中的 groups 和 hosts

  • inventory_hostname:列出当前受管主机在 inventory 中定义的主机名,可能和事实变量不同

例如,使运⾏ play 的每台主机打印出 demo2.example.com主机上所有⽹络接⼝的列表:该任务会使用hostvars 魔法变量来访问该主机的 ansible_facts'interfaces' 事实

相关推荐
用户03284722207041 分钟前
如何搭建本地yum源(上)
运维
秋播8 小时前
国内本地WSL2编译rancher源码
云原生
小猿姐2 天前
MySQL Top 10 热点问题 AI 运维实战:从内核诊断到云原生运维
mysql·云原生·aiops
阿里云云原生3 天前
深入内核:拆解 OpenTelemetry eBPF 探针如何优雅地“透视”多语言微服务?
云原生
大树883 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠3 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质3 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工3 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智3 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_3 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化