仅从 Ansible 角色导入标记的块



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

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

---
- hosts: some_host
roles:
- role: roles/some_role

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

$ ansible-playbook -i hosts.yml playbook.yml --tags tag1

但是我想将--tags tag1部分移动到剧本本身中,以便能够在不向ansible-playbook提供标签的情况下运行该单个块。

我找不到任何简单的方法来执行剧本中带有特定标签的角色的一部分

一种方法可能是打破多个文件中的任务,并使用import_roleinclude_role使用剧本中的文件。比如说,如果您在角色的任务目录中创建两个名为main.ymlother.yml的文件,那么您可以使用如下所示的其他任务。

- import_role:
name: myrole
tasks_from: other

没关系。 这行不通。--千斤顶

评论中有用的讨论,所以我把它留了下来。

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

---
- hosts: some_host
tasks:
- include_role:
name: roles/some_role
apply:
tags:
- tag1

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

- import_role: 
name: myrole 
tags: [ web, foo ] 
- import_tasks: foo.yml 
tags: [ web, foo ]

您可以使用上面的代码块来实现它。

参考资料:文档

---
- hosts: some_host
tasks:
- include_role:
name: some_role
tags: tag1

some_role必须在其任务中自然地定义 tag1。但是您还需要使用 tag1 执行它,就像您在问题中所做的那样:

ansible-playbook -i hosts.yml playbook.yml --tags tag1

我刚刚使用以下文档使用 ansible 2.10.6 对其进行了测试。确保使用包含而不是导入

最新更新