ansible - 定义任务/步骤并多次运行/替代 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"
}
解决方案
这取决于您要执行的任务。例如,如果您想对 linux apache 进行配置更改,然后重新启动 apache,并且您有多个此类更改,那么将重新启动逻辑放在 yml 中并使用调用它是没有意义的- include
notify: <handler name>
将有助于触发处理程序。
注意:处理程序名称应与要从处理程序目录触发的任务名称相同,或者如果您正常定义处理程序。/handlers/tasks/main.yml
- name: OS handler
debug: msg='test'
when: ansible_distribution == "RedHat"
你可以让它检查一些全局变量,并使用通知调用它。如果检查成功,它将运行检查并执行
而不是ansible_distribution
你可以有一些其他的全局变量
否则使用- include
让我知道这是否回答了您的问题
推荐阅读
- python - 使用 dfs 遍历二叉树,在给定点停止(在 Python 中)
- terminal - 管道未在无吸终端打印
- c++ - c++ 使用指针进行字符串操作,中间为空
- google-cloud-platform - GKE 使用什么服务帐号访问 GCR
- windows - 为 Windows 登录和管理允许软件安装设置不同的密码
- postgresql - 如何使用 Postgresql 获取持续时间
- java - 下载管理器请求集通知可见性
- linux-kernel - 如何从内核读取性能计数器?
- python - np.sqrt (2.0 / 9/64) 是什么意思?
- javascript - jQuery Mobile 无法在 Android 设备上动态更改图像