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

How to use a different entry point in ansible roles

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

playbooks/roles/my_role/tasks/main.yml
playbooks/roles/my_role/tasks/other.yml

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

---
- name: Example 1
  hosts: <hostnames>
  roles:
    - my_role

但是如何使用 other.yml 入口点?
我希望它是这样的,但是 none 这些作品:

---
- name: Example 1
  hosts: <hostnames>
  roles:
    - my_role:other
    - my_role/other
    - my_role.other

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

但是,如果您确实想从某个角色加载特定文件,您可以使用 include_role or import_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

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

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

  tasks:
    - include_tasks: path/to/my_role/tasks/other.yml