OpenAPI definitions for vCloud's Rest API.
These can be used to generate libraries for interacting with vCloud from any mainstream programming langauge.
OpenAPI definitions are sometimes known by their previous name of Swagger specifications.
vCloud Director 10.2.2 Rest API
Other versions: see top level folder
In general, clients can be generated by running an openapi-generator command similar to:
openapi-generator generate -i 'https://raw.githubusercontent.com/ccouzens/vcloud-rest-openapi/main/35.2.json' -g 'typescript-axios' -o 'src/vcloud-client'
This is a repository of OpenAPI definitions for vCloud's Rest API. They are automatically generated from the public documentation to reduce human error, reduce human effort and to make it easy to stay up-to date.
vCloud Director has an official OpenAPI, but it contains little of the functionality of the Rest API.
Some of the documentation
instructs the user to follow link
attributes in the responses and not to
create href
s manually. This is incompatible with OpenAPI and contradicts other
official documentation that lists out paths within the API. This definition uses
predefined paths.
VMware Cloud Director Rest API supports responses and requests as both JSON and XML. But only XML is officially documented by VMWare. JSON is better suited for OpenAPI and modern usage. The mapping from XML to JSON is predictable.
Types are documented by VMware in XSD (XML Schema Definition). XSD is a complicated format. It supports lots of concepts and it has multiple ways of expressing a single concept. There are edge cases where I've not yet incorporated an XSD concept.
Each API version has a zip file containing documentation about it on the vmware website. The zip file is downloaded and passed into a Rust program that extracts various information like responses, requests and paths. This program then generates a JSON OpenAPI definition.
If you find an issue, tell me about it using Github and I shall try and address it.
The transformer (code that does the converting of the published documentation to OpenAPI) is MIT Licensed.
I've assigned the copyright of the OpenAPI definitions to VMware as they are derived from their documentation.
It may be useful to see what has changed between two versions. The key to getting a useful diff is to mask the version number in the content header. The following command lines are useful for seeing the differences between versions:
# If the repository is downloaded
diff -U20 --color=always \
<(< 36.0.json sed -r 's/version=[0-9.]+/version=xx.x/') \
<(< 36.3.json sed -r 's/version=[0-9.]+/version=xx.x/') \
| less -R
# If the repository has not been downloaded
diff -U20 --color=always \
<(
curl -s https://raw.githubusercontent.com/ccouzens/vcloud-rest-openapi/main/36.0.json \
| sed -r 's/version=[0-9.]+/version=xx.x/'
) \
<(
curl -s https://raw.githubusercontent.com/ccouzens/vcloud-rest-openapi/main/36.3.json \
| sed -r 's/version=[0-9.]+/version=xx.x/'
) \
| less -R
Unable to compile Java openapi client#3
The temporary workaround:
-
Copy patch scripts fix-vcd-type-discriminator_01.sed and fix-vcd-type-discriminator_02.sed to the root project directory
-
Clean up the codegenerated client :
rm -rf <output directory>
- Run the script from the root project directory:
find ./<output directory> -regex '.*\(Type\|Value\)\.java' -exec grep -H 'String JSON_PROPERTY_TYPE = "_type"' {} \; -exec sed -ri -f ./fix-vcd-type-discriminator_01.sed {} \; && find ./<output directory>/ -regex '.*\(Type\|Value\)\.java' -exec grep -H 'extends .*\(Type\|Value\)' {} \; -exec sed -ri -f ./fix-vcd-type-discriminator_02.sed {} \;