In this post I’d like to showcase how to manage environment configuration using config modules.
Let’s say we have two environments that our solution needs to run in:
We need configuration like path locations and database connections to be specific to each environment.
The working example for this post is available here: config-modules.zip (5.1 KB)
Creating config modules
We’ll need config modules for each environment. Each module has the same set of vars and services defined, but with different values.
The dev environment module:
The prod environment module:
A config module makes its
services available in a global namespace named
$config. We need to set each module’s role to be
config, so the module will know to do that. If a module’s role is not set to
config, it does not set up the global
$config namespace, and it cannot function as a config module.
Now that we have two environments to choose from, we must specify which one is the currently active one.
Selecting the active module in the workbench
You can pick the currently active config module in one of several ways:
Pick “Choose Config Module…” from the
If a config module files is open, you can right click its file tab and pick “Set as config module”
You can see which module is currently active in the lower right corner of the status bar.
Right clicking the status bar display of the current module brings up a context menu that allows you to edit, clear, or change the currently active module.
You can switch the currently active config module at any time.
Referencing environment configuration
The variables and services of an active config module are available in all flows as
To keep a good overview of config dependencies it’s best to import them into flow properties, and reference them as flow vars and services throughout the flow.
This approach allows you to move config options from locally defined, to config module defined, to parameter derived, etc. without affecting the steps that use the values.
To make this approach simple to follow, there are import buttons below flow variables and services. They appear when there is an active config module selected.
Config modules on command line
When running on the command line, you pass the active config module via the
-g switch like this:
$ bin/engine.sh -g conf/dev.tsm flow.cfl 15:31:39 ¦ INFO ¦ main ¦ loading flow flow.cfl ... 15:31:40 ¦ INFO ¦ Logger.0 ¦ data path from $config: /var/incoming/data/ 15:31:40 ¦ INFO ¦ flow.cfl ¦ flow finished successfully