Prepare a StackPack provisioning script
StackState Self-hosted v5.1.x
The provisioning script used for provisioning the StackPack should extend from com.stackstate.stackpack.ProvisioningScript
. The provisioning script can be split into multiple groovy scripts. The provisioning
directory inside the StackPack is part of the classpath, so any groovy script referred to inside the provisioning
directory is also loaded.
A provisioning script is provided with a set of capabilities that it can execute in the StackState
environment. The capabilities are restricted to those that are defined as part of com.stackstate.stackpack.ProvisioningContext
which is passed as a constructor parameter for the ProvisioningScript
.
Here is an example of a provisioning script:
The supported actions are:
preInstall
- this action is run when installing the very first instance of a StackPack - it's meant to install all the objects that each of the instances will share.install
- this action is run for every installed instance of a StackPack - it's meant to install instance-specific objects, that will be of use for this instance only.waitingForData
- this action allows the StackPack creator to check wether any external service that this StackPack communicates with is properly sending data that this StackPack can process. By default, it just transitions to theINSTALLED
state.upgrade
- this action is run for every installed instance of a StackPack when the user upgrades their StackPack version.uninstall
- this action is run for every instance when it's being uninstalled - it's meant to clean up all the instance-specific objects.postUninstall
- this action is run when uninstalling the very last instance of a StackPack - it's meant to clean up all the StackPack-shared objects.
Provisioning script context
A set of useful objects for the above actions are exposed via the provisioning context accessible via the context()
function.
The provisioning script can interact with the provisioning via the context()
function:
The context()
function returns an object that provides the following functions:
scriptsDirectory()
- returns the path to the directory where this script resides.fail(errorMessage)
- marks this StackPack instance as broken (StackPack is inERROR
state) witherrorMessage
error message.
The StackState (sts
) object
sts
) objectThe provisioning script can interact with the StackState instance it's running in via the sts()
function:
The sts()
function returns an object that provides the following functions:
intakeApi()
- returns an object representing the StackState Receiver API that receives incoming data. The object supplies the following functions:apiKey()
- returns theAPI_KEY
, this is the API key for the StackState Receiver API. Also referred to as the<STACKSTATE_RECEIVER_API_KEY>
for clarity in the docs.baseUrl()
- returns theRECEIVER_BASE_URL
, this is the base URL for the StackState Receiver API. Also referred to as the<STACKSTATE_RECEIVER_API_ADDRESS>
for clarity in the docs.
log()
- allows logging to be done in the provisioning script. Example:context().sts().log().debug("Installing test StackPack")
.install(stackpackName, parameters)
- triggers installation of StackPackstackpackName
with parametersparameters
.onDataReceived(topic, callback)
- runs acallback
function whenever data is received by the StackState API on topictopic
.provisioningComplete()
- called when provisioning is done, marks this StackPack instance state asINSTALLED
.createTopologyTopicName(sourceType, sourceId)
- formats a StackState Kafka topic name usingsourceType
andsourceId
parameters.
The StackPack (stackPack
) object
stackPack
) objectThe provisioning script can interact with the StackPack being installed via the stackPack()
function:
The stackPack()
function returns an object that provides the following functions:
importSnapshot(filename, parameters)
- imports a template fromfilename
in the StackPack's namespace, filling in the optionalparameters
substitutions.
The StackPack instance (instance
) object
instance
) objectThe provisioning script can interact with the StackPack instance being installed via the instance()
function:
The instance()
function returns an object that provides the following functions:
id()
- returns the current StackPack instance id.importSnapshot(filename, parameters)
- imports a template fromfilename
in the StackPack's namespace, filling in the optionalparameters
substitutions.
The environment (env
) object
env
) objectThe provisioning script can interact with the StackState environment via the env()
function:
The env()
function returns an object that provides the following functions:
execute(commandLine, directory, environment)
- runs a shell script commandcommandLine
indirectory
withenvironment
setup.
How to ensure consistency between the provisioning script and the template file
It's time to template out the variables exposed by your StackPack. It's possible to define some input fields that your StackPack requires to authenticate against some external sources and to differentiate between instances. To generalize the configuration, it's needed to inject the configuration file with some template parameters which are provided by the provisioning script. Any parameters or configuration item can be passed down to the .stj
template file.
One common example is to create the topic name required by the data source for a given instance. To ensure data received from the StackState Agent Check ends up in your StackPack's data source, make sure that you create the same topic in the provisioning script. The following code snippet shows how to create a function called topicName
that generates a topic name for this instance, based on the data provided by the user in the StackPack installation step.
It's possible now to reference any of the above templateArguments
in your .stj
template file. In case of the topicName
you can replace the topic
value in the config
section of your StackState DataSource with this parameter:
Last updated