ansible:在angular色中包含angular色?
是否有可能在angular色中重用angular色? 我不是说通过在一个angular色的meta / main.yml文件中定义依赖关系,而是直接在另一个angular色的tasks / main.yml中包含angular色?
例如,我在angular色中定义了几个基本angular色,在angular色中定义了一些更高层次的angular色。 除了一些特定的任务外,我还希望高层angular色包括一些基本angular色。
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'
谢谢
老问题,但logging :使用Ansible 2.2+,你很好去与include_role
。 正是为了这个目的… 在这里看到文档。
AFAIK,你不能。 这是依赖关系。
如果你想避免依赖关系(例如,因为你想让'angular色X'在两个任务之间运行),你可以在剧本本身做这个,如果你认为这些任务是相关的:
angular色/ webtier /任务/ main.yml:
- shell: echo 'hello' - include: webtier.yml - shell: echo 'role done'
总而言之,这取决于你想要做什么。 但在你的例子中,“仍然忙”似乎意味着rolebooks/some_role
仍在运行,这是不可能的(这里没有并发)。
显然,你也可以在主要的剧本中排列angular色(这可能是你已经做的):
- 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
你不能,但你可以做一些类似的事情。
对于以下布局:
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
请注意,由于您没有使用典型的导入结构,因此您可能会遇到一些类似于angular色默认variables的“怪异”,除非您之前将angular色包含在标准方式中,否则这些variables将无法访问。
我明白,你说不使用元依赖关系,但我想出了最好的解决scheme是创build一个只包含meta / dependency.yml
这允许以正确的顺序包括任意数量的angular色。
确保你设置了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'] }
这使我们在本质上可以从angular色中扮演一个angular色。