如何构build多个应用程序使用的可靠angular色?

我正在寻找最为模块化的方式来使用一个可以托pipe多个node.js应用程序的服务器。 我目前的设置是不可扩展的。

我有的angular色是commonnginxnodejsmongodbapps

apps散列/字典

我在roles/apps/defaults/main.yml维护一个名为apps的字典,这既是解决scheme又是问题:

 - apps: shark: repo: git@example.com:shark.git subdomain: shark port: 3001 tiger: repo: git@example.com:tiger.git subdomain: tiger port: 3002 

示例如何在apps roles/apps/tasks/main.yml使用apps字典:

 - name: clone repos git: repo={{ item.value.repo }} with_dict: apps - name: create vhost template: src=vhost.j2 dest=/etc/nginx/sites-available/{{ item.value.subdomain }} with_dict: apps sudo: yes 

playbook.yml

staging.ymlproduction.yml剧本都设置为运行上述所有angular色。 这意味着两台服务器都将安装应用apps字典中configuration的所有应用apps

我需要找出一个更加模块化的roles/apps模式,以便我可以在不同的环境中安装不同的应用程序。 理想情况下,我希望能够指定哪些应用程序直接在staging.ymlproduction.yml哪台机器上。

任何想法如何可以完成? 随意提出完全不同的方法来configuration多个应用程序。

Solutions Collecting From Web of "如何构build多个应用程序使用的可靠angular色?"

如果你愿意保持另一个字典,你可以参数化with_dict来:

 - name: clone repos git: repo={{ item.value.repo }} with_dict: {{env_app_dict}} 

并在清单文件中或通过命令行指定env_app_dict

编辑:或者,尝试我写的查找插件 ,并为apps_common,apps_production和apps_staging指定文件夹。

有了这个插件,你可以在apps_common中添加一些常用的项目,

 - name: clone common repos git: repo="{{item.repo}}" fileglob_to_dict: - "{{ 'apps_common/*' }}" 

然后通过使用主机模式(例如- hosts: staging在播放中- hosts: staging )或通过在命令行或清单文件中指定参数来指定所需的apps_env文件参数(如原始答案中所示)。

我想到的另一个解决scheme是为roles/apps/defaults/main.yml的各种应用创build字典:

 shark: repo: git@example.com:shark.git subdomain: shark port: 3001 tiger: repo: git@example.com:tiger.git subdomain: tiger port: 3002 

请注意,它们并不包含在apps字典中。

然后,在staging.ymlproduction.yml指定apps字典内容,而不是:

 - hosts: example vars: apps: - '{{ shark }}' - '{{ tiger }}' 

这使您可以指示哪些应用程序包含在哪个剧本中。