当前位置: 首页 > 知识库问答 >
问题:

根据环境定制可操作的角色

东门彬
2023-03-14
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
---
- hosts: test03-esb
  gather_facts: no
  roles:
    - esb
---
  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 }}

共有1个答案

东典
2023-03-14

为了在不同的环境中使用特定的值,您所需要做的就是将您的变量从角色本身移动到特定环境的变量文件中。

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
 类似资料:
  • 10.4 Bash Shell 的操作环境: 是否记得我们登陆主机的时候,屏幕上头会有一些说明文字,告知我们的 Linux 版本啊什么的, 还有,登陆的时候我们还可以给予使用者一些讯息或者欢迎文字呢。此外, 我们习惯的环境变量、命令别名等等的,是否可以登陆就主动的帮我设置好? 这些都是需要注意的。另外,这些设置值又可以分为系统整体设置值与各人喜好设置值, 仅是一些文件放置的地点不同啦!这我们后面也

  • 1、操作系统的运行机制 计算机系统中,通常CPU执行两种不同性质的程序,一种是操作系统内核程序;另一种是用户自编程序或系统外城的应用程序。对操作系统而言,这两种程序的作用不同,前者是后者的管理者和控制者,因此“管理程序”要执行一些特权指令,而“被管理程序”出于安全性考虑,不能执行这些指令。所谓特权指令,是指计算集中不允许用户直接使用的指令,如IO指令、置中断指令。 操作系统在具体实现上划分了用户态

  • 我有一个角色系统,管理员可以根据页面菜单(每个页面菜单都有自己的控制器)创建新角色并授予读取、写入、编辑和删除权限,然后将该角色分配给用户。 用户也可以有多个角色,但我已经讨论过了。我面临的唯一问题是:由于角色分配可以在应用程序中动态完成,所以我不能使用< code>[Authorize(Roles = Role。Admin)]属性。 相反,我正在考虑创建[读取],[写入],[编辑]和[删除]属性

  • 我有一个基于REST的java web应用程序,使用Java8,MyBatis 3.4.5部署在Wildfly application Server上。在这个应用程序中,我有一个DB jar模块,它管理从/到应用程序/DB的所有查询、连接、对象。我所有其他必须与DB交互的Java代码(控制器、方法、类)都使用这个DB模块。 作为标准的MyBatis实现,我在DB模块中有这些包 my/app/oj/

  • 问题内容: 我有一个项目,需要根据用户选择的选择参数设置环境变量。每个项目都有一个主题项目依赖项。我想让用户选择项目,然后从属性文件中加载主题名称。就像是 如果用户从choice参数中选择,我想自动设置为。最好的方法是什么? 每当添加新项目时,我都不想修改Jenkins作业配置。相反,我想将映射保存在文件中,以便可以在版本控制中使用它。 问题答案: 啊哈,我找到了一个简单的解决方案!使用EnvIn

  • 定制 Microsoft Jet 的Windows 注册表设置 注意 如果应用程序使用 Microsoft Jet 数据库引擎的缺省功能而不能正常工作,可能必须更改 Windows 注册表的设置来满足需要。 Windows 注册表也可用来调整可安装 ISAM和 ODBC驱动程序的操作。 有三种方式可以用来修改 Windows 注册表的设置。 使用 Regedit.exe 来改写默认设置 在应用程序