Managing Configurations across Environments

When you have multiple environments (Dev, QA, UAT, Prod), you need the flexibility of dynamically updating the configurations in each environment without replacing artifacts and configuration files. This applies to server configurations, which are defined in the deployment.toml file (stored in the <MI_HOME>/conf directory) and to synapse configurations in your integration artifacts (such as proxy service, endpoint artifacts, etc.)

Managing Server Configurations

All the server configurations of the Micro Integrator are specified in a single TOML-based configuration file (deployment.toml file). To be able to dynamically inject values, define your server configurations as environment variables or system properties. You can then separately inject configuration values to each environment.

You can define the server configurations in one of three ways based on your preference:

Let's assume you want to set the server offset of your Micro Integrator instance.

System properties

Use the following syntax in the deployment.toml file to specify a configuration as a system property:

parameter="$sys{systemPropertyName}"

Example:

In the following example, the value for the server offset parameter is specified by the offset system property.

[server]
offset = "$sys{offset}"

You can set the value for the offset system property during server startup. That is, when you execute the server startup command on your terminal, pass the system property value as shown below.

./micro-integrator.sh -Doffset=19

Environment variables

Use the following syntax in the deployment.toml file to specify a configuration as an environment variable:

parameter="$env{environmentVariableName}"

Example:

In the following example, the value for the server offset parameter is specified by the offset variable.

[server]
offset = "$env{offset}"

You can now set the environment variables you defined as follows before starting the server:

export offset=22

Variables resolved during runtime

As opposed to defining the configuration parameter as $sys{property} or $env{variable}, if you use the following syntax in the deployment.toml file, you can pass configurations and resolve them during runtime. That is, you do not have to restart the server for the parameter values to become effective.

offset = "${VariableName}"

Example:

In the following example, the value for the server offset parameter is specified by the offset variable.

[server]
offset = "${offset}"

You can set a value for the offset variable as an environment variable or a system property and it will be resolved during runtime. If you have set the value as both a system property and an environmental variable, the system property will be effective.

System property > Environment variable

Docker/Kubernetes environments

When you update product configurations for a container deployment (Docker or Kubernetes), you will update the deployment.toml file from your Docker Exporter project or Kubernetes Exporter project in WSO2 Integration Studio.

You can open the deployment.toml file from the project explorer and update the parameter values as system properties or environment variables.

When you execute the docker run command to start the container, you can pass the system properties and environment variables. These values will be resolved dynamically during the runtime.

Managing Synapse Configurations

You can dynamically inject parameters to synapse configurations either using environment variables or a file (containing parameter values).

Read Injecting Synapse Parameters for details.

Top