Ansible最佳实践之 AWX 启用facts缓存和模板问卷调查

简介: 写在前面分享一些 AWX 启用facts缓存和模板问卷调查的笔记博文内容涉及:启动facts缓存相关配置Demo启用模板调查来设置变量demo食用方式: 需要了解 Ansible理解不足小伙伴帮忙指正

写在前面

  • 分享一些 AWX 启用facts缓存和模板问卷调查的笔记
  • 博文内容涉及:

    • 启动facts缓存相关配置Demo
    • 启用模板调查来设置变量demo
  • 食用方式: 需要了解 Ansible
  • 理解不足小伙伴帮忙指正

傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波


通过事实缓存提高性能

事实缓存

Ansible Facts 是 Ansible 在受管主机上自动检测到的变量。包含主机的特定信息,这些信息可以像常规变量一样使用。通常,每个剧本都会在执行第一个任务之前自动运行setup模块,以便从剧本中主机模式匹配的托管主机中收集事实。

  1. 这确保了该剧本具有当前事实,但收集事实会带来明显的性能后果,尤其是在托管主机数量庞大的情况下。如果您在剧中不使用任何事实,则可以在剧本中设置关闭自动事实收集,加快执行速度。如果您在剧中使用事实,则关闭自动事实收集将导致剧本无法执行。
  2. 剧本还可以引用其他主机的事实(ansible使用任务委派)。例如,在托管主机servera上运行的任务可以通过引用变量hostvars[serverb],['ansible_facts']['default_ipv4']['address']访问serverb的变量,仅当通过此剧本或同一Playbook中较早任务已从serverb收集了事实时,此方法才有效。

一个 Playbook 可以为清单中的所有主机收集事实并缓存这些事实,以便后续 Playbook 可以在不收集事实或手动运行 setup 模块的情况下使用它们。

在 AWX 中启用事实缓存

Red Hat AWX 支持Fact Caching功能。 AWX 启动作业时,将作业中每个托管主机的所有 ansible_facts 注入到内存中。完成工作后,从内存中检索特定主机的所有记录,然后将时间更新的事实存储到数据库中。

全局设置

AWX 中有一个全局设置,用于控制每个主机的事实到期时间。在下图中的作业设置中

以秒为单位,控制收集到的Ansible事实缓存效时间。存储的 Ansible 事实自上次修改后被视为有效的最长时间(以秒为单位)。只有有效且未过时的事实才会被 playbook 访问。注

意,这不会影响从数据库中删除 ansible_facts。默认值设置为0,使用 0 值表示不应用超时。如果您未定期收集事实来更新缓存,则可能会因为托管主机动态变更而导致事实不是最新值。

作业模板设置

AWX 作业模板启用事实缓存Use Fact Cache选项,作业模板中的任务才会使用事实缓存中的事实。

以下步骤演示如何在 AWX 中启用事实缓存:

  1. 单击左侧导航栏中的 Templates。
  2. 选择适当的作业模板,再单击其名称以编辑设置。
  3. 在页面的 OPTIONS 部分中,选中 Use Fact Cache 旁边的复选框。
  4. 单击 SAVE 以保存修改后的作业模板配置。

当启用了 Use Fact Cache 选项的模板运行新作业时,该作业都将使用事实缓存。

如果 Ansible Playbook gather_facts 变量也设置为yes,当前facts没有缓存,该作业将收集事实,检索它们,并将它们存储在事实缓存中。

这里我们测试下,手工创建一个项目,只用于收集事实

在项目文件加下面新建项目文件

┌──[root@vms81.liruilongs.github.io]-[~/ansible]
└─$kubectl exec -it awx-demo-65d9bf775b-hc58x -c awx-demo-task  -- bash
bash-5.1$ cd /var/lib/awx/projects/
bash-5.1$ ls
_6__demo_project  _6__demo_project.lock  _9__ansible_role_keepalived  _9__ansible_role_keepalived.lock  liruilong_manual  liruilong_manual.lock
bash-5.1$ mkdir gather_gacts
bash-5.1$ cd gather_gacts/;touch task.yaml
bash-5.1$ vim task.yaml
bash: vim: command not found
bash-5.1$ vi task.yaml
bash-5.1$ ls -l
total 4
-rw-r--r-- 1 awx root 66 Oct 22 04:27 task.yaml
bash-5.1$ cat /var/lib/awx/projects/gather_gacts/task.yaml
---
- name: 事实缓存学习
  hosts: all
  gather_facts: true

bash-5.1$
bash-5.1$ exit
exit
┌──[root@vms81.liruilongs.github.io]-[~/ansible]
└─$

在 AWX UI 面板中创建对应的项目

创建项目对应的作业模板

执行测试

然后我们可以在主机的事实中看到缓存的数据

使用Job Template Surveys设置变量

管理变量

建议 Ansible 用户编写可在不同情况下重复使用的 Playbook,或者当部署到系统时应具有略微不同的行为、配置,或在不同环境中运行。处理此问题的⼀种简单方法是使用变量。

定义额外变量

在 AWX 中,可以通过两种方式使用作业模板来直接设置额外的变量:

  • 通过作业模板中的 EXTRA VARIABLES 变量 字段。
  • 如果为 EXTRA VARIABLES 变量字段选择了启动时提示 PROMPT ON LAUNCH,则系统将提示 AWX 用户在使用作业模板来启动作业时以交互方式式修改所使用的额外变量的列表。

如果生成的作业后来重新启动,则会再次使用相同的额外变量。在重新启动作业时,不能更改其额外变量。相反,应从原始作业模板启动作业,并设置不同的额外变量。

另一种即通过作业模板调查来实现

作业模板调查

作业模板调查允许作业模板在用于启动作业时显示简写形式,提示用户输入用于为额外变量设置值的信息。

提示用户输入与设置额外变量的其他方法相比具有多个优势。用户无需详细了解额外变量的运行方式或使用情况。他们也不需要了解 Playbook 所使用的额外变量的名称。

由于提示可以包含任意文本,因此可以选择对用户友好的措辞,并且易于那些可能并不详细了解 Ansible 的用户理解。

  • 用户友好的问题:调查允许使用自定义的问题对用户进行提示。与 PROMPT ON LAUNCH 方法相比,这种方式能够更加友好地提示用户输入额外变量值。
  • 回答类型:除了提供用户友好的提示之外,调查还可以定义用户输入的规则,并对其执行验证。用户对调查问题的回答可以

限制为以下七种回答类型之⼀:

  • 答案长度:还可以为调查问题的用户回答定义大小规则。对于以下非列表答案类型,调查可以定义用户回答所允许的最小和最大字符长度:Text、 Textarea、Password、Integer 和 Float。
  • 默认回答:可以为问题提供默认回答。问题也可以标记为 REQUIRED,这表示必须为问题提供回答。

创建作业模板调查过程略。

这里我们修改一下之前的剧本,测试如何使用

┌──[root@vms81.liruilongs.github.io]-[~]
└─$kubectl exec -it awx-demo-65d9bf775b-hc58x -c awx-demo-task  -- bash
bash-5.1$ cat /var/lib/awx/projects/liruilong_manual/test.yaml
---
- name: awx demo
  hosts: all
  tasks:
     - name: 调查问卷变量学习
       debug:
         msg: "{{ username  }}"
bash-5.1$ exit
exit
┌──[root@vms81.liruilongs.github.io]-[~]
└─$

这里添加完 问卷调查之后需要启动

在启动作业的时候会提示问卷信息

测试输出 我们输入的数据

博文参考

《DO447 Advanced Automation Ansible Best Practices》

相关文章
|
7月前
|
存储 缓存 Java
【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践
【Spring原理高级进阶】有Redis为啥不用?深入剖析 Spring Cache:缓存的工作原理、缓存注解的使用方法与最佳实践
|
24天前
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####
|
4月前
|
存储 缓存 NoSQL
微服务缓存原理与最佳实践
微服务缓存原理与最佳实践
|
5月前
|
存储 缓存 Java
Java中缓存实现的最佳实践
Java中缓存实现的最佳实践
|
5月前
|
缓存 NoSQL Java
Spring Boot整合Redis缓存的最佳实践
Spring Boot整合Redis缓存的最佳实践
|
6月前
|
缓存 NoSQL Java
Spring Boot整合Redis缓存的最佳实践
Spring Boot整合Redis缓存的最佳实践
|
存储 缓存 NoSQL
Redis缓存应用与最佳实践:优化性能与处理挑战
本篇深入探讨了Redis在缓存应用中的最佳实践,旨在优化性能并处理常见的缓存挑战。我们首先介绍了设计高效缓存架构的基本原则,展示了如何使用Redis作为缓存存储来提升应用性能。进一步地,我们讨论了缓存更新策略,演示了如何在源数据更新时同时更新缓存,以确保数据的一致性。
697 0
|
Shell 项目管理
ansible之when条件语法、处理任务失败、jinja2模板和项目管理
ansible之when条件语法、处理任务失败、jinja2模板和项目管理
136 0
|
运维 负载均衡 应用服务中间件
【运维知识进阶篇】Ansible Jinja2模板详解
【运维知识进阶篇】Ansible Jinja2模板详解
337 0
|
缓存 运维 监控
【运维知识进阶篇】Ansible变量详解(变量定义+变量优先级+变量注册+层级定义变量+facts缓存变量)
【运维知识进阶篇】Ansible变量详解(变量定义+变量优先级+变量注册+层级定义变量+facts缓存变量)
416 0