首页 > 解决方案 > 定义任务/步骤并多次运行/替代 include_tasks

问题描述

我有一个任务,我想在整个游戏过程中运行很多次

e.g.
    - name: run_many
      debug:
        msg: "I have been run"

现在,除了添加这一步之外,还有一种方法可以预先/定义它,所以我可以说:

- < run this pre-defined step >

这样做的原因是我需要多次运行它,并且如果它需要更改,我不想在 x 个地方更新它。

目前我正在做一个 include_tasks: 这显然是将其添加到我的输出中作为一个步骤 - 但这是执行此类操作的最佳/标准方式吗?

当前有效的设置:

$ls ./roles/demo/tasks/
main.yml  run_many.yml
$cat main.yml    
---

-  include_tasks: run_many.yml
-  include_tasks: run_many.yml

播放输出:

TASK [demo: include_tasks] *******************************************************************************************************************************
task path: /home/ansible/roles/demo/tasks/main.yml:3
included: /home/ansible/roles/demo/tasks/run_many.yml for localhost

TASK [demo: run_many] ************************************************************************************************************************************
task path: /home/ansible/roles/demo/tasks/run_many.yml:1
ok: [localhost] => {
    "msg": "I have been run"
}

TASK [demo: include_tasks] *******************************************************************************************************************************
task path: /home/ansible/roles/demo/tasks/main.yml:4
included: /home/ansible/roles/demo/tasks/run_many.yml for localhost

TASK [demo: run_many] ************************************************************************************************************************************
task path: /home/ansible/roles/demo/tasks/run_many.yml:1
ok: [localhost] => {
    "msg": "I have been run"
}

标签: ansible

解决方案


这取决于您要执行的任务。例如,如果您想对 linux apache 进行配置更改,然后重新启动 apache,并且您有多个此类更改,那么将重新启动逻辑放在 yml 中并使用调用它是没有意义的- include

相反,使用处理程序, https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#handlers-running-operations-on-change

notify: <handler name>将有助于触发处理程序。

注意:处理程序名称应与要从处理程序目录触发的任务名称相同,或者如果您正常定义处理程序。/handlers/tasks/main.yml

  - name: OS handler
    debug: msg='test'
    when: ansible_distribution == "RedHat"

你可以让它检查一些全局变量,并使用通知调用它。如果检查成功,它将运行检查并执行

而不是ansible_distribution你可以有一些其他的全局变量

否则使用- include 让我知道这是否回答了您的问题


推荐阅读