OVA/OVF as a Service in Aria Automation using new Deployment Overview

By | 21. June 2024

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!

print
Christian Ferber
Category: Aria Automation Cloud Management Uncategorized Tags: , , ,

About Christian Ferber

Christian has joined VMware in July 2015 as Senior Systems Engineer Cloud Management. Through his work in various cloud projects before and at VMware he has gained experience in datacenter, server, storage, networking and cloud management technologies. Today his primary focus is on automation and operation topics with integration into many surrounding solutions like containers, configuration management, directory services and others. He is responsible for the management components in the VMware Cloud Foundation (VCF) product family for enterprise customers in Germany.

3 thoughts on “OVA/OVF as a Service in Aria Automation using new Deployment Overview

  1. V.Z.

    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.

    Reply
    1. Christian Ferber Post author

      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.

      Reply
      1. V.Z.

        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!

        Reply

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.