「 傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波」
Ansible Facts 是 Ansible 在受管主机上自动检测到的变量。包含主机的特定信息,这些信息可以像常规变量一样使用。通常,每个剧本都会在执行第一个任务之前自动运行setup模块
,以便从剧本中主机模式匹配的托管主机
中收集事实。
servera
上运行的任务可以通过引用变量hostvars[serverb]
,['ansible_facts']['default_ipv4']['address']
访问serverb
的变量,仅当通过此剧本或同一Playbook中较早任务已从serverb收集了事实时,此方法才有效。一个 Playbook 可以为清单中的所有主机收集事实并缓存这些事实,以便后续 Playbook 可以在不收集事实或手动运行 setup 模块的情况下使用它们。
Red Hat AWX 支持Fact Caching
功能。AWX 启动作业时,将作业中每个托管主机的所有 ansible_facts 注入到内存中。完成工作后,从内存中检索特定主机的所有记录,然后将时间更新的事实存储到数据库中。
AWX 中有一个全局设置,用于控制每个主机的事实到期时间。在下图中的作业设置中
以秒为单位,控制收集到的Ansible事实缓存效时间。存储的 Ansible 事实自上次修改后被视为有效的最长时间(以秒为单位)。只有有效且未过时的事实才会被 playbook 访问。注意,这不会影响从数据库中删除 ansible_facts。默认值设置为0,使用 0 值表示不应用超时。如果您未定期收集事实来更新缓存,则可能会因为托管主机动态变更而导致事实不是最新值。
AWX 作业模板启用事实缓存Use Fact Cache
选项,作业模板中的任务才会使用事实缓存中的事实。
以下步骤演示如何在 AWX 中启用事实缓存:
当启用了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 面板中创建对应的项目
创建项目对应的作业模板
执行测试
然后我们可以在主机的事实中看到缓存的数据
建议 Ansible 用户编写可在不同情况下重复使用的 Playbook,或者当部署到系统时应具有略微不同的行为、配置,或在不同环境中运行。处理此问题的⼀种简单方法是使用变量。
在 AWX 中,可以通过两种方式使用作业模板来直接设置额外的变量:
PROMPT ON LAUNCH
,则系统将提示 AWX 用户在使用作业模板来启动作业时以交互方式式修改所使用的额外变量的列表。如果生成的作业后来重新启动,则会再次使用相同的额外变量。在重新启动作业时,不能更改其额外变量。相反,应从原始作业模板启动作业,并设置不同的额外变量。
另一种即通过作业模板调查来实现
作业模板调查允许作业模板在用于启动作业时显示简写形式,提示用户输入用于为额外变量设置值的信息。
提示用户输入与设置额外变量的其他方法相比具有多个优势。用户无需详细了解额外变量的运行方式或使用情况。他们也不需要了解 Playbook 所使用的额外变量的名称。
由于提示可以包含任意文本,因此可以选择对用户友好的措辞,并且易于那些可能并不详细了解 Ansible 的用户理解。
这里我们修改一下之前的剧本,测试如何使用
┌──[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》
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有