我有 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_role
与import_role
的讨论,请参阅"使用角色"。
您可以通过向角色添加依赖项来获得类似的行为 相反。 例如,在角色 1 中,创建一个文件meta/main.yml
以下内容:
dependencies:
- get_version
这将在role1
任何角色之前自动运行get_version
角色 你跑role1
的时间。
有关详细信息,请参阅"使用角色依赖关系"。