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色。