The newly introduced Configurator component aims to tackle the cumbersome task of product and instance configuration with complex requirements. In the case of a Cartridge instance, there are numerous run-time factors that count in you need to take into account for the correct configuration to take place. Some of these factors include clustering and database information, the role of the Cartridge type in the clustering context and even the role of the Cartridge on the product specific distributed setup (such as that of WSO2 API Manager). The Configurator simplifies these factors in to into a simple module.ini
file, which includes all the parameters that are configurable in that specific Cartridge.
Template Module
The Configurator operates on a set of configuration templates called , which are referred to as a Template Module
. A Template Module should be of the following folder structure and should contain the files and templates, which are needed to configure the specific Cartridge.
├── files
├── templates
└── module.ini
files
The files
folder contains the static files, which do not require any template processing. For example, mysql-connector-java-5.1.36.jar
file should go inside the files
folder.
templates
The templates
folder contains of the configurable template files. For example, if clustering can be configured in a particular template module for a Carbon product, the axis2.xml
file should be included in the templates folder as a templated file, axis2.xml.template
. The template file content for the clustering related area can look like something as follows.:
Code Block | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
<clustering class="org.wso2.carbon.core.clustering.hazelcast.HazelcastClusteringAgent" enable="{{ CONFIG_PARAM_CLUSTERING }}"> <parameter name="membershipScheme">{{CONFIG_PARAM_MEMBERSHIP_SCHEME}}</parameter> <parameter name="domain">{{CONFIG_PARAM_DOMAIN}}</parameter> <parameter name="localMemberHost">{{CONFIG_PARAM_LOCAL_MEMBER_HOST}}</parameter> <parameter name="localMemberPort">{{CONFIG_PARAM_LOCAL_MEMBER_PORT}}</parameter> <parameter name="properties"> <property name="backendServerURL" value="https://${hostName}:${httpsPort}/services/"/> <property name="mgtConsoleURL" value="https://${hostName}:${httpsPort}/"/> {% if CONFIG_PARAM_SUB_DOMAIN == 'mgt' %} {% if CONFIG_PARAM_PT_HTTP_PROXY_PORT is defined -%} <property name="port.mapping.80" value="{{CONFIG_PARAM_PT_HTTP_PROXY_PORT}}"/> {% else -%} <property name="port.mapping.80" value="9763"/> {% endif -%} {% if CONFIG_PARAM_PT_HTTPS_PROXY_PORT is defined -%} <property name="port.mapping.443" value="{{CONFIG_PARAM_PT_HTTPS_PROXY_PORT}}"/> {% else -%} <property name="port.mapping.443" value="9443"/> {% endif -%} <property name="subDomain" value="mgt"/> {% endif %} <!-- Worker Setup--> {% if CONFIG_PARAM_SUB_DOMAIN == 'worker' %} <property name="subDomain" value="worker"/> {% endif %} </parameter> <members> {% for key, value in CONFIG_PARAM_WKA_MEMBERS.iteritems() -%} <member> <hostName>{{ key }}</hostName> <port>{{ value }}</port> </member> {% endfor -%} </members> |
The Configurator uses the following templating language used in the Configurator is : Jinja Templating.
module.ini
The module.ini
file contains the configurable options for the specific template module. For example, for the above mentioned clustering enabled axis2.xml.template
file, the following can be the likely entries of the module.ini
file.
Code Block | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
[SETTINGS] READ_FROM_ENVIRONMENT=true CARBON_HOME=/opt/wso2am-1.9.1 [PARAMS] CONFIG_PARAM_CLUSTERING=true CONFIG_PARAM_MEMBERSHIP_SCHEME=wka CONFIG_PARAM_DOMAIN=wso2.carbon.domain CONFIG_PARAM_LOCAL_MEMBER_HOST=127.0.0.1 CONFIG_PARAM_LOCAL_MEMBER_PORT=4000 CONFIG_PARAM_WKA_MEMBERS=[127.0.0.1:4000] CONFIG_PARAM_PORT_OFFSET=0 CONFIG_PARAM_PROFILE=Default |
READ_FROM_ENVIRONMENT
If READ_FROM_ENVIRONMENT
is set to true
, then the Configurator will override any values specified in the module.ini
file with values from the environment variables.
CARBON_HOME
CARBON_HOME
is the path to the product, which has to be configured using the specified templates.
...
Create the template module with the above mentioned folder structure. However, Private PaaS Cartridge Repository contains a list of Cartridges with Template Modules that can built. For example, if we are building the template module for WSO2 API Manager the following procedure can be followed.
Checkout the Private PaaS Cartridge
Repositoryrepository.
cloneCode Block git
clone https://github.com/wso2/private-paas-cartridges.git
Navigate to WSO2 API Manager 1.9.1 Template Module.
Code Block cd <PRIVATE_PAAS_CARTRIDGES_HOME>/wso2am/1.9.1/template-module/
Build the Template Module.
installCode Block mvn clean
install
Unzip the resulting
zipZIP file.
unzip <PRIVATECode Block cd /tmp
unzip <PRIVATE_PAAS_CARTRIDGES_HOME>/wso2am/1.9.1/template-module/target/wso2am-1.9.1-template-module-4.1.0.zip
Execute Configurator on the Template Module
Navigate to the Configurator folder and execute configurator.py
, and pass the template module folder as a command line argument.
Example:
Code Block | ||
---|---|---|
| ||
./configurator.py -d /tmp/wso2am-1.9.1-template-module-4.1.0 |