Ansible 如何在不同角色中多次使用任务?



我有 3 个任务将从数据库中获取版本,在这些角色中我有 3 个角色,很少有任务依赖于版本

我不能在这里使用变量,因为值是动态的,我无法设置事实,因为我应该能够运行单个角色,并且每个角色中只有几个带有标签的任务。

我的例子如下。

角色1:-

我需要多次运行的任务(示例):-

- name: get version
block:
- command: "mongo get_version.js" 
register: op
- name: filter version number from output 
shell: "echo {{ present_version.stdout }}| grep 'version'"
register: present_version
tags: role1_db_tag
- name: do something
- name: do something when a version is something
when: present_version == "something"
tags: role1_db_tag

角色2:

- name: get version
block:
- command: "mongo get_version.js" 
register: op
- name: filter version number from output 
shell: "echo {{ present_version.stdout }}| grep 'version'"
register: present_version
tags: role2_db_tag
- name: do some other things
- name: do something else when a version is something
when: present_version == "something"
tags: role2_db_tag

现在,我现在在每个角色中运行 3 次获取版本任务。 有没有办法像处理程序一样,只是为这些重复性任务提及一些名称并在需要时调用?

期待:-

角色2:

- name: fetch version
function: get_version 
register: present_version 
tags: role1_db_tag
- name: do something else when a version is something
when: present_version == "something"
tags: role2_db_tag

PS:有没有比include_*或import_*更好的方法。

正如您已经推测的那样,您通常处理此问题的方式是将get version任务移动到单独的角色中,然后将其包含在依赖角色中,例如import_role

- import_role:
name: get_version

如果您有许多小型共享任务,则可以创建具有多个任务文件的"库"角色:

- import_role:
name: library
tasks_from: get_version

有关include_roleimport_role的讨论,请参阅"使用角色"。


您可以通过向角色添加依赖项来获得类似的行为 相反。 例如,在角色 1 中,创建一个文件meta/main.yml以下内容:

dependencies:
- get_version

这将在role1任何角色之前自动运行get_version角色 你跑role1的时间。

有关详细信息,请参阅"使用角色依赖关系"。

最新更新