Custom service definitions in VMware Cloud on AWS

4 minuto de leitura
Nível de conteúdo: Intermediário

Demonstrates using the open source PyVMC project to add custom service definitions

PyVMC is an open-source Python-based command line tool for VMware Cloud on AWS. PyVMC enables users to automate the consumption of their VMware Cloud on AWS SDDC without needing to know underlying APIs.

The Services section of the VMware CSP is where you define ports and protocols for use in firewall rules. A long list of well-known entries is deployed in every SDDC.

VMC services

To make defining services easier for AWS customers, I contributed a feature allowing a customer to import a list of AWS service definitions into the Services list. Here's how it works:


The command has been added to the inventory section of PyVMC. I named it import-service. Here is the built-in help you see if you pass the -h parameter

C:\pyvmc> python .\ inventory import-service -h
usage: inventory import-service [-h] [--oauth [OAUTH]] [--nsxm [NSXM]] [-l] [-p PROVIDER_NAME] [-t] [-d]

  -h, --help            show this help message and exit
  --oauth [OAUTH]       Used to specify use of OAuth app ID and secret in config.ini instead of 'refresh_token' (default).
  --nsxm [NSXM]         Used to specify NSX Manager instead of NSX proxy (Default).
  -l, --list-providers  Display a list available providers for import - all other arguments are ignored if you use this argument
  -p PROVIDER_NAME, --provider-name PROVIDER_NAME
                        Use the named provider - providers are JSON files located in imports folder. Default is to add services, optional flag to delete
  -t, --test-only       Displays a list of the provider's services - does not modify the SDDC configuration
  -d, --delete-mode     Changes to delete mode - the services in the provider's list will be deleted from the SDDC

Listing Providers

I designed the command to be extensible. I only added an AWS provider in the initial contribution, but any community contributions are welcomed. Here is how to list the available providers:

C:\pyvmc> python .\ inventory import-service -l
| Providers |
|  aws.json |

Import test

Now I specify the aws.json provider, and I also specify -t for test mode. These are the service definitions that can be added to the Services list.

C:\pyvmc> python .\ inventory import-service -p aws.json -t

import test

Live import

I remove the -t flag and perform a live import.

C:\pyvmc> python .\ inventory import-service -p aws.json   
Importing services in provider aws.json...
Importing AWS_Directory_Service... Success
Importing AWS_EFS... Success
Importing AWS_FSX_ISCSI... Success
Importing AWS_FSX_NFS... Success
Importing AWS_FSX_WINDOWS_SMB... Success
Importing AWS_FSX_WINDOWS_WINRM... Success
Importing AWS_RDS_Aurora... Success
Importing AWS_RDS_MariaDB... Success
Importing AWS_RDS_MySQL... Success
Importing AWS_RDS_MSSQL... Success
Importing AWS_RDS_Oracle... Success
Importing AWS_RDS_Postgres... Success
Import results:

Enter image description here

The Amazon services defined in the provider are now imported into my SDDC.

imported services


I can delete the services from my SDDC with the delete switch. Note that the delete operation will fail if any of the services are in use in a firewall rule.

C:\Users\kremerpt\git\Flings\python-client-for-vmware-cloud-on-aws [development ≡]> python .\ inventory import-service -p aws.json -d
Deleting services in provider aws.json...
Deleting AWS_Directory_Service... Success
Deleting AWS_EFS... Success
Deleting AWS_FSX_ISCSI... Success
Deleting AWS_FSX_NFS... Success
Deleting AWS_FSX_WINDOWS_SMB... Success
Deleting AWS_FSX_WINDOWS_WINRM... Success
Deleting AWS_RDS_Aurora... Success
Deleting AWS_RDS_MariaDB... Success
Deleting AWS_RDS_MySQL... Success
Deleting AWS_RDS_MSSQL... Success
Deleting AWS_RDS_Oracle... Success
Deleting AWS_RDS_Postgres... Success
Delete results:

delete results


If you have any ideas for adding a new provider, or adding additional services to the AWS provider, please log a feature request in PyVMC's Github repo. Alternatively, build it yourself! Adding to this feature makes for a great first-time contribution as it doesn't require any Python knowledge. If you want to learn, I'd be happy to show you how to contribute to this project - just comment below!

profile pictureAWS
publicada há um ano684 visualizações