Events¶
Any action, available to be performed by means of API (including custom scripts running), should be bound to some event and executed as a result of this event occurrence.
Each event triggers a particular action on the required application's lifecycle stage. The entry point for executing any action is the onInstall event.
Events Execution Rules¶
- Such events as onBeforeDelete and onAfterDelete (which refer to an environment deletion) can be executed just once. Other events can be used as much times as required.
- The scaling events (onBeforeScaleOut/onAfterScaleOut, onBeforeScaleIn/onAfterScaleIn, onBeforeServiceScaleOut/onAfterServiceScaleOut, onBeforeSetCloudletCount/onAfterSetCloudletCount) are called once upon any node count change. Herewith, count of the addNode or removeNode actions’ execution refer to the number of nodes that should be added/removed per a single scaling event.
- For application server, load balancer and VPS node layers, the onBeforeCloneNodes/onAfterCloneNodes events are executed each time the node group is scaled out.
- The onBeforeLinkNodes/onAfterLinkNodes, onBeforeUnlinkNodes/onAfterUnlinkNodes, onBeforeSetEnvVars/onAfterSetEnvVars, onBeforeSetEntryPoint/onAfterSetEntryPoint, onBeforeSetRunCmd/onAfterSetRunCmd, onBeforeAddVolume/onAfterAddVolume and onBeforeRemoveVolume/onAfterRemoveVolume events can be executed only once per a single changeTopology action.
- The onBeforeStartService/onAfterStartService event can be called only once while performing the changeTopology and createEnvironment actions.
Events Filtering¶
Events can be filtered by any input parameters. As a result, the action is executed only when the called event matches specified filtering rules. Parameter name (e.g. myalert) can be specified via a colon: onAlert [name:myalert]. Input parameters list is described for every event within ${event.params.}. Also, it is possible to filter events with comma-separated list of the parameters (onBeforeRedeployContainer [nodeGroup:cp, sequential:true, useExistingVolumes:true]). In case the parameter name is not specified via colon, engine tries to determine parameter as a nodeID, if it’s not possible, then it tries to determine a nodeGroup, if it’s not possible, after that it tries to determine a nodeType. Finally, if no filtering rules are specified, no event triggers.
The following example describes the events filtering by nodeGroup (for the onAfterScaleOut event), nodeType (for the onAfterRestartNode event), and nodeId (for the onAfterResetNodePassword event). Here, filtering by the compute node group ([cp]) is set so that the action is executed after compute nodes are scaled out. The nodeType filtering is set so that the action is executed after Apache 2 nodes are restarted. The nodeID filtering is set so that the action is executed after a password from the first compute node in the layer is reset.
type: update
name: Event Subscription Example
onInstall:
createFile [cp]: /tmp/result.txt
onAfterScaleOut [cp]:
cmd [cp]: echo 'New Compute node has been added' >> /tmp/result.txt
onAfterRestartNode [nodeType:apache2]:
cmd [cp]: echo 'Compute node with ID - ${events.response.nodeid} has been restarted' >> /tmp/result.txt
onAfterResetNodePassword [${nodes.cp[0].id}]:
cmd [${nodes.cp[0].id}]: echo 'First compute node has been restarted' >> /tmp/result.txt
{
"type": "update",
"name": "Event Subscription Example",
"onInstall": {
"createFile [cp]": "/tmp/result.txt"
},
"onAfterScaleOut [cp]": {
"cmd [cp]": "echo 'New Compute node has been added' >> /tmp/result.txt"
},
"onAfterRestartNode [nodeType:apache2]": {
"cmd [cp]": "echo 'Compute node with ID - ${events.response.nodeid} has been restarted' >> /tmp/result.txt"
},
"onAfterResetNodePassword [${nodes.cp[0].id}]": {
"cmd [${nodes.cp[0].id}]": "echo 'First compute node has been restarted' >> /tmp/result.txt"
}
}
where:
type
- update type presupposes the add-on installation to the existing environment with the predefined listeners for eventsonInstall
- entry point for executing actionscp
- target node group
onAfterScaleOut
- event that triggers the action after adding a new compute nodeonAfterRestartNode
- event that triggers the action after restarting apache2 compute nodesonAfterResetNodePassword
- event that triggers the action after resetting a password from the first compute node in the layer
There are few options to filter executed events:
- onBeforeRestartNode [cp] or [apache] or [1234] - short filters for events
- onBeforeRestartNode [nodeGroup: cp] or [nodeType: apache] or [nodeId: 1234] - full filters sets
- Combines of different simple filters from first or second points above in one -
onBeforeRestartNode[1234, 5678] (executing
event
only on nodes checked by unique identifiers) or onBeforeRestartNode[nodeGroup: cp, nodeId: 123]
Such reserved keywords like nodeGroup, nodeType and nodeId in event filtering are not case sensitive, so they can be declared in any way.
Events Execution Sequence¶
Below you can find the graphs that list actions with adjoining events. Every action has a pair of adjoining events - one of them is executed before the action and another one is launched after the action, that is when the action is finished.
Note
The createEnvironment action does not have any adjoining events, because events are bound after the environment creation.
The changeTopology actions are considered quite time-consuming while being performed via the Virtuozzo Application Platform dashboard, therefore, you can automate their workflow with the following CS actions and related events.
Another demanded actions are related to scaling procedures. The following graph provides a sequence of scaling actions and related events.
Event List¶
onInstall¶
The onInstall event is the entry point for executing any action. If the installation type is install, the onInstall event is triggered right after the environment creation. If the installation type is update, onInstall is the first event that is performed during the manifest installation.
onUninstall¶
The onUninstall event can be called from the Add-ons tab at the Virtuozzo Application Platform dashboard. This event is aimed at removing data accumulated through actions that are triggered by the onInstall event.
onBeforeChangeTopology¶
The event is executed before changing environment topology via the Virtuozzo Application Platform dashboard.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidnodes
- nodes array with detailed info about the topology changeenv
- environment settings, e.g. engine, ssl, ha, region etc
${event.response.}
parameters are absent
onAfterChangeTopology¶
The event is executed once the changeTopology action is finished.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidnodes
- nodes array with detailed info about the topology changeenv
- environment settings, e.g. engine, ssl, ha, region etc
${event.response.}
:result
- result code. The successful action result is '0"envGroups
- environment groups arrayright
- account right for environmentnodeGroups
- node delays:restartNodeDelay
- delay for restartname
- node group nameredeployContainerDelay
- delay for container redeploymentredeployContextDelay
- delay for context redeploymentrestartContainerDelay
- delay for container restart
nodes
- nodes array with detailed info about the topology change. Explore the full list of available node placeholders.env
- environment information. Explore the full list of available environment placeholders.
onBeforeScaleOut¶
The event is executed before adding new node(s) (i.e. scaling out) to the existing node group (layer). Scaling in/out can be performed either through changing topology or auto horizontal scaling functionality. The onBeforeScaleOut event is run once for each layer upon any node count change.
Event Placeholders:
${event.params.}
:count
- number of nodes that are addednodeGroup
- node group that is scaled out
${event.response.}
parameters are absent
onAfterScaleOut¶
The event is executed after adding new node(s) to the existing node group. The onAfterScaleOut event is run once for each layer upon any node count change.
Event Placeholders:
${event.params.}
:count
- number of nodes that are addednodeGroup
- node group that is scaled out
${event.response.}
:nodes
- nodes array with detailed info about topology. Explore the full list of available node placeholders.
onBeforeScaleIn¶
The event is executed before removing node(s) (i.e. scaling in) from the target node group. The onBeforeScaleIn event is run once for each layer upon any node count change.
Event Placeholders:
${event.params.}
:count
- number of nodes that are removednodeGroup
- node group that is scaled in
${event.response.}
:nodes
- nodes array with detailed info about topology. Explore the full list of available node placeholders.
onAfterScaleIn¶
The event is executed after scaling in the corresponding node group. The onAfterScaleIn event is run once for each layer upon any node count change.
Event Placeholders:
${event.params.}
:count
- number of nodes that are removednodeGroup
- node group that is scaled in
${event.response.}
:nodes
- nodes array with detailed info about topology. Explore the full list of available node placeholders.
onBeforeServiceScaleOut¶
The event is executed before adding new Docker container(s) to the existing node group. It is run once for each layer upon any node count change. The onBeforeServiceScaleOut event is applicable only for Docker containers.
Event Placeholders:
${event.params.}
:count
- nodes count which have been addednodeGroup
- node layer where event is executed
${event.response.}
:nodes
- nodes array which will be added to the environment. All parameters from that array can be used in a same action as placeholders value. For example, placeholder {event.response.nodes[0].url} will be an address of first added node.
onAfterServiceScaleOut¶
The event is executed after adding new container(s) to the existing node group. It is run once for each layer upon any node count change. The onAfterServiceScaleOut event is applicable only for Docker containers.
Event Placeholders:
${event.params.}
:nodeGroup
- node layer where event is executedcount
- nodes count which have been added
${event.response.}
nodes
- nodes array which was added to the environment. All parameters from that array can be used in a same action as placeholders value. For example, placeholder {event.response.nodes[0].url} will be an address of first added node
onAlert¶
This event provides a possibility to bind actions to Load Alerts and Automatic Horizontal Scaling Alerts that are configured through the Virtuozzo Application Platform triggers.
These monitoring triggers are based on the usage of the following resource types:
- CLOUDLETS (CPU, Memory) - available only for the NOTIFY action type
- CPU
- MEM (Memory)
- NET_EXT - external output and input traffic that are available only for the NOTIFY action type
- NET_EXT_OUT - external output traffic
- DISK - disk space amount that is available only for the NOTIFY action type
- INODES - available only for the NOTIFY action type
- Disk I/O - disk input/output rate
- Disk IOPS - disk input/output rate (in operations per second)
The units of measurement are PERCENTAGE and SPECIFIC. The second value is available only for NET_EXT and NET_EXT_OUT resource types.
The following example illustrates the subscription to the onAlert event. Here, the log action is executed if one of the triggers within the compute ([cp]) layer is invoked.
type: update
name: AddTrigger
onAlert [cp]:
log: onAlert event has subscribed
{
"type": "update",
"name": "AddTrigger",
"onAlert [cp]": {
"log": "onAlert event has subscribed"
}
}
In the following example, the log action is executed if the invoked trigger is subscribed to the onAlert event with the custom_name.
type: update
name: AddTrigger
onAlert [name:custom_name]:
log: onAlert event has subscribed
{
"type": "update",
"name": "AddTrigger",
"onAlert [name:custom_name]": {
"log": "onAlert event has subscribed"
}
}
The trigger name can be set up through the dashboard as on the picture above or as described in the example as follows.
The following example shows how a new trigger is being created.
type: update
name : AddTrigger
onInstall:
environment.trigger.AddTrigger:
data:
name: new alert
nodeGroup: sqldb
period: 10
condition:
type: GREATER
value: 55
resourceType: MEM
valueType: PERCENTAGES
actions:
- type: NOTIFY
customData:
notify: false
{
"type": "update",
"name": "AddTrigger",
"onInstall": {
"environment.trigger.AddTrigger": {
"data": {
"name": "new alert",
"nodeGroup": "sqldb",
"period": "10",
"condition": {
"type": "GREATER",
"value": "55",
"resourceType": "MEM",
"valueType": "PERCENTAGES"
},
"actions": [
{
"type": "NOTIFY",
"customData": {
"notify": false
}
}
]
}
}
}
}
This example involves execution of the Virtuozzo Application Platform API addTrigger method with a set of required parameters:
name
- name of a notification triggernodeGroup
- target node group (you can apply trigger to any node group within the chosen environment)period
- load period for nodescondition
- rules for monitoring resourcestype
- comparison sign, the available values are GREATER and LESSvalue
- percentage of a resource that is monitoredresourceType
- types of resources that are monitored by a trigger, namely CPU, Memory (RAM), Network, Disk I/O, and Disk IOPSvalueType
- measurement value. Here, PERCENTAGES is the only possible measurement value. The available range is from 0 up to 100.
actions
- object to describe a trigger actiontype
- trigger action, the available values are NOTIFY, ADD_NODE, and REMOVE_NODEcustomData
:notify
- alert notification sent to a user via email
The Virtuozzo Application Platform engine sends an alert notification to the Cloud Scripting system when the appropriate trigger is invoked. Therefore, the onAlert event provides a possibility to bind actions to alert notifications and execute custom actions.
Event Placeholders:
${event.params.}
:name
- alert namenodeGroup
- nodeGroup where an alert is executedresourceType
- resource type that is monitored
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeRestartNode¶
The event is triggered before restarting a node. It is called before the corresponding restartNodeById and restartNodeByGroup actions.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidnodeType
- node type where event is executednodeGroup
- node group (nodemission) where event is executedenv
- environment short name within which the event is calledname
- environment display name
${event.response.}
parameters are absent
onAfterRestartNode¶
The event is triggered after restarting a node. It is called subsequently upon the restartNodeById and restartNodeByGroup actions.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidnodeType
- node type where event is executednodeGroup
- node group (nodemission) where event is executedenv
- environment short name within which the event is calledname
- environment display name
${event.response.}
:nodeid
- restarted node's identifierout
- success output messageresult
- result code. The successful action result is '0'
onBeforeDelete¶
The event is called before the deleteEnvironment action.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidpassword
- user passwordenv
- environment short name (only domain name)
${event.response.}
parameters are absent
onBeforeAddNode¶
The event is triggered before adding a new node to an environment. The onBeforeAddNode event is executed for each newly added node.
There are the following available node groups:
- balancer
- compute
- cache
- database
- storage
- VPS
- build
- docker
Event Placeholders:
${event.params.}
:extipv4
[nubmer] - external IPv4 address countextipv6
[nubmer] - external IPv6 address countsession
- current user sessionappid
- environment unique appidfixedCloudlets
- reserved cloudletsflexibleCloudlets
- dynamic cloudletsismaster
[boolean] - if true, then a new node is treated as the first (i.e. master) one in the current layerenv
- environment domain nametag
- template tagnodeType
- predefined node typenodetype
- same asnodeType
parameternodeGroup
- predefined node groupnodegroup
- same asnodeGroup
parametername
- template node namefixedCloudlets
- fixed cloudlets count for future nodeflexibleCloudlets
- flexible cloudlet countdiskLimit
- current node disk limitstartService
[boolean] - value to start main service in container
${event.response.}
parameters are absent
onAfterAddNode¶
The event is triggered after adding a new node to an environment. The onAfterAddNode event is executed for each newly added node.
There are the following available node groups:
- balancer
- compute
- cache
- database
- storage
- VPS
- build
- docker
Event Placeholders:
${event.params.}
:extipv4
[nubmer] - external IPv4 address countextipv6
[nubmer] - external IPv6 address countsession
- current user sessionappid
- environment unique appidfixedCloudlets
- reserved cloudletsflexibleCloudlets
- dynamic cloudletsismaster
[boolean] - if true, then a new node is treated as the first (i.e. master) one in the current layerenv
- environment domain nametag
- template tagnodeType
- predefined node typenodetype
- same asnodeType
parameternodeGroup
- predefined node groupnodegroup
- same asnodeGroup
parametername
- template node namefixedCloudlets
- fixed cloudlets count for future nodeflexibleCloudlets
- flexible cloudlet countdiskLimit
- current node disk limitstartService
[boolean] - value to start main service in container
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeCloneNodes¶
The event is performed before cloning node in the environment. The process of cloning nodes presupposes that new nodes are cloned from the existing ones.
The onBeforeCloneNodes event is applicable only for the next node groups (excluding Docker nodes):
- compute
- balancer
- VPS
Event Placeholders:
${event.params.}
:count
- number of nodes to be clonedsession
- current user sessionappid
- environment unique appidnodeGroup
- node groupnodegroup
- same value asnodeGroup
env
- environment short namename
- environment display name
${event.response.}
parameters are absent
onAfterCloneNodes¶
The event is performed after cloning node in the environment.
The onAfterCloneNodes event is applicable only for the next node groups (excluding Docker nodes):
- compute
- balancer
- VPS
Event Placeholders:
${event.params.}
:count
- number of nodes to be clonedsession
- current user sessionappid
- environment unique appidnodeGroup
- node groupnodegroup
- same value asnodeGroup
env
- environment short namename
- environment display name
${event.response.}
:result
- result code. The successful action result is '0'.className
- class name for a new node info, viz. "com.hivext.api.server.system.persistence.SoftwareNode"array
- new nodes array
onBeforeLinkNode¶
The event is executed before linking nodes to apply configurations to IP addresses. It is compatible only with compute and balancer node groups and excludes Docker nodes.
Event Placeholders:
${event.params.}
:parentNodes
- node identifiers for linkingsession
- current user sessionappid
- environment unique appidchildNodes
- node identifiers for linking with parent nodesenv
- environment short name
${event.response.}
- parameters are absent
onAfterLinkNode¶
The event is executed after linking nodes to apply configurations to IP addresses. It is available only for compute and balancer node groups and excludes Docker nodes.
Event Placeholders:
${event.params.}
:parentNodes
- node identifiers for linkingsession
- current user sessionappid
- environment unique appidchildNodes
- node identifiers for linking with parent nodesenv
- environment short name
${event.response.}
:result
- result code. The successful action result is '0'.infos
- info with result codes about all nodes' linkings:result
- result code
onBeforeAttachExtIp¶
The event is executed before attaching the external IP address. The onBeforeAttachExtIp event is triggered each time before the external IP address attachment.
Event Placeholders:
${event.params.}
:nodeid
- node identifier for attaching external IP addresssession
- current user sessionenvName
- environment unique appidappid
- application unique appidname
- environment display nameenv
- environment short domain name
${event.response.}
:result
- parameters are absent
onAfterAttachExtIp¶
The event is executed after attaching the external IP address. The onBeforeAttachExtIp event is triggered each time upon the external IP address attachment.
Event Placeholders:
${event.params.}
:nodeid
- node identifier for attaching external IP addresssession
- current user sessionenvName
- environment unique appidappid
- application unique appidname
- environment display nameenv
- environment short domain name
${event.response.}
:result
- result code. The successful action result is '0'.obejct
[string] - attached external IP address
onBeforeDetachExtIp¶
The event is executed before detaching the external IP address. The onBeforeDetachExtIp event is triggered each time before the external IP address detachment.
Event placeholders:
${event.params.}
:nodeid
- node identifier for detaching external IP addresssession
- current user sessionenvName
- environment unique appidappid
- application unique appidip
- detached IP addressname
- environment display nameenv
- environment short domain name
${event.response.}
- parameters are absent
onAfterDetachExtIp¶
The event is executed after detaching the external IP address. The onAfterDetachExtIp event is triggered each time upon the external IP address detachment.
Event Placeholders:
${event.params.}
:nodeid
- node identifier for detaching external IP addresssession
- current user sessionenvName
- environment unique appidappid
- application unique appidip
- detached IP addressname
- environment display nameenv
- environment short domain name
${event.response.}
:result
- parameters are absent
onBeforeUpdateVcsProject¶
The event is carried out before updating the VCS project. For a detailed guidance on the VCS project deployment, refer to the linked page.
Event Placeholders:
${event.params.}
:projectId
- project idsession
- current user sessionappid
- environment unique appidenvName
- environment unique identifiercontext
- project context nameenv
- environment short domain namenodeGroup
[optional] - predefined node groupnodegroup
[optional] - same value asnodeGroup
nodeid
[optional] - node unique identifierdelay
[optional] - delay between deploys on nodes (in case if mode than two nodes in one nodeGroup are available).
${event.response.}
- parameters are absent
onAfterUpdateVcsProject¶
The event is carried out after updating the VCS project. For a detailed guidance on the VCS project deployment, refer to the linked page.
Event Placeholders:
${event.params.}
:projectId
- project idsession
- current user sessionappid
- environment unique appidenvName
- environment unique identifiercontext
- project context nameenv
- environment short domain namenodeGroup
[optional] - predefined node groupnodegroup
[optional] - same value asnodeGroup
nodeid
[optional] - node unique identifierdelay
[optional] - delay between deploys on nodes (in case if mode than two nodes in one nodeGroup are available).
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeSetCloudletCount¶
The event is executed before setting cloudlet count, which implies changing the number of allocated cloudlets per any layer in the environment.
Event Placeholders:
${event.params.}
:fixedCloudlets
- reserved cloudlets valueflexibleCloudlets
- dynamic cloudlets valuesession
- current user sessionappid
- environment unique appidnodeGroup
- predefined node groupnodegroup
- same value asnodeGroup
env
- environment short domain namename
- environment display name
${event.response.}
: parameters are absent
onAfterSetCloudletCount¶
The event is executed after setting cloudlet count, which implies changing the number of allocated cloudlets per any layer in the environment.
Event Placeholders:
${event.params.}
:fixedCloudlets
- reserved cloudlets valueflexibleCloudlets
- dynamic cloudlets valuesession
- current user sessionappid
- environment unique appidnodeGroup
- predefined node groupnodegroup
- same value asnodeGroup
env
- environment short domain namename
- environment display name
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeSetCrossServiceNetworkIpCount¶
The event is executed before setting the Cross-Service Network IP address count, which implies changing the number of allocated cross-service IPs per any layer in the environment.
Event Placeholders:
${event.params.}
:count
- number of cross-service IPssession
- current user sessionenvName
- environment unique appidappid
- application unique appidnodeid
- node identifier for attaching external IP addressnodeGroup
- node group
${event.response.}
: parameters are absent
onAfterSetCrossServiceNetworkIpCount¶
The event is executed after setting the Cross-Service Network IP address count, which implies changing the number of allocated cross-service IPs per any layer in the environment.
Event Placeholders:
${event.params.}
:count
- number of cross-service IPssession
- current user sessionenvName
- environment unique appidappid
- application unique appidnodeid
- node identifier for attaching external IP addressnodeGroup
- node group
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeChangeEngine¶
The event is performed before changing the engine's version (e.g. from php 7 to php 7.1) in the required environment. The onBeforeChangeEngine event is not compatible with Docker-based environments.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidsettings
- environment settings to change, i.e engine in the present case
${event.response.}
:result
- parameters are absent
onAfterChangeEngine¶
The event is performed after changing the engine's version (e.g. from php 7 to php 7.1) in the required environment. The onAfterChangeEngine event is not compatible with Docker-based environments.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidsettings
- environment settings to change, i.e engine in the present case
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeStart¶
The event is related to starting environment (executed from the Virtuozzo Application Platform dashboard) and is triggered before it.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidenv
- environment short domain name
${event.response.}
- parameters are absent
onAfterStart¶
The event is related to starting environment (executed from the Virtuozzo Application Platform dashboard) and is triggered after it.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidenv
- environment short domain name
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeStop¶
The event is related to stopping environment (executed from the Virtuozzo Application Platform dashboard) and is triggered before it.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidenv
- environment short domain name
${event.response.}
: parameters are absent
onAfterStop¶
The event is related to stopping environment (executed from the Virtuozzo Application Platform dashboard) and is triggered after it.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appid
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeClone¶
The event is related to cloning environment (performed via the Virtuozzo Application Platform dashboard by means of the same-named button) and is triggered before it.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appiddomain
- cloned environment namesrcenv
- source environment, parent environment for clone.targetenv
- cloned environment name. The same value asdomain
${event.response.}
- parameters are absent
onAfterClone¶
The event is related to cloning environment (performed via the Virtuozzo Application Platform dashboard by means of the same-named button) and is triggered after it.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appiddomain
- cloned environment namesrcenv
- source environment, parent environment for clone.targetenv
- cloned environment name. The same value asdomain
${event.response.}
:result
- result code. The successful action result is '0'envGroups
- environment groups arraynodeGroups
- node delays:restartNodeDelay
- delay for node restartname
- node group nameredeployContainerDelay
- delay for container redeploymentredeployContextDelay
- delay for context redeploymentrestartContainerDelay
- delay for container restart
nodes
- nodes array with detailed info about topology. Explore the full list of available node placeholders.env
- environment information. Explore the full list of available environment placeholders.
onBeforeBuildProject¶
The event is related to build project action and is triggered before it (executed from the Virtuozzo Application Platform dashboard).
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidproject
- project name in Virtuozzo Application Platform dashboardenv
- environment name where action is executednodeid
- environment name where action is executedprojectid
- project unique identifier in Virtuozzo Application Platform dashboard
${event.response.}
:result
- parameters are absent
onAfterBuildProject¶
The event is related to build project action and is triggered after it (executed from the Virtuozzo Application Platform dashboard).
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidproject
- project name in Virtuozzo Application Platform dashboardenv
- environment name where action is executednodeid
- environment name where action is executedprojectid
- project unique identifier in Virtuozzo Application Platform dashboard
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeDeploy¶
The event is bound to the deploy action, which is executed at the Virtuozzo Application Platform dashboard by deploying any context (i.e. archive with a compressed app) to the environment, and is triggered before it (viz. deploy action).
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidatomicDeploy
[boolean] - deployment of a context to all nodes at oncepath
- context pathcontext
- context namearchivename
- deployed context display name that is shown at the dashboard
${event.response.}
:result
- parameters are absent
onAfterDeploy¶
The event is bound to the deploy action, which is executed at the Virtuozzo Application Platform dashboard by deploying any context (i.e. archive with a compressed app) to the environment, and is triggered after it (viz. deploy action).
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidatomicDeploy
[boolean] - deployment of a context to all nodes at oncepath
- context pathcontext
- context namearchivename
- deployed context display name that is shown at the dashboard
${event.response.}
:result
- result code. The successful action result is '0'responses
- deploy result texts:result
- deploy result code for current node IDout
- deploy result textnodeid
- node identifier
onBeforeResetNodePassword¶
The event is bound to resetting a container default user password (executed at the Virtuozzo Application Platform dashboard for vds
nodeGroup via the Reset password button or via API methods ResetNodePassword, ResetNodePasswordByID, ResetNodePasswordByGroup) and is triggered before it.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidnodeGroup
- predefined node group
${event.response.}
:result
- parameters are absent
onAfterResetNodePassword¶
The event is bound to resetting a container default user password (executed at the Virtuozzo Application Platform dashboard for vds
nodeGroup via the Reset password button or via API methods ResetNodePassword, ResetNodePasswordByID, ResetNodePasswordByGroup) and is triggered before it.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidnodeGroup
- predefined node group
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeResetServicePassword¶
The event is bound to resetting a container main service password (executed at the Virtuozzo Application Platform dashboard via the Reset password button) and is triggered before it. The event is applicable for services that have an Admin Panel enabled by default for the specific nodeType. These templates are:
nodeGroup | nodeType |
---|---|
bl | litespeedadc |
cp | litespeedphp |
sqldb | (all nodeTypes) |
nosqldb | (all nodeTypes) |
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidnodeGroup
- predefined node group
${event.response.}
:result
- parameters are absent
onAfterResetServicePassword¶
The event is bound to resetting a container main service password (executed at the Virtuozzo Application Platform dashboard via the Reset password button) and is triggered before it. The event is applicable for services that have an Admin Panel enabled by default for the specific nodeType. These templates are:
nodeGroup | nodeType |
---|---|
bl | litespeedadc |
cp | litespeedphp |
sqldb | (all nodeTypes) |
nosqldb | (all nodeTypes) |
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidnodeGroup
- predefined node group
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeRemoveNode¶
This event is executed before deleting node(s) from your environment.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidnodeid
- predefined node identifier
${event.response.}
:result
- parameters are absent
onAfterRemoveNode¶
This event is executed after deleting node(s) from your environment.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidnodeid
- predefined node identifierenv
- the same valueenvName
name
- environment display name
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeRestartContainer¶
This event is carried out before restarting container. The onBeforeRestartContainer event is triggered before the restartConteinerById action.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidnodeGroup
- predefined node groupnodeType
- predefined node typeenvName
- environment short domain nameenv
- the same valueenvName
name
- environment display namenodeid
- node unique identifier where method is executed
${event.response.}
- parameters are absent
onAfterRestartContainer¶
This event is carried out after restarting container. The onAfterRestartContainer event is triggered after the restartConteinerById action.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidnodeGroup
- predefined node groupnodeType
- predefined node typeenvName
- environment short domain nameenv
- the same valueenvName
name
- environment display namenodeid
- node unique identifier where method is executed
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeMigrate¶
The event is related to the migrating environment action and is called before it.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidisOnline
[boolean] - online migration that causes no downtime, if set to 'true', therefore, setting it as 'false' leads to the downtimehardwareNodeGroup
- predefined hard node group
${event.response.}
- parameters are absent
onAfterMigrate¶
The event is related to migrating environment and is called after it.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidisOnline
[boolean] - online migration that causes no downtime, if set to 'true', therefore, setting it as 'false' leads to the downtimehardwareNodeGroup
- predefined hard node group
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeRedeployContainer¶
This event is performed before the container redeployment. It is bound to the redeployContainerById and redeployContainerByGroup (i.e. redeployment of all containers in a layer) actions. The event is available for Docker containers only.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidsequential
[boolean] - containers sequential redeploymentnodeGroup
- predefined node groupnodegroup
- same value asnodeGroup
name
- environment display nameenv
- environment domain nametag
- chosen tag for redeployuseExistingVolumes
- using volumes existing on nodes
${event.response.}
- parameters are absent
onAfterRedeployContainer¶
This event is performed after the container redeployment. It is bound to the redeployContainerById and redeployContainerByGroup (i.e. redeployment of all containers in a layer) actions. The event is available for Docker containers only.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidsequential
[boolean] - containers sequential redeploymentnodeGroup
- predefined node groupnodegroup
- same value asnodeGroup
name
- environment display nameenv
- environment domain nametag
- chosen tag for redeployuseExistingVolumes
- using volumes existing on nodes
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeLinkNodes¶
The event is executed before the linkNodes action. This event is run for each linking containers action. It is provided for Docker containers only.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidgroupAlias
- alias for linking nodesalias
sourceNodeId
- source node for links storagesourcenodeid
- an alias forsourceNodeId
sourcenodename
- source node nametargetNodeId
- target node for links storagetargetnodeid
- an alias totargetNodeId
targetnodename
- target node nameenv
- environment domain nameisAutoRestart
[boolean] - auto restart after linking
${event.response.}
- parameters are absent
onAfterLinkNodes¶
The event is executed after the linkNodes action. This event is run for each linking containers action. It is provided for Docker containers only.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidgroupAlias
- alias for linking nodesalias
- an alias forgroupAlias
sourceNodeId
- source node for links storagesourcenodeid
- an alias forsourceNodeId
sourcenodename
- source node nametargetNodeId
- target node for links storagetargetnodeid
- an alias totargetNodeId
targetnodename
- target node nameenv
- environment domain nameisAutoRestart
[boolean] - auto restart after linking
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeUnlinkNodes¶
This event is executed before the unLinkNodes action and is run for each unlinking containers action. The onBeforeUnlinkNodes event is applied for Docker containers only.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidalias
- alias for unlinking nodessourceNodeId
- source node for links storagesourcenodeid
an alias forsourceNodeId
targetNodeId
- target node for links storagetargetnodeid
an alias fortargetNodeId
targetnodename
- target node namesourcenodename
- source node namealias
- an alias forgroupAlias
env
- environment domain nameisAutoRestart
[boolean] - auto restart after unlinking
${event.response.}
- parameters are absent
onAfterUnlinkNodes¶
This event is executed after the unLinkNodes action and is run for each unlinking containers action. The onAfterUnlinkNodes event is applied for Docker containers only.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidalias
- alias for unlinking nodessourceNodeId
- source node for links storagesourcenodeid
an alias forsourceNodeId
targetNodeId
- target node for links storagetargetnodeid
an alias fortargetNodeId
targetnodename
- target node namesourcenodename
- source node namealias
- an alias forgroupAlias
env
- environment domain nameisAutoRestart
[boolean] - auto restart after unlinking
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeSetEnvVars¶
The event is triggered before the setEnvVars action. It is executed for every Docker or dockerized container before setting environment variables.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidname
- environment display nameenv
- environment domain namenodeId
- current node identifiernodeid
- an alias, the same value asnodeId
data
- variables set for a container
${event.response.}
- parameters are absent
onAfterSetEnvVars¶
The event is triggered after the setEnvVars action. It is executed for every Docker or dockerized container upon setting environment variables.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidname
- environment display nameenv
- environment domain namenodeId
- current node identifiernodeid
- an alias, the same value asnodeId
data
- variables set for a container
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeSetEntryPoint¶
This event is called before the setEntryPoint action. It is executed for every Docker container before setting the entry point. The onBeforeSetEntryPoint event is applied for Docker containers only.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidnodeId
- current node identifierdata
- entry point set for a container
${event.response.}
- parameters are absent
onAfterSetEntryPoint¶
This event is called after the setEntryPoint action. It is executed for every Docker container upon setting the entry point. The onAfterSetEntryPoint event is applied for Docker containers only.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidnodeId
- current node identifierdata
- entry point set for a container
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeSetRunCmd¶
The event is executed before the setRunCmd action. It is triggered for every Docker container, before setting run configs. This event is compatible with Docker containers only.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidname
- environment display nameenv
- environment short domain namenodeId
- current node identifiernodeid
- an alias fornodeId
data
- run cmd set for a container
${event.response.}
- parameters are absent
onAfterSetRunCmd¶
The event is executed after the setRunCmd action. It is triggered for every Docker container, upon setting run configs. This event is compatible with Docker containers only.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidname
- environment display nameenv
- environment short domain namenodeId
- current node identifiernodeid
- an alias fornodeId
data
- run cmd set for a container
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeStartService¶
This event is executed each time before running the Docker RunCmd commands. Thus, it is always carried out for each Docker container action, e.g. before starting/restarting container and starting environment.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidnodeId
- current node identifier
${event.response.}
- parameters are absent
onAfterStartService¶
This event is executed each time after running the Docker RunCmd commands.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidnodeId
- current node identifier
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeAddVolume¶
The event is performed before adding volumes to Docker container. It is executed once for each Docker container.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidname
- environment display nameenv
- environment short domain namenodeGroup
- current node groupnodeId
- current node identifiernodeid
- the same value asnodeId
, an aliaspath
- volume path
${event.response.}
- parameters are absent
onAfterAddVolume¶
This event is performed after adding volumes to Docker container. It is executed once for each Docker container.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidname
- environment display nameenv
- environment short domain namenodeGroup
- current node groupnodeId
- current node identifiernodeid
- the same value asnodeId
, an aliaspath
- volume path
${event.response.}
:result
- result code. The successful action result is '0'nodeid
- current node identifier
onBeforeRemoveVolume¶
The onBeforeRemoveVolume event is called before removing volumes from Docker container. It is executed once for each Docker container.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidname
- environment display nameenv
- environment short domain namenodeId
- current node identifiernodeid
- the same value asnodeId
, an aliasnodeGroup
- current node grouppath
- volume path
${event.response.}
- parameters are absent
onAfterRemoveVolume¶
The onAfterRemoveVolume event is triggered after removing volumes from Docker container. It is executed once for each Docker container.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidname
- environment display nameenv
- environment short domain namenodeId
- current node identifiernodeid
- the same value asnodeId
, an aliasnodeGroup
- current node grouppath
- volume path
${event.response.}
:result
- result code. The successful action result is '0'nodeid
- current node identifier
onBeforeInit¶
onBeforeInstall¶
It is possible to dynamically fill in the manifest fields using onBeforeInit and onBeforeInstall events. All of the JPS manifest fields inside onBeforeInit and onBeforeInstall can be accessed using jps variable.
onBeforeInit¶
The onBeforeInit event is executed:
- on GetAppInfo request, which is called to display application installation dialog in the dashboard
- on application installation
You can override all the parameters of the manifest, except for:
type
name
baseUrl
The GetAppInfo method has ownerUid parameter which allows to define a collaborator's account. Parameter is applied if the owner field is added to manifest. The account and quota placeholders will be filled in depending on defined account.
For example:
type: install
name: Account And Quota Placeholders
settings:
fields:
- type: owner
caption: Owner
name: ownerUid
onBeforeInit: |
settings.fields.push({
type: "string",
caption: "Account",
name: "email",
value: "${account.email}"
}, {
type: "string",
caption: "Cloudlets",
name: "cloudlets",
value: "${quota.environment.maxcloudletsperrec}"
});
return settings;
{
"type": "install",
"name": "Account And Quota Placeholders",
"settings": {
"fields": [
{
"type": "owner",
"caption": "Owner",
"name": "ownerUid"
}
],
"onBeforeInit": [
"settings.fields.push({",
" type: 'string',",
" caption: 'Account',",
" name: 'email',",
" value: '${account.email}'",
"},",
"{",
" type: 'string',",
" caption: 'Cloudlets',",
" name: 'cloudlets',",
" value: '${quota.environment.maxcloudletsperrec}'",
"});",
"return settings;"
]
}
}
onBeforeInstall¶
The onBeforeInstall event is executed before application installation but after onBeforeInit. The placeholders ${globals.} and ${settings.} can be used within onBeforeInstall. All of the manifest parameters can be overridden, except for:
type
name
baseUrl
globals
settings
onBeforeInit and onBeforeInstall can treat JavaScript code, written as:
- string
type: update name: "Ability to dynamically determine UI in JPS" onBeforeInit: | return { result: 0, settings : { fields: [{ type : "string", caption: "Custom Field", name : "custom_field", "default" : "test" }] } }; onInstall: assert: "'${settings.custom_field}' == 'test'"
{ "type": "update", "name": "Ability to dynamically determine UI in JPS", "onBeforeInit": "return { \n result: 0, \n settings : {\n fields: [{ \n type : \"string\", \n caption: \"Custom Field\",\n name : \"custom_field\", \n \"default\" : \"test\" \n }]\n }\n};\n", "onInstall": null, "assert": "'${settings.custom_field}' == 'test'" }
type: update
name: test
onBeforeInit:
- return {
- " result: 0,"
- " settings : {"
- " fields: [{"
- " type : 'string',"
- " caption: 'Custom Field',"
- " name : 'custom_field',"
- " 'default' : 'test'"
- " }]"
- " }"
- "};"
{
"type": "update",
"name": "test",
"onBeforeInit": [
"return {",
" result: 0,",
" settings : {",
" fields: [{",
" type : 'string',",
" caption: 'Custom Field',",
" name : 'custom_field',",
" 'default' : 'test'",
" }]",
" }",
"};"
]
}
type: update
name: "Ability to dynamically determine UI in JPS"
onBeforeInit: https://gist.githubusercontent.com/SlavaKatiukha/4160926fdd7df13ae097a5194d42023e/raw/eff5ffa6015b8f997bfa31558524033193b6092a/
onInstall:
assert: "'${settings.custom_field}' == 'test'"
{
"type": "update",
"name": "Ability to dynamically determine UI in JPS",
"onBeforeInit": "https://gist.githubusercontent.com/SlavaKatiukha/4160926fdd7df13ae097a5194d42023e/raw/eff5ffa6015b8f997bfa31558524033193b6092a/",
"onInstall": [
{
"assert": [
"'${settings.custom_field}' == 'test'"
]
}
]
}
type: update
name: "Ability to dynamically determine UI in JPS"
baseUrl: https://gist.githubusercontent.com/SlavaKatiukha/4160926fdd7df13ae097a5194d42023e/raw/eff5ffa6015b8f997bfa31558524033193b6092a/
onBeforeInit: InitManifestTest.cs
onInstall:
assert: "'${settings.custom_field}' == 'test'"
{
"type": "update",
"name": "Ability to dynamically determine UI in JPS",
"baseUrl": "https://gist.githubusercontent.com/SlavaKatiukha/4160926fdd7df13ae097a5194d42023e/raw/eff5ffa6015b8f997bfa31558524033193b6092a/" ,
"onBeforeInit": "InitManifestTest.cs",
"onInstall": [
{
"assert": [
"'${settings.custom_field}' == 'test'"
]
}
]
}
The script outputs JS-object. The object contains code result and manifest customized field set in JSON.
- If the script has completed successfully with result: 0, then all the fields in the script response are applied to the manifest.
- In case the script has completed unsuccessfully with result: 11041 along with message “JPS manifest initialization error”, the attached object data provides the details about an error.
Accessing JPS manifest fields with jps variable¶
- onBeforeInit:
type: install
name: Manifest availability in onBeforeInit
baseUrl: https://example.com/
settings:
fields:
- type: string
caption: String
onBeforeInit: |
return {
result: 0,
settings: {
fields: jps.settings.fields.concat([{
type: 'string',
caption: 'Base URL',
value: jps.baseUrl
}])
}
};
{
"type": "install",
"name": "Manifest availability in onBeforeInit",
"baseUrl": "https://example.com/",
"settings": {
"fields": [
{
"type": "string",
"caption": "String"
}
]
},
"onBeforeInit": "return {result: 0, settings: { fields: jps.settings.fields.concat([{ type: 'string', caption: 'Base URL', value: jps.baseUrl}])}};"
}
simplified response example:
type: install
name: Manifest availability in onBeforeInit
baseUrl: https://example.com/
settings:
fields:
- type: string
caption: String
onBeforeInit: |
jps.settings.fields.push({
type: 'string',
caption: 'Base URL',
value: jps.baseUrl
});
return jps;
{
"type": "install",
"name": "Manifest availability in onBeforeInit",
"baseUrl": "https://example.com/",
"settings": {
"fields": [
{
"type": "string",
"caption": "String"
}
]
},
"onBeforeInit": "jps.settings.fields.push({type: 'string', caption: 'Base URL', value: jps.baseUrl}); return jps;"
}
- onBeforeInstall:
type: install
name: Manifest availability in onBeforeInit
nodes:
- nodeType: apache2
cloudlets: 8
onBeforeInstall: |
return {
result: 0,
nodes: jps.nodes.concat({
nodeType: 'nginx',
cloudlets: 8
})
};
{
"type": "install",
"name": "Manifest availability in onBeforeInit",
"nodes": [
{
"nodeType": "apache2",
"cloudlets": 8
}
],
"onBeforeInstall": "return {result: 0, nodes: jps.nodes.concat({ nodeType: 'nginx', cloudlets: 8})};"}
onBeforeSwapExtDomains¶
The event is executed before swapping the external domain names between two environments via API or Virtuozzo Application Platform dashboard
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidtargetAppid
- "string" application identifier of the second environment
${event.response.}
: parameters are absent
onAfterSwapExtDomains¶
The event is executed after swapping the external domain names between two environments via API or Virtuozzo Application Platform dashboard.
Event Placeholders:
${event.params.}
:session
- current user sessionappid
- environment unique appidtargetAppid
- "string" application identifier of the second environment
${event.response.}
:result
- result code. The successful action result is '0'
onBeforeSwapExtIps¶
The event is executed before swapping the external IPs between two environments via API or Virtuozzo Application Platform CLI.
Event Placeholders:
${event.params.}
:session
- current user sessionsourceNodeId
- source node of first IPtargetNodeId
- target node of second IPsourceIp
- first IPtargetIp
- second IP
${event.response.}
:reason
- result code. The successful action result is '0'result
- result code. The successful action result is '0'source
- “string” error description
onAfterSwapExtIps¶
The event is executed after swapping the external IPs between two environments via API or Virtuozzo Application Platform CLI.
Event Placeholders:
${event.params.}
:session
- current user sessionsourceNodeId
- source node of first IPtargetNodeId
- target node of second IPsourceIp
- first IPtargetIp
- second IP
${event.response.}
:reason
- result code. The successful action result is '0'result
- result code. The successful action result is '0'source
- “string” error description
onAfterConfirmTransfer¶
The event is called upon user confirms changing of an environment ownership from one Virtuozzo Application Platform account to another within a single hosting service provider. Confirmation occurs once user clicks on a link in an appropriate email.
Event subscription example:
type: update
name: 'Environment Transfer Testing script'
onAfterConfirmTransfer:
- log: env ${env.name} transfer confirmed
{
"type": "update",
"name": "Environment Transfer Testing script",
"onAfterConfirmTransfer": [
{
"log": "env ${env.name} transfer confirmed"
}
]
}
onBeforeBindSSL¶
The event is executed before binding a custom SSL certificate to the environment.
Event Placeholders:
${event.params.}
:env
- environment short domain name
${event.response.}
:result
- result code. The successful action result is '0'
type: update
name: '[CS] - add onBeforeBindSSL event'
onBeforeBindSSL:
log: before bind SSL
{
"type": "update",
"name": "[CS] - add onBeforeBindSSL event",
"onBeforeBindSSL": {
"log": "before bind SSL"
}
}
onAfterBindSSL¶
The event is executed after binding a custom SSL certificate to the environment.
Event Placeholders:
${event.params.}
:env
- environment short domain name
${event.response.}
:result
- result code. The successful action result is '0'
type: update
name: '[CS] - add onAfterBindSSL event'
onAfterBindSSL:
log: after bind SSL
{
"type": "update",
"name": "[CS] - add onAfterBindSSL events",
"onAfterBindSSL": {
"log": "after bind SSL"
}
}
onBeforeRemoveSSL¶
The event is executed before removing a custom SSL certificate from the environment.
Event Placeholders:
${event.params.}
:env
- environment short domain name
${event.response.}
:result
- result code. The successful action result is '0'
type: update
name: '[CS] - add onBeforeRemoveSSL events'
onBeforeRemoveSSL:
log: before remove SSL
{
"type": "update",
"name": "[CS] - add onBeforeRemoveSSL events",
"onBeforeRemoveSSL": {
"log": "before remove SSL"
}
}
onAfterRemoveSSL¶
The event is executed after removing a custom SSL certificate from the environment.
Event Placeholders:
${event.params.}
:env
- environment short domain name
${event.response.}
:result
- result code. The successful action result is '0'
type: update
name: '[CS] - add onAfterRemoveSSL events'
onAfterRemoveSSL:
log: after remove SSL
{
"type": "update",
"name": "[CS] - add onAfterRemoveSSL events",
"onAfterRemoveSSL": {
"log": "after remove SSL"
}
}
onBeforeInstallAddon¶
The event is executed before add-on installation
Event Placeholders:
${event.params.}
:settings
- custom form with predefined user input elementsid
- unique add-on idlang
- user's language code which was used during the installation. Optional parameterregion
- region, where an environment will be installedtargetAppid
- unique environment appid at the Virtuozzo Platform
${event.response.}
: parameters are absent
onAfterInstallAddon¶
The event is executed after add-on installation
${event.params.}
:settings
- custom form with predefined user input elementsid
- unique add-on idlang
- user's language code which was used during the installation. Optional parameterregion
- region, where an environment will be installedtargetAppid
- unique environment appid at the Virtuozzo Platform
${event.response.}
:uniqueName
- installed add-on unique nameappid
- unique environment appid at the Virtuozzo PlatformsuccessText
- message that appears once action is successfully performed
Events Subscription Example:
type: update
name: Test Add-on Events Subscription
onBeforeInstallAddon [nodeGroup:cp, id:myaddon]:
log: add-on
ID: ${event.params.id}
onAfterInstallAddon [nodeGroup:cp, id:myaddon]:
log: add-on
unique name: ${event.response.uniqueName}
{
"type": "update",
"name": "Test Add-on Events Subscription",
"onBeforeInstallAddon [nodeGroup:cp, id:myaddon": {
"log": "add-on",
"ID": "${event.params.id}"
},
"onAfterInstallAddon [nodeGroup:cp, id:myaddon]": {
"log": "add-on",
"unique name": "${event.response.uniqueName}"
}
}
Triggering:
type: update
name: Test Add-on Events Triggering
targetNodes:
nodeGroup: cp
id: myaddon
onInstall:
log: triggers test
{
"type": "update",
"name": "Test Add-on Events Triggering",
"targetNodes": {
"nodeGroup": "cp"
},
"id": "myaddon",
"onInstall": {
"log": "triggers test"
}
}
onBeforeMoveProduct¶
The event is executed before switching subscriptions (migrating a subscription item to a different service plan).
Event Placeholders:
${event.params.}
:subscriptionid
- unique identifier of the source subscriptionitemid
- unique identifier of the source subscription itemitemresourceid
- unique identifier of the source subscription item resourceitemresourceuniquename
- name of the source subscription item resourceserviceplanid
- unique identifier of the source service planproductname
- name of the source subscription productserviceplanname
- name of the source service plantargetsubscriptionid
- unique identifier of the target subscriptiontargetitemid
- unique identifier of the target subscription itemtargetserviceplanid
- unique identifier of the target service plantargetproductname
- name of the target subscription producttargetserviceplanname
- name of the target service plan${event.response.}
:result
- result code. The successful action result is '0'
onAfterMoveProduct¶
The event is executed after switching subscriptions (migrating a subscription item to a different service plan).
Event Placeholders:
${event.params.}
:subscriptionid
- unique identifier of the source subscriptionitemid
- unique identifier of the source subscription itemitemresourceid
- unique identifier of the source subscription item resourceitemresourceuniquename
- name of the source subscription item resourceserviceplanid
- unique identifier of the source service planproductname
- name of the source subscription productserviceplanname
- name of the source service plantargetsubscriptionid
- unique identifier of the target subscriptiontargetitemid
- unique identifier of the target subscription itemtargetserviceplanid
- unique identifier of the target service plantargetproductname
- name of the target subscription producttargetserviceplanname
- name of the target service plan${event.response.}
:result
- result code. The successful action result is '0'
onApplySubscriptionSettings¶
This event provides a possibility to execute actions required to adjust a subscription item after migration to a different service plan.
Event Placeholders:
${event.params.}
:subscriptionId
- unique identifier of the new subscriptionsubscriptionItemId
- unique identifier of the new subscription itemsubscriptionItemResourceId
- unique identifier of the new subscription item resourceservicePlanId
- unique identifier of the new service planappUniqueName
- unique identifier of the package installation in the platform's MarketplacetargetAppid
- unique identifier of the related environment(s)settings
- JSON object with custom settings provided for subscription item adjustmentservicePlanData
- JSON object with new service plan dataoverrideRegions
- defines whether to configure the service plan's regions differently from the user group's default ones (true) or not (false)regionPricing
- JSON object with a list of available regions and custom pricing models for them${event.response.}
:result
- result code. The successful action result is '0'
onCustomNodeEvent¶
This event is executed when the environment > Node > SendEvent API method is called with the eventName=CUSTOM_NODE_EVENT
parameter.
Event Placeholders:
${event.params.}
:NODE_NAME
- target container nameNODE_GROUP
- unique identifier of the target node group (layer), e.g. "cp" for the default application server layerENV_INFO
- environment informationname
- name of the event (for filtering)ENV_NAME
- target environment nameNODE_ID
- unique identifier of the target nodeUSER_NAME
- target user name (email)envName
- target environment namenodeId
- unique identifier of the target node${event.response.}
:result
- result code. The successful action result is '0'
Events Subscription Example:
type: update
name: Test Custom Node Events
targetNodes: any
onCustomNodeEvent [name:test]:
log: "filter by custom parameter. Event: ${event}"
onCustomNodeEvent [${targetNodes.nodeGroup}]:
log: "filter by nodeGroup. Event: ${event}"
{
"type": "update",
"name": "Test Custom Node Events",
"targetNodes": "any",
"onCustomNodeEvent [name:test]": {
"log": "filter by custom parameter. Event: ${event}"
},
"onCustomNodeEvent [${targetNodes.nodeGroup}]": {
"log": "filter by nodeGroup. Event: ${event}"
}
}
Triggering:
curl --location --request POST ‘https://{platformDomain}/1.0/environment/node/rest/sendevent’ --data-urlencode ‘params=\{“name”: “test”}’
or
jem api apicall [API_DOMAIN]/1.0/environment/node/rest/sendevent --data-urlencode params={"name":"test"}
What’s next?
-
Find out how to fetch parameters with Placeholders
-
See how to use Conditions and Iterations
-
Read how to integrate your Custom Scripts
-
Learn how to create your custom Add-Ons
-
Check how to handle Custom Responses