当前位置: 首页 > news >正文

【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 的命令行工具创建、编辑、加密、解密和查看文件

常用命令

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     #用口令访问加密文件的playbookansible-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'] 事实

http://www.xdnf.cn/news/1330633.html

相关文章:

  • Ubuntu-安装Epics Archiver Appliance教程
  • ansible playbook 实战案例roles | 实现基于firewalld添加端口
  • 如何使用matlab将目录下不同的excel表合并成一个表
  • 四川方言语音识别数据集,1500小时合规真人采集,高质量标注助力ASR与大模型训练
  • CISP-PTE之路--10文
  • java17学习笔记
  • python numpy.random的基础教程(附opencv 图片转数组、数组转图片)
  • cv2.bitwise_and是 OpenCV 中用于执行按位与运算的核心函数,主要用于图像处理中的像素级操作
  • 计算机视觉 图片处理 在骨架化过程中,每次迭代都会从图像的边缘移除一层像素,直到只剩下单像素宽度的骨架
  • 【图像算法 - 19】慧眼识苗:基于深度学习与OpenCV的大棚农作物生长情况智能识别检测系统
  • Kubernetes集群安装部署--flannel
  • InnoDB为什么使用B+树实现索引?
  • 从繁琐到优雅:Java Lambda 表达式全解析与实战指南
  • 【Spring Boot把日志记录到文件里面】
  • sfc_os!SfcQueueValidationRequest函数分析之sfc_os!IsFileInQueue
  • Android面试指南(三)
  • STM32学习笔记15-SPI通信软件控制
  • 《Java 多线程全面解析:从基础到生产者消费者模型》
  • InfoNES模拟器HarmonyOS移植指南
  • 从数据孤岛到实时互联:Canal 驱动的系统间数据同步实战指南
  • 排查Redis数据倾斜引发的性能瓶颈
  • python学习DAY46打卡
  • 迁移学习(Transfer Learning)
  • C语言:字符函数与字符串函数(1)
  • Go 进阶学习路线
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(17):文法+单词第5回3-复习
  • 《算法导论》第 32 章 - 字符串匹配
  • 云电脑 vs 传统PC:全面对比3A游戏与AI训练的成本与性能
  • 网络间的通用语言TCP/IP-网络中的通用规则3
  • 基于提示词工程和MCP构建垂直Agent应用