Ansible如何在不同角色中多次使用任务?
Ansible how to use tasks multiple times in different roles?
我有 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 次获取版本任务。
有没有什么方法可以像 handlers 一样为这些重复性任务命名并在需要时调用?
期待:-
角色 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
的讨论,请参阅“Using Roles”。
您可以通过向您的角色添加依赖项来获得类似的行为
反而。例如,在 Role1 中,创建一个文件 meta/main.yml
以下内容:
dependencies:
- get_version
这将自动 运行 get_version
角色之前 role1
任何
你 运行 role1
.
有关详细信息,请参阅“Using Role Dependencies”。
我有 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 次获取版本任务。 有没有什么方法可以像 handlers 一样为这些重复性任务命名并在需要时调用?
期待:-
角色 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
的讨论,请参阅“Using Roles”。
您可以通过向您的角色添加依赖项来获得类似的行为
反而。例如,在 Role1 中,创建一个文件 meta/main.yml
以下内容:
dependencies:
- get_version
这将自动 运行 get_version
角色之前 role1
任何
你 运行 role1
.
有关详细信息,请参阅“Using Role Dependencies”。