我有许多环境,需要定制一堆文本文件才能让mule这样的东西与正确的端点对话.
对于这种环境,这有效:
ansible-playbook test03.yml
环境(来自ansible的观点)之间的唯一区别是./roles/esb/vars/main.yml中包含的信息.
我已经考虑过使用svn为每个环境保留一个vars/main.yml,所以每次我需要配置一个环境时,我会检查角色,然后在运行上面的命令之前检查该环境的vars/main.yml.
对我而言,不是一个优雅的解决方案 我怎么能做得更好?
目录结构
./test03.yml
./roles/esb/vars/main.yml
./roles/esb/tasks/main.yml
./roles/esb/templates/trp.properties.j2
./test03.yml
---
- hosts: test03-esb
  gather_facts: no
  roles:
    - esb
./roles/esb/vars/main.yml
---
  jndiProviderUrl: 'jnp://mqendpoint.company.com:1099'
  trp_endpoint_estask: 'http://tmfendpoint.company.com:8080/tmf/estask'
  trp_endpoint_builderQ: 'jnp://mqendpoint.company.com:1099'
./roles/esb/tasks/main.yml
---
  - name: replace variables in templates
    template: src=trp.properties.j2  dest=/path/to/mule/deploy/conf/trp.properties
./roles/esb/templates/trp.properties.j2
trp.endpoint.estask={{ trp_endpoint_estask }}
trp.endpoint.builderQ={{ trp_endpoint_builderQ }}
jab*_*lab 26
为了使用不同环境的特定值,您需要做的就是将变量从角色本身移动到特定环境的变量文件,例如
production
|- group_vars
  |- servers
|- inventory
staging
|- group_vars
  |- servers
|- inventory
development
|- group_vars
  |- servers
|- inventory
roles
|- esb
  |- tasks
     |- main.yml
  |- templates
     |- trp.properties.j2
etc.
在每个环境中,group_vars/servers您可以指定特定于该环境的变量,例如
$ cat production/group_vars/servers
---
jndiProviderUrl: 'jnp://mqendpoint.company.com:1099'
trp_endpoint_estask: 'http://tmfendpoint.company.com:8080/tmf/estask'
trp_endpoint_builderQ: 'jnp://mqendpoint.company.com:1099'
$ cat staging/group_vars/servers
---
jndiProviderUrl: 'jnp://staging.mqendpoint.company.com:1099'
trp_endpoint_estask: 'http://staging.tmfendpoint.company.com:8080/tmf/estask'
trp_endpoint_builderQ: 'jnp://staging.mqendpoint.company.com:1099'
$ cat development/group_vars/servers
---
jndiProviderUrl: 'jnp://dev.mqendpoint.company.com:1099'
trp_endpoint_estask: 'http://dev.tmfendpoint.company.com:8080/tmf/estask'
trp_endpoint_builderQ: 'jnp://dev.mqendpoint.company.com:1099'
然后,Jinja2模板可以保持不变(它根本不关心变量的来源).
然后你会执行:
# Provision production
$ ansible-playbook $playbook -i production/inventory
# Provision staging
$ ansible-playbook $playbook -i staging/inventory
# Provision development
$ ansible-playbook $playbook -i development/inventory