包括另一个angular色在任务剧本中的任务

我正在devise一个具有个人任务的剧本库

所以在通常的angular色回购,我有这样的东西:

roles ├── common │  └── tasks │ ├── A.yml │  ├── B.yml │ ├── C.yml │ ├── D.yml │ ├── login.yml │ ├── logout.yml │  └── save.yml ├── custom_stuff_workflow │ └── tasks │ └── main.yml └── other_stuff_workflow └── tasks └── main.yml 

我在custom_stuff_workflow中的main.yml包含如下内容:

 --- - include: login.yml - include: A.yml - include: C.yml - include: save.yml - include: logout.yml 

而这一个在另一个工作stream程中:

 --- - include: login.yml - include: B.yml - include: A.yml - include: D.yml - include: save.yml - include: logout.yml 

我无法find一种自然而然的方式:一种方法是将所有任务集中在一个angular色中,并标记相关的任务,同时包含一个custom_stuff_workflow

我遇到的问题是标签不能在调用剧本中设置:只能在命令行中设置,因为我与公司中的许多人分发这个有效的回购,我不能依赖命令行调用(在yml中有一个#!头文件可以被ansible-playbook命令处理)

我也可以在每个工作stream程中复制相关的任务(在上面的树中通用),但我不想重复

有人可以看到一个解决scheme,实现我想要的而不重复任务在不同的angular色?

我想我的问题的基石是我把任务定义为个人,而且看上去不自然。

非常感谢

PS:请注意,工作stream中的任务必须按照特定的顺序完成,唯一可以抽象的自然步骤是login和保存/注销

PPS:我见过这个问题如何从Ansible的另一个angular色中调用一个angular色? 但是它并没有解决我的问题,因为它调用了一个完整的angular色,而不是angular色中任务的一个子集

只要告诉别人碰到这个,Ansible 2.2版现在有include_role 。现在你可以做这样的事情了。

 --- - name: do something include_role: name: common tasks_from: login 

查看这里的文档。

是的,Ansible并不真正喜欢将任务作为单独的组件。 我认为它希望你使用angular色,但我可以看到为什么你不想使用angular色进行简单的可重用任务。

我目前看到两个可能的解决scheme

1.将这些任务文件转换为angular色并使用依赖关系

然后你可以在例如custom_stuff_workflow中做这样的事情

 dependencies: - { role: login } 

请参阅: https : //docs.ansible.com/playbooks_roles.html#role-dependencies

2.使用包含“硬编码”path的任务文件

 - include: ../../common/tasks/login.yml 

在我刚刚做的一个简短的testing剧本中,这很好。 请记住,您也可以在这些包括使用参数等。

请参阅: https : //docs.ansible.com/playbooks_roles.html#task-include-files-and-encouraging-reuse

我希望我正确地理解这个问题,这有助于。