如何在 ansible 角色中使用不同的入口点

Hub*_*NNN 6 ansible ansible-role

基于角色的 ansible 文档,我可以通过创建文件来创建多个角色入口点:

playbooks/roles/my_role/tasks/main.yml
playbooks/roles/my_role/tasks/other.yml
Run Code Online (Sandbox Code Playgroud)

我可以main.yml使用以下代码添加默认角色:

---
- name: Example 1
  hosts: <hostnames>
  roles:
    - my_role
Run Code Online (Sandbox Code Playgroud)

但我该如何使用other.yml入口点呢?
我希望它是这样的,但这些都不起作用:

---
- name: Example 1
  hosts: <hostnames>
  roles:
    - my_role:other
    - my_role/other
    - my_role.other
Run Code Online (Sandbox Code Playgroud)

ses*_*i_c 4

剧本中的指令roles加载角色的默认“入口点”,即tasks/main.yml。其他任务文件tasks/others.yml可以根据条件、标签等从中加载。

但是,如果您确实想从角色加载特定文件,则可以使用include_roleimport_role模块。

例如:

  # invoke role's default "entrypoint" (main.yml)
  roles:
    - my_role

  tasks:
    # include the role, but tasks from other.yml
    - include_role:
        name: my_role
        tasks_from: other.yml
Run Code Online (Sandbox Code Playgroud)

请注意您链接的文档中提到的执行顺序。

另一个“hacky”选项是使用include|import_tasks模块,其工作方式就像包含一个简单的“任务”文件(失去角色功能),如果它满足您的要求。

  tasks:
    - include_tasks: path/to/my_role/tasks/other.yml
Run Code Online (Sandbox Code Playgroud)