0Pricing
DevOps Bootcamp · 课时

使用 delegate_to 与 run_once 进行编排

在一台主机上为多台主机运行任务

使用 delegate_to 与 run_once 进行编排 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。

任务不总是在您以为的位置运行

默认情况下,每个任务都会在其目标主机上运行。但在进行编排时,有时需要让任务完全在其他位置运行。🎯

认识 delegate_to

delegate_to 关键字会在不同于当前主机的另一台主机上运行任务,同时仍使用该主机的变量。

- name: Add web node to load balancer
  community.general.haproxy:
    host: "{{ inventory_hostname }}"
    state: enabled
  delegate_to: lb01

经典使用场景

在遍历 Web 节点时,将负载均衡器的变更委托给 LB 主机。执行方案仍按节点进行,但操作会在 LB 上完成。

委托给 localhost

通过委托给 localhost,在您的控制节点上运行任务。这样非常适合从一个位置调用 API 或发送通知。

- name: Notify chat
  ansible.builtin.uri:
    url: "{{ webhook }}"
    method: POST
  delegate_to: localhost

变量仍属于原始主机

委托会改变任务的运行位置,但不会改变它查看的事实。inventory_hostname 仍然指向原始目标,而不是受委托的主机。

认识 run_once

run_once 关键字会为整个批次运行一次任务,而不是在每台主机上各运行一次。Ansible 会选择第一台主机来执行它。

- name: Run database migration
  ansible.builtin.command: ./migrate.sh
  run_once: true

run_once 为什么重要

某些操作只能执行一次,例如迁移或领导者选举。run_once 可以防止每台主机重复执行同一个共享步骤。

将它们结合使用

将 run_once 与 delegate_to 结合使用,可在指定的一台主机上执行一次操作,例如从单个应用节点运行迁移。

- name: Migrate db once
  ansible.builtin.command: ./migrate.sh
  run_once: true
  delegate_to: app01

结果会共享

使用 run_once 时,已注册的结果会在批次中的所有主机之间共享。它们都能看到那次执行产生的输出。

- ansible.builtin.command: cat /etc/version
  run_once: true
  register: ver

从受委托主机收集事实

如果希望收集到的事实关联到受委托的主机,而不是当前主机,请使用 delegate_facts。此选项默认关闭。

不仅是配置,更是编排

这些关键字结合起来,就能将按主机配置转变为真正的编排:从一个位置协调整个主机群组中的一项操作。

快速检查

让我们检查一下这些编排关键字。

回顾

使用 delegate_to 在另一台主机上运行任务,使用 run_once 让任务在每个批次中只运行一次,这是编排的核心。✅

常见问题解答

「使用 delegate_to 与 run_once 进行编排」课时是免费的吗?

是的 — 「使用 delegate_to 与 run_once 进行编排」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。

「使用 delegate_to 与 run_once 进行编排」这节课中我会学到什么?

在一台主机上为多台主机运行任务 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 DevOps Bootcamp 需要有经验吗?

无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「使用 delegate_to 与 run_once 进行编排」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 DevOps Bootcamp 课中编写并运行代码吗?

能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 cli_command 自动化网络设备
  2. 使用 delegate_to 与 run_once 进行编排
  3. 协调 Web、App 与 DB 层
  4. 负载均衡器节点摘除与重新启用
← 返回 DevOps Bootcamp