在任务中使用 ansible_facts
根据 OS、内存和 IP 事实进行分支
在任务中使用 ansible_facts 是 CoddyKit 上的免费 Ansible Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ansible Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ansible Academy 课程共包含 4 节课。
从数据到决策
收集到的事实只有在您据此采取行动时才有用。现在,您将把 ansible_facts 中的值直接提取到任务中。🌟
引用一个事实
使用与任何变量相同的 {{ }} 语法。在花括号中写出所需事实的名称,例如主机的 distribution。
- debug:
msg: "OS is {{ ansible_distribution }}"也可以访问字典
您也可以通过带方括号键的 ansible_facts 字典读取事实。这两种写法指向相同的数据。
{{ ansible_facts['distribution'] }}根据操作系统进行分支
将事实与 when 结合,让任务只在匹配的主机上运行,例如仅在 Debian 系统上安装软件包。
when: ansible_os_family == "Debian"选择正确的软件包
事实让一个任务能够服务于多个发行版。根据操作系统系列选择 apache2 或 httpd,而不必编写两个剧本。
name: "{{ 'apache2' if ansible_os_family == 'Debian' else 'httpd' }}"使用数值事实
像 ansible_memtotal_mb 这样的事实是数字,因此您可以对其进行比较,并跳过内存过小的主机上的工作。
when: ansible_memtotal_mb > 2048访问嵌套值
对于嵌套事实,请用点号连接各个键。默认 IPv4 地址位于 ansible_default_ipv4 下的 address 中。
{{ ansible_default_ipv4.address }}模板中的事实
相同的事实名称也可以在 Jinja2 模板中使用。将主机的主机名或 IP 直接插入生成的配置文件。
server_name {{ ansible_hostname }};遍历列表事实
有些事实是列表,例如 ansible_interfaces。您可以遍历它们,对主机拥有的每个网络接口执行操作。
loop: "{{ ansible_interfaces }}"确认后再信任
不确定某个事实的确切值吗?先用 debug 将它打印出来,然后再构建依赖它的逻辑。
- debug:
var: ansible_distribution_version一个剧本,多台主机
由于事实按主机分别收集,以事实为依据的任务可以让一个剧本在由不同类型机器组成的主机群中正确运行。
快速检查
如何让任务只在 Debian 系列的主机上运行?
回顾
您使用 {{ }} 读取事实,使用 when 进行分支,访问嵌套值,并遍历列表事实,从而让任务具备自适应能力。✨
常见问题解答
「在任务中使用 ansible_facts」课时是免费的吗?
是的 — 「在任务中使用 ansible_facts」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ansible Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ansible Academy 课程共包含 4 节课。
「在任务中使用 ansible_facts」这节课中我会学到什么?
根据 OS、内存和 IP 事实进行分支 你通过在浏览器中直接运行的动手代码来练习 Ansible Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Ansible Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Ansible Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「在任务中使用 ansible_facts」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Ansible Academy 课中编写并运行代码吗?
能。每节 Ansible Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 什么是事实及其重要性
- 使用 setup 模块探索事实
- 在任务中使用 ansible_facts
- 禁用事实收集以提升速度