CloudCenter 4.8 has reached End of Life (EOL) as of November 14, 2018. See End of Support Notices for additional context.

Deployment Workflow Callout Scripts


At various stages in the deployment lifecycle of VMs, The CloudCenter platform supports the ability to control the behavior of the provisioning process. The different lifecycle points where the behavior can be controlled are called topics. The behavior is controlled by scripts via callouts that are assigned to topics. A common use case for callouts is to query an IPAM tool during the IP Address Management (IPAM) topic to get an IP address and during the IP shutdown topic (ipamDealloc) to de-allocate the IP address. See the Infoblox integration page for an example of implementing this use-case.

Callouts are configured on a per-CCO basis and apply to each VM provisioned from that CCO. If different behaviors are required, use control logic (if/then/case) from inside the callout script.

Each callout script:

  • Uses the same parameters and incoming variables.

  • Exposes a different variable and is mutually exclusive – you can execute any script when required.

  • Has access (when executed from the CloudCenter platform) to a wide variety of environment variables, including cloud type, deployment environment, and so forth.

    A full list is available in the callout script log at /usr/local/osmosix/callout/<name>/logs/<timestamp>

  • Consists of two key parts – a configuration file (callout.conf) and the script to be executed. Place these files in the /usr/local/osmosix/callout/<script topic>/<files> path on the CCO. The name of the sub-folder that you use is arbitrary, but a best-practice is to use the name of the topic for that callout. For example:


As part of the security hardening implementation, all callout scripts are executed as cliqruser.

Existing callout scripts continue to work without any change – if you encounter a failure, be sure to verify the following items:

Callout AccessDependency
Workspace permissionchown –R cliqruser:cliqruser /usr/local/osmosix/callout
Scripts shebang line
  • Bash:
  • Python:
cliqruser privilege
  • Ability to read/write to files/directories used within the scripts

  • Ability to issue any command used within the scripts

Supported Callout Topics

Each of these scripts are explained in the sections below.

Use the table of contents above to link directly to each script explanation.

Script TopicFolderCallout Script fileDescriptionSupported Clouds


Called before each node is launched.

This script is provided (injected into the script) all the name variables (name of application, name of tier, image selected) for each job.

AzureRM, OpenStack, VMware,  AWS, Google (effective CloudCenter 4.8.1), and Alibaba

See VM (Node) Name Config for additional details on the supported callouts for the supported clouds.

 VMware Nuances

The Hostname Callout option in the Instance Naming Strategy dropdown sets the osHostname and vmName inside the guest OS. These two settings are the same:

  • As the vCenter settings
  • For Linux (CentOS7).
 Amazon Nuances

The Hostname Callout option in the Instance Naming Strategy dropdown sets the osHostname and vmName inside the guest OS.These two settings are the same for both Windows and Linux.

 Alibaba Nuances

You cannot use the hyphen character anywhere in the string for both Windows and Linux instances.



Network and OS-specific configuration

OpenStack, VMware, Google (effective CloudCenter 4.8.1), and AWS.

 VMware Nuances

The osHostname setting:

  • Is not mandatory for IPAM callouts.
  • Only works for Windows.
  • The Linux setting is overwritten by the vmNaming setting.
 Amazon Nuances

CloudCenter uses the IP address, network, and mask to set the DHCP scope in the specified subnet.



Called just before a node is destroyed

OpenStack, VMware, and AWS.

Effective CloudCenter, the CloudCenter platform correctly reinjects the environment variables and output from the IPAM callout script to the ipamDealloc callout script.

Supported Attributes for callout.conf files

This callout script supports standard Java property file format, using <key>=<value>, each on a separate line. See the following callout.conf file examples for all three topics:

  • topic=vmNaming

    [root@centos7-base ipam]# cat ../vmnaming/callout.conf

  • topic=ipam

    [root@centos7-base ipam]# cat callout.conf

  • topic=ipamDealloc

    [root@centos7-base ipam]# cat ../ipamDealloc/callout.conf

Environment Variables for Callout Scripts

The Callout script accepts environment variables as input parameters. The list of variables depends on the node type. The following table provides a sample:


 Sample Values or Type


Linux, Windows


A string passed by the vmNaming module or auto-generated by the CloudCenter platform


An integer to identify the application VM (only)


An integer to identify the User ID of the person launching the script/module


A string to identify the user name of the person launching the script/module

All job application settings for application VMs are also available as eNV variables. See CloudCenter-Defined Parameters  for additional context.

Best Practice

Turn on the debug level and check the debug logs (see Locate Log Files) to view a list of all available input variables.

Configure Each Callout Script

Configure each script separately in a callout.conf file.

You can configure the each of these callout scripts at the region level, not at the tenant level, on a per-CCO basis. The following example depicts the configuration procedure to add the vmNaming callout script.

If you make changes to the callouts or attributes for a Cloud Region, you must restart the CCO for the changes to take effect.

The callout scripts reside in the /usr/local/osmosix/callout/callout_name/ folder, where callout_name is the name of the corresponding callout.

To add a callout script, follow this process.

  1. Create the following directory on the CCO:

  2. Create the following file in this directory:

  3. Create a file for the script:

    /usr/local/osmosix/callout/vmnaming/<script name>
  4. Ensure to execute permissions:

    chmod 777 <script>
  5. Reference this file in the callout.conf file.

The vmNaming Callout Script

The supported environment variables for the vmNaming script: 

VariableSample value or type
eNV_JOB_IDinteger (application VM only)

The supported key for the vmNaming script:

CloudCenter-Required KeyDescription 
vmNameName of the VM

A sample VM naming callout script output:

echo "vmName='$(uuidgen | fold -w 8 | head -1)'"

The vmName should not exceed 15 characters for a Windows OS.

This script allows you to change the name of the VM. See VM (Node) Name Config to rename the VM using one of the supported clouds (see table above).

The IPAM Callout Script

You will ALSO need to enable the region for the IPAM Naming Strategy as identified in the Region-Level Cloud Settings > Instance IPAM Strategy section.

As part of the integration, create a IPAM module and include the dynamically-invoked callout script when launching the CCO. The module can be dynamically loaded/reloaded (auto-load) or loaded at CCO start-up time. By default, auto-load is disabled.

The IPAM module's callout script includes (but is not restricted to) the following parameters:

  • DNS server list
  • DNS suffix list
  • Number of vNIC
  • Number of vNIC’s IP address
  • Numbers of vNIC’s netmask
  • VM name

Once the script is executed, all deployments for that cloud discover IP addresses managed by the IPAM module.

The IPAM callout script options are supported for VMware and OpenStack.

 Amazon Nuances

CloudCenter uses the IP address, network, and mask to set the DHCP scope in the specified subnet.

The callout script path is /usr/local/osmosix/callout, where each module is a sub-folder under the script path.


eNV_NumTasks="1" eNV_UseBatchTaskList="0" 

Supported Properties

The multiple key-value pair that is output for each callout script. 




CloudCenter 4.8.0/
4.8.1 and later


The OS hostname


Not supported for AWS and OpenStack.


DNS  server list (comma separated)


DNS Suffix list (comma separated)


The number of virtual NICs (vNICs)

The IPAM script is executed once for every NIC. If the VM has n NICs, the same IPAM script is triggered n times.

Users must ensure to add the required logic to ensure that a new IP address is used for each NIC.


The nicCount implies the number of IP addresses. If the nicCount is set to more than 1, then a new IP address must be set for each NIC.


Nth vNIC’s IP address


Set on a per-NIC basis. A new IP address must be set for each vNIC.


Nth vNIC’s netmask


Set on a per-NIC basis. A new netmask must be set for each vNIC.


Nth vNIC’s gateway (CCO) IP address


Set on a per-NIC basis. A new gateway must be set for each vNIC.


Set on a per-NIC basis. A new gateway must be set for each vNIC.


Nth vNIC’s DNS server list (comma separated)



As part of the IPAM script, provide dummy values for nicIP_n and nicDnsServerList_n. However, these values are overwritten by the DHCP settings.

Yes, if using IPAM callout and the addressing is assigned to use DHCP.


This property is supported if the reinject setting is true

Example: myCustomParam=myValue

If the VM configuration includes multiple NICs, then the CloudCenter platform makes one IPAM call per NIC. You can also assign multiple IPs to each NIC by using keys with _n  suffix as described earlier.

OS-Specific IPAM Properties

The multiple key-value pair that is output for each callout script.

 OS Properties




timezoneSupported for VMware.

Not supported for AWS and OpenStack.

Not usedYes


Not used

The Windows Index ID for this time zone.

For Windows-specific VMware IPAM config scripts, be aware that you may only see the changes in effect after the deployment has been completed for an undetermined period of time.

AWS: No effect as instance timing is internally managed.



Not required

The name of the Admin user



Not required

The name of the organization (string)



Not required 

The Windows product key



Not required

The Admin password



Not used

A true or false value for the Microsoft SID

You must set the changeSid option to true.



Not used

A true or false value. 



Not used

Reserved name holder for arbitrary property



Not used

Reserved value holder for arbitrary property


custSpec (see the VMware Customization Spec section below)The Guest Customization Specification name in VMwareThe Guest Customization Specification name in VMwareNo

Not supported for VMware and OpenStack.

AWS: No effect, as the clock is internally managed.

Not supported for VMware and OpenStack.

AWS: No effect, as the clock is internally managed.



Linux domain name

If you do not specify the domainName, the CloudCenter platform sets it to the  default value, mydomain.

Be sure to provide this value if you do not want to use the default mydomain value.

Not supported for AWS and OpenStack.

Used to automatically join a domain



Not used

Used to automatically joining a domain


Not used

Used to automatically joining a domain


Not used

The workgroup in which to place the VM.

If any of the 3 domain values are missing, the workgroup key is required.

If all three domain values are present, the workgroup is not required.

Windows-Specific Example
echo "setAdminPassword=abcd"
echo "timeZoneId=10 *"
echo "fullName=Enterprise ABCD"
echo "organization=ABCD"
echo "productKey=..."
echo "changeSid=true"

VMware Customization Spec

VMware's  OS customization Spec feature allows you to configure network settings in vSphere (the VMware console). The CloudCenter platform allows you to specify the name of the Customization Spec (already created on the VMware vShpere console), in the IPAM callout script. To specify this spec, select IPAM Callout in the Instance IPAM Strategy field.

If you set the VMware IPAM strategy as IPAM Callout, you have multiple options.

  • Use it to indicate the IPAM Callout in the table above and the CloudCenter platform completes the Static or Dynamic IP configuration.
  • Specify the Name of the Customization Spec in the Callout script.
    • If the CloudCenter platform detects the value in the custSpec key, then it ignores all other settings.
    • To specify the Name of the Customization Spec in the Callout script, ensure that the IPAM Callout script contains the following key-value pair:

      custSpec=<name of the os customization spec>
      # This value must already be present on VMware vShpere. 
      # This value must already be accessible to the CloudCenter administrator.

Alternate Windows Guest OS Customization

The information in this section only applies to VMware vSphere if using CloudCenter or and later on a Windows platform.

This feature is not available in CloudCenter 4.8.1 or

Windows IPAM optimization allows you to skip the SysPrep execution for Windows deployments. SysPrep is a tool that is executed to customize Windows deployments.

In prior CloudCenter releases, running SysPrep to customize Windows slowed down deployments. You can bypass the SysPrep by providing only IPAM properties in the corresponding callout. 

The SysPrep process will be triggered even if one of the properties in the following table are returned by the callout script.

OS-Specific IPAM Properties*

Each of these properties is described in the OS-Specific Properties section that is listed earlier in this section.

Sample IPAM Callout Script

The following script applies for both single NIC scenarios and for multiple NICs scenarios – the script runs for every NIC, ensure that a different IP address is generated for each NIC to avoid any IP conflict.
echo "DnsServerList=,"
echo "nicCount=1"
echo "nicIP_0="
echo "nicDnsServerList_0=,"
echo "nicGateway_0="
echo "nicNetmask_0="

echo ""
echo "hwClockUTC=true"
echo "timeZone=Canada/Eastern"
echo "osHostname=testhost1"

The ipamDealloc Callout Script

The ipamDealloc script allows you to cleanup your environment and only works with custom property supported by reinject setting.

ipamDealloc Example:
./ $IP

The CloudCenter platform does not look for any output from this script as it is just a notification.

Sample Callout Workflow

Sample IPAM Callout
import infoblox, sys, requests, os, random

#Assign command line arguments to named variables
hostname = os.environ['vmNaming']
domain = ""
fqdn = hostname + "." + domain
network = "" #sys.argv[2]
netmask = ""
gateway = ""
dns_server = ","

#Setup connection object for Infoblox
iba_api = infoblox.Infoblox('', 'admin', 'infoblox', '1.4', 
iba_dns_view='VM-view', iba_network_view='default', iba_verify_ssl=False)

	#Create new host record with supplied network and fqdn arguments
	ip = iba_api.create_host_record(network, fqdn)
	print "DnsServerList="+dns_server
	print "nicCount=1"
	print "nicIP_0=" + ip
	print "nicDnsServerList_0="+dns_server
	print "nicGateway_0="+gateway
	print "nicNetmask_0="+netmask
	print "domainName="+domain
	print "HWClockUTC=true"
	print "timeZone=Canada/Eastern"
	print "osHostname="+hostname
	print "infobloxFQDN="+fqdn
except Exception as e:
	print e
© 2017-2019 Cisco Systems, Inc. All rights reserved