如何构build多个应用程序使用的可靠angular色?
我正在寻找最为模块化的方式来使用一个可以托pipe多个node.js应用程序的服务器。 我目前的设置是不可扩展的。
我有的angular色是common
, nginx
, nodejs
, mongodb
, apps
。
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.yml
和production.yml
剧本都设置为运行上述所有angular色。 这意味着两台服务器都将安装应用apps
字典中configuration的所有应用apps
。
我需要找出一个更加模块化的roles/apps
模式,以便我可以在不同的环境中安装不同的应用程序。 理想情况下,我希望能够指定哪些应用程序直接在staging.yml
和production.yml
哪台机器上。
任何想法如何可以完成? 随意提出完全不同的方法来configuration多个应用程序。
如果你愿意保持另一个字典,你可以参数化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.yml
或production.yml
指定apps
字典内容,而不是:
- hosts: example vars: apps: - '{{ shark }}' - '{{ tiger }}'
这使您可以指示哪些应用程序包含在哪个剧本中。