是否可以在角色中重用角色?我不是指通过在角色的meta / main.yml文件中定义依赖项,而是通过直接包含在另一个角色的tasks / main.yml中的角色?
例如,我在角色簿中定义了几个基本角色,在角色中定义了一些更高级别的角色。 我希望高级角色除了某些特定任务外还包括一些基本角色。
playbooks/
rolebooks/
some_role/
roles/
webtier/
tasks/
main.yml
在playbooks / roles / webtier / tasks / main.yml:
- shell: echo 'hello'
- { role: rolebooks/some_role }
- shell: echo 'still busy'
由于
答案 0 :(得分:73)
答案 1 :(得分:11)
AFAIK,你做不到。这就是依赖的目的。
如果你想避免依赖(例如,因为你希望'角色X'在两个任务之间运行),如果你认为任务是相关的,你可以在剧本本身中这样做:
角色/ webtier /任务/ main.yml:
- shell: echo 'hello'
- include: webtier.yml
- shell: echo 'role done'
总而言之,这取决于你想要做的事情。但在你的例子中,“仍然忙”似乎意味着rolebooks/some_role
仍在运行,这是不可能的(这里没有并发)。
显然,你也可以在主剧本中对角色进行排序(可能就是你已经做过的):
- name: Polite foo stuff
hosts: foo_hosts
roles:
- say_hello
- rolebooks/some_role
- say_bye
- name: Unpolite foo stuff
hosts: !foo_hosts
roles:
- rolebooks/some_role
答案 2 :(得分:5)
你不能,但你可以做一些类似的事情。
布局:
roles/
...
common/tasks/main.yml
nginx/tasks/main.yml
...
在nginx/tasks/main.yml
中,您可以调用常见任务:
- name: Call the 'common' role to do some general setup
include: ../../common/tasks/main.yml
请注意,由于您没有使用典型的导入结构,因此您可能会遇到一些“怪异”的问题。像角色默认变量不可访问,除非您之前以标准方式包含角色。
答案 3 :(得分:2)
我感谢您说不使用元依赖,但我提出的最佳解决方案是创建一个仅包含meta / dependency.yml的角色
这允许以正确的顺序包含任意数量的角色。
确保设置allow_duplicates:yes
---
allow_duplicates: yes
dependencies:
- { role: app-install-rpms, tags: ['rpms'] }
- { role: app-java-config, tags: ['config'] }
- { role: app-directories, tags: ['dirs'] }
- { role: app-config-site_management, tags: ['site_management'] }
- { role: app-config-initd, tags: ['initd'] }
- { role: tomcat-boapp, tags: ['config'] }
这使我们实质上可以从角色中调用角色。