包括另一个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
我希望我正确地理解这个问题,这有助于。