Maven
VCF Automation – Build Tools for VMware Aria – Overview of VCF Automation Projects

Page Contents
Build Tools for VMware Aria supports several project types. This post explains those used to manage VCF Automation and VCF Operations Orchestrator content, when to choose them and how to create them.
The available project types are:
- vRO TypeScript-based
- vRO JavaScript-based
- vRO XML-based
- vRO Mixed
- vRA 8.x
The project names use the older product acronyms:
vRA = VCF Automation
vRO = VCF Operations Orchestrator.
There are also two legacy project types, but I will not be covering these in this post.
- vRA 7.x
- vRA 7.x and vRO
Project types
The examples use the Build Tools version available when I wrote this post, set by archetypeVersion. Check the GitHub project for newer releases. I recommend using the latest version.
Create a root folder for your projects. My examples use aria-automation.
vRO TypeScript-based project
This creates a TypeScript project for Orchestrator content. It supports development features such as ECMAScript 6 syntax, module dependencies and class inheritance.
The project manages workflows, actions, configurations and resources as native TypeScript .ts files. You can maintain all of this content in one place using the same language.
This project type requires a good understanding of JavaScript and TypeScript. Consider these limitations:
- TypeScript is converted to JavaScript at build time. You cannot pull content from Orchestrator because there is no conversion back to TypeScript.
- All development must happen locally in your development environment, such as an IDE. This follows from the conversion process and the way generated JavaScript is presented in Orchestrator.
- Pushing code can take significant time because of the required Node dependencies.
- Defining types and interfaces can substantially increase initial delivery time.
If you have TypeScript experience and can work within these constraints, this project type lets you manage Orchestrator content as an application.
Create a vRO TypeScript-based project
mvn archetype:generate -DinteractiveMode=false -DarchetypeGroupId=com.vmware.pscoe.o11n.archetypes -DarchetypeArtifactId=package-typescript-archetype -DarchetypeVersion=4.7.0 -DgroupId=com.simplygeek -DartifactId=vro-ts
Set ‘groupId‘ and ‘artifactId‘ to your values.
The command creates a folder named after artifactId: vro-ts in this example.
Inside it, src has the following structure:

Additional folders can be created and referenced using the ‘Import‘ keyword within Actions and Workflows.
vRO JavaScript-based project
Orchestrator stores all content, including actions, in XML. An action is a JavaScript function wrapped in XML, which makes native development cumbersome and limits the use of modern development tools.
The JavaScript-based project lets you write actions as standard .js files. Build Tools converts them to the XML format Orchestrator requires, so you can develop in JavaScript while keeping platform compatibility.
Note that only Orchestrator Actions are supported by this project type (Workflows, Configurations and Resources are not supported).
Create a vRO JavaScript-based project
mvn archetype:generate -DinteractiveMode=false -DarchetypeGroupId=com.vmware.pscoe.o11n.archetypes -DarchetypeArtifactId=package-actions-archetype -DarchetypeVersion=4.7.0 -DgroupId=com.simplygeek -DartifactId=vro-js
Set ‘groupId‘ and ‘artifactId‘ to your values.
The command creates a folder named after artifactId: vro-js in this example. It contains a sample function at src\main\resources\com\simplygeek\vro-js. The com\simplygeek\vro-js portion comes from groupId and artifactId.

/**
* Write a brief description of the purpose of the action.
* @param {number} x - describe each parameter as in JSDoc format.
* @param {number} y - you can use different vRO types.
* @returns {number} - describe the return type as well
*/
(function (x, y) {
return x + y;
});
Use the sample folder to test pushing and pulling code. I recommend removing it after you create your own functions.
Match each action's folder structure to its Orchestrator module path. For example, myFunction in com.simplygeek becomes myFunction.js inside com/simplygeek. Use the sample function as the starting template.
Lines 1–6 contain the JSDoc block. Build Tools uses it to describe the action and define its inputs and return type. It ignores the parameters declared inside function() during this process.
vRO XML-based project
This project manages workflows, configurations and resources in Orchestrator's native XML format. It also supports actions, but wraps them in XML. I recommend JavaScript-based projects for actions instead.
Create a vRO XML-based project
mvn archetype:generate -DinteractiveMode=false -DarchetypeGroupId=com.vmware.pscoe.o11n.archetypes -DarchetypeArtifactId=package-xml-archetype -DarchetypeVersion=4.7.0 -DgroupId=com.simplygeek -DartifactId=vro-xml -DworkflowsPath=Simplygeek
- Set groupId and artifactId to your values.
- Set workflowsPath to the name or path of the root workflow folder. Do not use Library, which already exists.
You can later rename the generated folder or create one or more new folders.
The command creates a folder named after artifactId: vro-xml in this example. It includes a sample workflow at src\main\resources\Workflow\Simplygeek. The Simplygeek folder name comes from workflowsPath.
vRO Mixed project
The Mixed project is a virtual Maven project containing JavaScript-based and XML-based subprojects. One set of Maven commands or goals pushes and pulls both subprojects' content to and from Orchestrator.
The Build Tools documentation recommends this project for initially importing existing Orchestrator code. Afterwards, move the code into its respective project types and manage it there.
Create a vRO Mixed project
mvn archetype:generate -DinteractiveMode=false -DarchetypeGroupId=com.vmware.pscoe.o11n.archetypes -DarchetypeArtifactId=package-mixed-archetype -DarchetypeVersion=4.7.0 -DgroupId=com.simplygeek -DartifactId=vro-mixed -DworkflowsPath=Simplygeek
- Set groupId and artifactId to your values.
- Set workflowsPath to the name or path of the root workflow folder. Do not use Library, which already exists.
You can later rename the generated folder or create one or more new folders.
The command creates a folder named after artifactId: vro-mixed in this example. It contains actions and workflows subfolders. These are Maven projects based on package-actions-archetype and package-xml-archetype, respectively.
Each subproject uses the folder structure described above for its project type.
vRA 8.x project
The VCF Automation 8.x project type manages the following content:
- Cloud Templates (blueprints);
- Custom Forms
- Subscriptions
- Catalog Items
- Content Sources
- Property Groups
- Policies
- Catalog Entitlements
- Resource Actions
- Image / Flavor Mappings
- Storage Profiles
Create a vRA 8.x project
mvn archetype:generate -DinteractiveMode=false -DarchetypeGroupId=com.vmware.pscoe.vra-ng.archetypes -DarchetypeArtifactId=package-vra-ng-archetype -DarchetypeVersion=4.7.0 -DgroupId=com.simplygeek -DartifactId=vra-content
Set ‘groupId‘ and ‘artifactId‘ to your values.
The command creates a folder named after artifactId: vra-content in this example. Its src\main\resources directory has this structure:

The project root contains content.yaml with the following content:
blueprint:
- Volume
subscription: []
flavor-mapping:
- small
- medium
image-mapping: []
storage-profile: []
region-mapping:
cloud-account-tags:
export-tag: "env:dev"
import-tags: ["env:dev", "env:test"]
catalog-item: []
custom-resource: []
resource-action: []
catalog-entitlement: []
property-group: []
policy:
content-sharing: []
content-source: []
The lists in content.yaml select the items to push or pull, regardless of which content files exist in the project. To get started:
- Create the content in VCF Automation.
- Add those items to content.yaml.
- Pull the content into the project, where you can manage it locally.
These examples provide a starting point for each project type. Future posts will cover them in more detail.
Join the discussion
Sign in with GitHub to leave a comment. View discussions on GitHub.

