The service catalog of Aria Automation can contain services of all flavors from classic virtual machines up to network services. One common ask from customers is to provide services for OVA/OVF appliances which can be requested by the consumer. Those appliances usually are purpose-built and do have specific parameters required for the deployment. Also, they don’t leverage the vCenter customization spec and are provisioned without modification as they are coming from the vendor of choice.
There’s a number of example use cases for this purpose:
- VMware appliances used for testing processes
- Integration of 3rd party appliances
- Provisioning of functional appliances like network services
- Bitnami catalog services e.g. for middleware
In this blog I will walk through the process of how to create a service for an Aria Operations OVA appliance. The same process can be applied for the other mentioned use cases as well.
Architecture
From an architectural perspective there is not too much difference compared to a standard catalog entry. One item required in addition is a web server which is hosting the OVA/OVF image. This can be any externally hosted web server (e.g. a Linux server with httpd enabled). It can run in the datacenter or if the connectivity is provided it could also be run somewhere on the internet (e.g. bitnami resource).
The reference to the desired image is provided through an image mapping which will be covered in the next section.
Image mapping configuration
An image mapping typically is used to refer to a vCenter template for virtual machines allowing the admin to abstract the image itself for the consumer and map one image to multiple locations.
You can use the image mapping documentation for more details on it. The documentation includes a small abstract about OVF/OVA usage but is not going into a lot of details.
For the Aria Operations use case you might want to create multiple image mappings where each refers to a specific version of Aria Operations, like shown in this screenshot:
The image mapping itself includes a name and the reference to the OVA image in the related datacenter. You could even add more references if you have multiple datacenters that serve their image for a local web server.
To use the OVA/OVF image you simply put the URL to download it in the “image” selection field.
If the image is accessible, it automatically retrieves the OVF properties by clicking on the small symbol shown in the screenshot. The properties are relevant as you want to populate them automatically by Aria Automation – usually with dynamic values. You can now copy single properties or all properties by the “copy all properties” button. Usually, you will copy all properties and put them in a cloud template as per below. Those that are not required can be left empty, however you have all property options in the cloud template for later reference.
In addition, a network will be added typically to the canvas to make sure the deployed VM will land in the proper network zone.
Hint: Make sure not using a hyphen “-“ in the network name as the auto-completion for variable references will not work properly in this case.
Flavor mapping configuration
To allow deployment of the available VM sizes, flavor mappings can be used. This part is optional as you can also hard code the size in the cloud template to allow the user selecting CPU and memory values. As there are pre-defined sizes for Aria Operations available, flavor mapping is a valid option. In this case I added all the pre-defined sizes of Aria Operations to the flavor mappings and referenced them from the cloud template.
Create a cloud template
As next step you create a new cloud template in the Aria Automation Assembler and drag a vSphere machine to it.
For “image” parameter you can select the desired image mapping. The previously copied OVF parameters can be directly pasted. Just make sure you are using the proper indentations.
For CPU/memory settings they must be replaced by “flavor” if flavor mappings shall be used. Going forward you just must select the flavor mapping we created before.
As next step the values of the mandatory property fields must be populated. In theory, fixed values could be used, but that would limit scalability. So, you want to use variables as parameter values. While all possible variables of the cloud template specification can be leveraged, likely there will be a lot of focus on network related properties.
To identify which network properties can be used, just start typing with “${resources.”, select the network resource and add a dot afterwards. This should expose the context menu that offers all available parameters. As mentioned before this won’t work if you are using a hyphen in the network name.
I copied a fully populated cloud template below which you can use as reference.
formatVersion: 1
inputs:
ariaopsname:
type: string
title: VM name
description: name will be appended by domain name of network
ariaopsversion:
type: string
title: Aria Operations Version
enum:
- Aria Operations 8.17.1
- Aria Operations 8.16.1
ariaopssize:
type: string
title: Node Size
enum:
- EXTRA SMALL (2 CPU / 8 GB RAM)
- SMALL (4 CPU / 16 GB RAM)
- MEDIUM (8 CPU / 32 GB RAM)
- LARGE (16 CPU / 48GB RAM)
- EXTRA LARGE (24 CPU / 128 GB RAM)
resources:
Aria_Operations:
type: Cloud.vSphere.Machine
properties:
image: Aria Operations 8.17.1
flavor: EXTRA SMALL (2 CPU / 8 GB RAM)
allocatePerInstance: null
ovfProperties:
- key: DNS.VMware_Aria_Operations
value: ${resource.cloud_network.DNS}
- key: domain.VMware_Aria_Operations
value: ${input.ariaopsname}.${resource.cloud_network.domain}
- key: enableFIPS
value: "False"
- key: forceIpv6.VMware_Aria_Operations
value: "False"
- key: ipv4_address.VMware_Aria_Operations
value: ${self.networks[0].address}
- key: ipv4_gateway.VMware_Aria_Operations
value: ${resource.cloud_network.gateway}
- key: ipv4_netmask.VMware_Aria_Operations
value: ${resource.cloud_network.netmask}
- key: ipv4_type.VMware_Aria_Operations
value: Static
- key: ipv6_address.VMware_Aria_Operations
value: ""
- key: ipv6_gateway.VMware_Aria_Operations
value: ""
- key: ipv6_netmask.VMware_Aria_Operations
value: ""
- key: ipv6_type.VMware_Aria_Operations
value: DHCP/Slaac
- key: searchpath.VMware_Aria_Operations
value: ${resource.cloud_network.dnsSearchDomains[0]}
- key: timezone
value: Europe/Berlin
networks:
- network: ${resource["cloud_network"].id}
cloud_network:
type: Cloud.vSphere.Network
properties:
networkType: existing
Overview page
Aria Automation 8.17 exposes a new functionality which is beneficial for OVA/OVF deployments as well. It provides the capability to add an “overview” tab for deployments that contains information about the deployed service including variable references like links.
This makes it a lot easier for the consumer to access the service without having to retrieve e.g. IP data from the deployment details. Also, it provides the capability to add a more detailed definition of the service and maybe some hints that are required for successful operation.
If you want to add this functionality, make sure your Aria Automation version is on 8.17 or higher. This version introduces a new “format version” 2 of the cloud template that allows adding the “output” section.
Find there a complete cloud template incl. output section:
formatVersion: 2
outputs:
__deploymentOverview:
value: |-
## ${input.ariaopsversion}
Aria Operations is an appliance-based solution to do operational management for your infrastructure and beyond.
### Access
To access Aria Operations Appliance please use below URL
https://${input.ariaopsname}.${resource.cloud_network.domain}
OR through IP
https://${resource.Aria_Operations.networks[0].address}
### Configuration
This installation has following resources:
${input.ariaopssize}
inputs:
ariaopsname:
type: string
title: VM name
description: name will be appended by domain name of network
ariaopsversion:
type: string
title: Aria Operations Version
enum:
- Aria Operations 8.17.1
- Aria Operations 8.16.1
ariaopssize:
type: string
title: Node Size
enum:
- EXTRA SMALL (2 CPU / 8 GB RAM)
- SMALL (4 CPU / 16 GB RAM)
- MEDIUM (8 CPU / 32 GB RAM)
- LARGE (16 CPU / 48GB RAM)
- EXTRA LARGE (24 CPU / 128 GB RAM)
resources:
Aria_Operations:
type: Cloud.vSphere.Machine
properties:
image: Aria Operations 8.17.1
flavor: EXTRA SMALL (2 CPU / 8 GB RAM)
allocatePerInstance: null
ovfProperties:
- key: DNS.VMware_Aria_Operations
value: ${resource.cloud_network.DNS}
- key: domain.VMware_Aria_Operations
value: ${input.ariaopsname}.${resource.cloud_network.domain}
- key: enableFIPS
value: "False"
- key: forceIpv6.VMware_Aria_Operations
value: "False"
- key: ipv4_address.VMware_Aria_Operations
value: ${self.networks[0].address}
- key: ipv4_gateway.VMware_Aria_Operations
value: ${resource.cloud_network.gateway}
- key: ipv4_netmask.VMware_Aria_Operations
value: ${resource.cloud_network.netmask}
- key: ipv4_type.VMware_Aria_Operations
value: Static
- key: ipv6_address.VMware_Aria_Operations
value: ""
- key: ipv6_gateway.VMware_Aria_Operations
value: ""
- key: ipv6_netmask.VMware_Aria_Operations
value: ""
- key: ipv6_type.VMware_Aria_Operations
value: DHCP/Slaac
- key: searchpath.VMware_Aria_Operations
value: ${resource.cloud_network.dnsSearchDomains[0]}
- key: timezone
value: Europe/Berlin
networks:
- network: ${resource["cloud_network"].id}
cloud_network:
type: Cloud.vSphere.Network
properties:
networkType: existing
Requesting the OVA service
If all configuration is correct and the cloud template has been released to the Service Broker, you should be able to request an Aria Operations appliance from the catalog.
Have fun!
- 1-node Kubernetes Template for CentOS Stream 9 in VCF Automation - 30. September 2024
- Aria Automation custom resources with dynamic types - 9. August 2024
- Database-as-a-Service with Data Services Manager and Aria Automation - 4. July 2024
Very interesting blog post, especially the part about the overview page! Thank you!
Can you provide a sample on how to iterate over deployment resources like vSphere VMs in markdown with a for loop and show the name and IP address?
I’m struggling with it right now.
Thanks for the feedback!
Unfortunately I don’t have a related workflow at hand, but it sounds like a pure REST parser filling an array.
Hi Christian, I thought of something like this for the Deployment Overview Markdown:
outputs:
__deploymentOverview:
value: |
%{for vm in resource.vSphere_VM[*]}
${vm.name}
%{endfor}
resources:
vSphere_VM:
type: Cloud.vSphere.Machine
allocatePerInstance: true
properties:
count: 5
[…]
The syntax is marked with the error: Cannot read field “parentResource” because “resource” is null
This could be a bug so I either wait for the next release or open a case.
Best regard!