仅从 Ansible 角色导入标记的块

anl*_*lar 10 ansible ansible-role

我只想将标记块中定义的 Ansible 角色的一部分导入到剧本中(并执行)。

例如,我的角色some_role包含 3 个标记为tag1tag2和的任务块tag3。我可以创建导入整个角色的剧本:

---
- hosts: some_host
  roles:
    - role: roles/some_role
Run Code Online (Sandbox Code Playgroud)

然后从指定单个标签的命令行执行它:

$ ansible-playbook -i hosts.yml playbook.yml --tags tag1
Run Code Online (Sandbox Code Playgroud)

但我想将--tags tag1部分内容移入剧本本身,以便能够运行该单个块,而无需向ansible-playbook.

Moo*_*oon 5

我无法\xe2\x80\x99找到任何简单的方法来执行具有剧本中特定标记的角色的一部分

\n\n

一种方法可能是将任务分解为多个文件,并使用 playbook 中的文件import_roleinclude_role。比如说,如果您在名为 role\xe2\x80\x99s 的任务目录中创建两个文件main.ymlother.yml则可以使用如下所示的其他任务。

\n\n
- import_role:\n     name: myrole\n     tasks_from: other\n
Run Code Online (Sandbox Code Playgroud)\n


Jac*_*ack -2

没关系。这是行不通的。 - 杰克

评论中的讨论很有用,所以我将其保留。

从未尝试过,但尝试apply一下include_role

---
- hosts: some_host
  tasks:
  - include_role:
      name: roles/some_role
    apply:
      tags:
      - tag1
Run Code Online (Sandbox Code Playgroud)

https://docs.ansible.com/ansible/latest/modules/include_role_module.html