initconf is the name of a daemon running in the background of all VMs produced using the
VM Build Container. It handles configuration, decommissioning, and upgrade of the VMs.
This page details how you can add custom configuration scripts that run on specified hooks in initconf - both during configuration of your VMs, and when a VM is decommissioned.
initconf hooks
There are two types of initconf hooks:
-
configuration hooks which run after new config has been uploaded to the CDS
-
quiesce hooks which run when a VM is decommissioned, e.g. due to an upgrade triggered by MDM.
These hooks are detailed in the tables below.
Configuration hooks
| Configuration hook name | Point hook is run |
|---|---|
|
This is the first configuration hook that will run. This hook will run immediately after new config has been uploaded to the CDS. |
|
This will run before Rhino has been configured. |
|
This will run after Rhino has started. |
|
This will run after the |
|
This will run after the SLEE has started. |
|
This will run after all other configuration config hooks complete. |
|
|
The hook before-slee-start is run before the initconf task
that is responsible for starting the SLEE after Rhino has been started.
If initconf runs due to a change in CDS config after the SLEE has been started,
the SLEE will already be running, but the before-slee-start config hook will still be run.
The before-slee-start config script must take into account that the SLEE may
already be running by the time this hook is run.
|
Registering initconf hook scripts
To register initconf hook scripts to run against configuration or quiesce hooks,
create executables named after each configuration hook you want to run against
and add these to the optional custom-configuration.zip archive
in the same directory as your Rhino license.
The initconf hook scripts must be in the root of the custom-configuration.zip archive,
i.e. they must appear in the current working directory when the archive is extracted.
The custom-configuration.zip archive may contain additional supplementary data for your
initconf hook scripts alongside the executables.
Configuration scripts can call other programs to achieve their tasks.
These must already exist on the VMs or be provided in the custom-configuration.zip archive.
|
|
Each script’s name must match the corresponding hook’s name exactly. In particular,
note that the names use hyphens (-), not underscores (_).
|
|
|
Ensure that the scripts have the user-executable permission bit set. |
|
|
Ensure that the scripts' filenames have no extension, e.g. just before-rhino-configuration,
not before-rhino-configuration.sh.
|
Example custom-configuration.zip archive structure:
custom-configuration.zip
├── initial
├── before-rhino-configuration
├── after-slee-start
├── custom-configurer.jar
└── supplementary-data
└── data.json
The custom-config directory
A directory called custom-config will be created in the home directory of your VMs.
This directory will contain the following sub-directories:
| Directory Name | Description |
|---|---|
|
Contents of the |
|
All configuration yaml files will be copied to this directory |
|
This directory contains files containing any output generated by the initconf hook scripts. |
How initconf hook scripts are run
Configuration hook scripts will be wrapped by initconf tasks to be run during the configuration process when new config is uploaded to the CDS. Quiesce scripts will be wrapped by quiesce tasks to be run during the quiesce process when a VM is decommissioned.
The initconf hook scripts will be run as the default user
and will be run from the custom-config-workspace directory.
The path to the custom-config-data directory will be passed to the initconf hook scripts as an argument so that they can use the data in the configuration yaml files.
When an initconf hook script is run, any output to the stdout and stderr streams will be captured and this output will be stored in a file in the custom-config-output directory.
The output file for an initconf hook script will be named after the initconf hook script with a .out extension added.
E.g. The file containing output for the initial initconf hook script will be named initial.out.
An empty file will be created if an initconf hook script does not write to either stdout or stderr. No output files will be created for hooks that do not have scripts registered against them.
If an initconf hook script returns with any return code other than 0, this will be interpreted as a failure. On such a failure the configuration process will end, and will start again when new config is uploaded to the CDS.
Environment variables
When an initconf hook script runs, the following variables are present in its environment.
-
The environment variable
JAVA_HOMEis set to the location of the Java Runtime Environment (JRE) that comes installed on the VM. -
The environment variable
RHINO_HOMEpoints to the location of the Rhino installation. -
The environment variable
CLIENT_HOMEpoints to theclientdirectory within the Rhino installation, inside which you can find various Rhino tools, most notably${CLIENT_HOME}/bin/rhino-console.
Example initial initconf hook script
If an initial initconf hook script with the contents
#!/bin/bash
cat hello.txt
echo Configuration yaml files:
ls "$1"
and a file called hello.txt with the contents Hello, world!
are compressed into an archive called custom-configuration.zip using the command zip custom-configuration.zip initial hello.txt,
and this zip file is included in the same directory as the Rhino license before building a VM, when the VM has been built these files will be extracted into the custom-config-workspace directory.
During configuration, the initial initconf hook script
will be run against the initial configuration hook.
After configuration has been completed, an ls on the custom-config directory
will show the following contents:
$ ls custom-config custom-config-data custom-config-workspace custom-config-output
An ls on each sub-directory within the custom-config directory will show:
$ ls custom-config/custom-config-workspace hello.txt initial $ ls custom-config/custom-config-data/ custom-config-data.yaml routing-config.yaml sdf-custom.yaml custom-vmpool-config.yaml sas-config.yaml snmp-config.yaml $ ls custom-config/custom-config-output/ initial.out
The contents of the resulting initial.out file will be:
Hello, world!
Configuration yaml files:
custom-config-data.yaml
custom-vmpool-config.yaml
routing-config.yaml
sas-config.yaml
sdf-custom.yaml
snmp-config.yaml
Example before-slee-start initconf hook script
The before-slee-start initconf hook is useful for setting up configuration
within Rhino, based on the configuration in the custom-config-data.yaml configuration file.
For example, if a service uses an RA entity called custom-ra-entity, with a configuration property
config-property, that we want to be able to configure on the VM at runtime.
We can do this by providing the value in custom-config-data.yaml:
my-configuration:
my-value: test
Note that this file is not present on the VM; it is provided using rvtconfig after the VM
has been deployed. This means the value can be reconfigured and is not hard-coded on the VM.
To set this configuration within the VM, we can use the following
before-slee-start initconf hook:
#!/opt/tasvmruntime-py/bin/python3
import os
import subprocess
import sys
import yaml
from pathlib import Path
config_dir = Path(sys.argv[1])
with open(config_dir / "custom-config-data.yaml", "r") as input_file:
custom_config_data = yaml.safe_load(input_file)
config_property_value = custom_config_data["my-configuration"]["my-value"]
client_home = os.environ["CLIENT_HOME"]
process = subprocess.run(
[
f"{client_home}/bin/rhino-console",
"updateraentityconfigproperties",
"custom-ra-entity",
"config-property",
config_property_value,
],
check=True,
text=True,
)
This will cause the custom-ra-entity configuration property config-property to be set
to the value provided in my-configuration/my-value in custom-config-data.yaml.
