Template language and variables

Available since: version 6.1

The following variables are available to be used in “text” OS Template assets, with the “Advanced” template type.

Note that MetalSoft provides most of the templates already so their manual creation is not necessary in most situations. Refer to Managing OS templates for more details.

The template language uses the Nunjucks language which is a subset of “Jinjia2” language which is used by many solutions. Refer to the Nunjucks documentation for a complete reference of the language capabilities.

This template language is currently only used for OS templates but will be implemented for Switch provisioning as well as Workflows in the future.

Example usage

The variables are accessed in blocks such as this one:

 {% for interface in network_configuration.interfaces. %}
    {% for address in interface.ipv4_addresses  %}
      address: {{address.ip}}
      netmask: {{address.netmask}}
      gateway: {{address.gateway}}
  {% endfor %}

For a real world example of this in action see This template.

You can also directly access variables using the full path for a simpler scenarios:

{{network_configuration.interfaces[0].ipv4_addresses[0].ip}}

Reference

Refer to Template Variables Object Schema for a detailed description of the fields.

Example objects and their content

The following are examples of objects and how they are populated.

{
  "site": {
    "id": 1,
    "slug": "reading-uk",
    "name": "Reading, UK"
  },
  "siteConfig": {
    "repoURL": "string",
    "dnsZoneId": 5,
    "dnsZoneName": "example.com",
    "DNSServers": [
      "string"
    ],
    "NTPServers": [
      "string"
    ]
  },
  "server": {
    "serverId": 0,
    "serverTypeId": 0,
    "serverUUID": "string",
    "serialNumber": "string",
    "managementAddress": "string",
    "username": "string",
    "passwordEncrypted": "string",
    "diskCount": 0,
    "bmcMacAddress": "string",
    "vendor": "Unknown",
    "vendorSkuId": "string",
    "model": "string",
    "rackName": "string",
    "gpuCount": 0,
    "gpuInfo": [
      {
        "model": "string",
        "vendor": "string"
      }
    ],
    "interfaces": [
      {
        "serverInterfaceId": 0,
        "serverId": 0,
        "macAddress": "string",
        "index": 0,
        "switchPortId": "string",
        "switchHostname": "string",
        "capacityMbps": 0,
        "addOnMac": "string",
        "addOnType": "hba",
        "addOnInfo": {},
        "pxeEnabled": 0,
        "supportsIscsiBoot": 0,
        "fibreChannelWwpn": "string",
        "description": "string",
        "aliasIndex": 0,
        "osInfo": "not_tested",
        "networkDevice": {},
        "networkDeviceInterface": {},
        "ipv4Addresses": [
          "192.168.1.1",
          "192.168.1.2"
        ],
        "ipv6Addresses": [
          "2001:db8::1",
          "2001:db8::2"
        ],
        "vlanId": 0,
        "defaultFabricId": 0,
        "redundancyGroupIndex": 0
      }
    ],
    "disks": [
      {
        "id": 0,
        "serverId": 0,
        "model": "string",
        "diskSizeGb": 0,
        "serial": "string",
        "vendor": "string",
        "status": "installed",
        "type": "none",
        "serverStorageControllerId": 0
      }
    ],
    "storageControllers": [
      {
        "id": 0,
        "serverId": 0,
        "name": "string",
        "label": "string",
        "description": "string",
        "options": {
          "raidTypesSupported": [
            "RAID0",
            "RAID1",
            "RAID5",
            "RAID10"
          ],
          "controllerModesSupported": [
            "HBA",
            "RAID"
          ]
        },
        "mode": "HBA"
      }
    ],
    "tags": [
      "string"
    ]
  },
  "serverInstance": {
    "id": 1,
    "label": "string",
    "fqdn": "string",
    "customVariables": {},
    "customStorageProfile": {
      "controllers": [
        {
          "id": "RAID-1.1",
          "mode": "RAID",
          "volumes": [
            {
              "controllerName": "string",
              "volumeName": "string",
              "diskSizeGb": 0,
              "diskType": "none",
              "diskCount": 0,
              "raidType": "raid0"
            }
          ]
        }
      ]
    },
    "isVmInstance": 0,
    "isEndpointInstance": 0,
    "provisionInstanceDnsRecords": true,
    "hostname": "my-custom-hostname",
    "osCredentials": {
      "initialUser": "string",
      "initialPasswordEncrypted": "string"
    },
    "initiatorNqn": "string",
    "iscsiInitiatorIqn": "string",
    "iscsiInitiatorUsername": "string",
    "iscsiInitiatorPasswordEncrypted": "string"
  },
  "serverInstanceGroup": {
    "id": 1,
    "label": "string",
    "subdomainPermanent": "string",
    "serverGroupName": "server-instance-group-name",
    "customVariables": {},
    "isVmGroup": 0,
    "isEndpointInstanceGroup": 0
  },
  "infrastructure": {
    "label": "string",
    "customVariables": {}
  },
  "driveGroups": [
    {
      "label": "string",
      "infrastructureId": 0,
      "templateId": 1,
      "driveSizeMbDefault": 0,
      "serverInstanceGroupId": 1,
      "expandWithServerInstanceGroup": 1,
      "qoS": "string",
      "storageType": "iscsi_ssd",
      "filesystemInfo": {},
      "subdomain": "string",
      "updatedTimestamp": "string",
      "id": 0,
      "revision": 0,
      "extensionInstanceId": 1,
      "containerClusterId": 1,
      "serviceStatus": "ordered",
      "subdomainPermanent": "string",
      "dnsSubdomainId": 0,
      "dnsSubdomainPermanentId": 0,
      "allocationAffinity": "same_storage",
      "config": {
        "revision": 0,
        "label": "string",
        "infrastructureId": 0,
        "templateId": 1,
        "driveSizeMbDefault": 0,
        "serverInstanceGroupId": 1,
        "expandWithServerInstanceGroup": 1,
        "qoS": "string",
        "storageType": "iscsi_ssd",
        "filesystemInfo": {},
        "subdomain": "string",
        "updatedTimestamp": "string",
        "dnsSubdomainChangeId": 0,
        "deployType": "create",
        "deployStatus": "not_started",
        "infrastructureDeployId": 0
      },
      "createdTimestamp": "string"
    }
  ],
  "drives": [
    {
      "label": "string",
      "groupId": 1,
      "instanceId": 1,
      "storagePoolId": 0,
      "sizeMb": 0,
      "storageImageName": "string",
      "iscsiIndexHex": "string",
      "templateId": 1,
      "osAdminUsername": "string",
      "osAdminPasswordEncrypted": "string",
      "storageType": "iscsi_ssd",
      "subdomain": "string",
      "updatedTimestamp": "string",
      "sshPort": 0,
      "operatingSystemInfo": {},
      "filesystemInfo": {},
      "id": 0,
      "revision": 0,
      "infrastructureId": 0,
      "infrastructure": {
        "userIdOwner": 0,
        "id": 1
      },
      "serviceStatus": "ordered",
      "storageRealSizeCachedMb": 0,
      "storageRealSizeWithSnapshotsCachedMb": 0,
      "storageVirtualSizeCachedMb": 0,
      "storageUpdatedTimestamp": "string",
      "targets": [
        {}
      ],
      "clusterCustomInfo": {},
      "sshKeyPairInternalEncrypted": {},
      "wwn": "string",
      "provisioningProtocol": "iSCSI",
      "subdomainPermanent": "string",
      "dnsSubdomainId": 0,
      "dnsSubdomainPermanentId": 0,
      "networkVlanId": 0,
      "config": {
        "revision": 0,
        "label": "string",
        "groupId": 1,
        "instanceId": 1,
        "storagePoolId": 0,
        "sizeMb": 0,
        "storageImageName": "string",
        "iscsiIndexHex": "string",
        "templateId": 1,
        "osAdminUsername": "string",
        "osAdminPasswordEncrypted": "string",
        "storageType": "iscsi_ssd",
        "subdomain": "string",
        "updatedTimestamp": "string",
        "sshPort": 0,
        "operatingSystemInfo": {},
        "filesystemInfo": {},
        "dnsSubdomainChangeId": 0,
        "deployType": "create",
        "deployStatus": "not_started",
        "infrastructureDeployId": 0
      },
      "createdTimestamp": "string"
    }
  ],
  "fileShares": [
    {
      "sizeGB": 0,
      "updatedTimestamp": "string",
      "storagePoolId": 0,
      "label": "string",
      "subdomain": "string",
      "logicalNetworkId": 0,
      "id": 0,
      "revision": 0,
      "infrastructureId": 0,
      "infrastructure": {
        "userIdOwner": 0,
        "id": 1
      },
      "createdTimestamp": "string",
      "serviceStatus": "ordered",
      "subdomainPermanent": "string",
      "dnsSubdomainId": 0,
      "networkVlanId": 0,
      "endpoint": "string",
      "config": {
        "revision": 0,
        "sizeGB": 0,
        "updatedTimestamp": "string",
        "storagePoolId": 0,
        "label": "string",
        "subdomain": "string",
        "dnsSubdomainChangeId": 0,
        "deployType": "create",
        "deployStatus": "not_started",
        "infrastructureDeployId": 0,
        "logicalNetworkId": 0
      }
    }
  ],
  "buckets": [
    {
      "sizeGB": 0,
      "updatedTimestamp": "string",
      "storagePoolId": 0,
      "label": "string",
      "subdomain": "string",
      "logicalNetworkId": 0,
      "id": 0,
      "revision": 0,
      "infrastructureId": 0,
      "infrastructure": {
        "userIdOwner": 0,
        "id": 1
      },
      "createdTimestamp": "string",
      "serviceStatus": "ordered",
      "subdomainPermanent": "string",
      "dnsSubdomainId": 0,
      "endpoint": "string",
      "accessKeyId": "string",
      "secretKeyEncrypted": "string",
      "config": {
        "revision": 0,
        "sizeGB": 0,
        "updatedTimestamp": "string",
        "storagePoolId": 0,
        "label": "string",
        "subdomain": "string",
        "dnsSubdomainChangeId": 0,
        "deployType": "create",
        "deployStatus": "not_started",
        "infrastructureDeployId": 0,
        "logicalNetworkId": 0
      }
    }
  ],
  "sharedDrives": [
    {
      "label": "string",
      "storagePoolId": 0,
      "sizeMb": 0,
      "storageImageName": "string",
      "storageType": "iscsi_ssd",
      "qoS": null,
      "subdomain": "string",
      "logicalNetworkId": 0,
      "updatedTimestamp": "string",
      "id": 0,
      "revision": 0,
      "infrastructureId": 0,
      "infrastructure": {
        "userIdOwner": 0,
        "id": 1
      },
      "serviceStatus": "ordered",
      "storageRealSizeCachedMb": null,
      "storageRealSizeWithSnapshotsCachedMb": null,
      "storageVirtualSizeCachedMb": null,
      "storageUpdatedTimestamp": "string",
      "targets": [
        {}
      ],
      "wwn": null,
      "allocationAffinity": "same_storage",
      "provisioningProtocol": "iSCSI",
      "subdomainPermanent": "string",
      "dnsSubdomainId": 0,
      "dnsSubdomainPermanentId": 0,
      "config": {
        "revision": 0,
        "label": "string",
        "storagePoolId": 0,
        "sizeMb": 0,
        "storageImageName": "string",
        "storageType": "iscsi_ssd",
        "qoS": null,
        "subdomain": "string",
        "dnsSubdomainChangeId": 0,
        "deployType": "create",
        "deployStatus": "not_started",
        "infrastructureDeployId": 0,
        "logicalNetworkId": 0,
        "updatedTimestamp": "string"
      },
      "createdTimestamp": "string"
    }
  ],
  "network": [
    {
      "interfaces": [
        {
          "interfaceType": "physical",
          "logicalNetworkId": 0,
          "logicalNetworkName": "string",
          "logicalNetworkLabel": "string",
          "typeInterfaceId": 0,
          "macAddress": "string",
          "mtu": 0,
          "vlanId": 0,
          "ipv4Addresses": [
            {
              "ip": "string",
              "cidr": "string",
              "gateway": "string",
              "isDefaultGateway": true,
              "netmask": "string",
              "maskBits": 0
            }
          ],
          "ipv6Addresses": [
            {
              "ip": "string",
              "cidr": "string",
              "netmask": "string",
              "maskBits": 0
            }
          ],
          "routes": [
            {
              "to": "string",
              "via": "string"
            }
          ],
          "members": [
            {
              "id": 0,
              "interfaceType": "physical"
            }
          ],
          "links": [
            {
              "id": 0,
              "interfaceType": "physical"
            }
          ]
        }
      ]
    }
  ],
  "variables": {},
  "secrets": {},
  "userSSHKeys": [
    "string"
  ],
  "managementSSHKey": "string"
}