"""
Manage VMware VMC SDDC
"""
import logging
from saltext.vmware.utils import vmc_constants
from saltext.vmware.utils import vmc_request
from saltext.vmware.utils import vmc_templates
from saltext.vmware.utils import vmc_vcenter_request
log = logging.getLogger(__name__)
__virtualname__ = "vmc_sddc"
__func_alias__ = {"list_": "list"}
def __virtual__():
return __virtualname__
[docs]def list_(
hostname,
refresh_key,
authorization_host,
org_id,
include_deleted=False,
verify_ssl=True,
cert=None,
):
"""
Retrieves list of SDDCs for the given organization
Please refer the `VMC List All SDDCs documentation <https://developer.vmware.com/docs/vmc/latest/vmc/api/orgs/org/sddcs/get/>`_ to get insight of functionality and input parameters
CLI Example:
.. code-block:: bash
salt <minion id> vmc_sddc.get hostname=vmc.vmware.com ...
hostname
The host name of VMC
refresh_key
API Token of the user which is used to get the Access Token required for VMC operations
authorization_host
Hostname of the Cloud Services Platform (CSP)
org_id
The Id of organization from which SDDCs are retrieved
include_deleted: Boolean
(Optional) When true, forces the result to also include deleted SDDCs.
verify_ssl
(Optional) Option to enable/disable SSL verification. Enabled by default.
If set to False, the certificate validation is skipped.
cert
(Optional) Path to the SSL client certificate file to connect to VMC Cloud Console.
The certificate can be retrieved from browser.
"""
log.info("Retrieving the List of SDDCs for the given organization %s", org_id)
api_base_url = vmc_request.set_base_url(hostname)
api_url = "{base_url}vmc/api/orgs/{org_id}/sddcs".format(base_url=api_base_url, org_id=org_id)
params = vmc_request._filter_kwargs(
allowed_kwargs=["includeDeleted"],
includeDeleted=include_deleted,
)
return vmc_request.call_api(
method=vmc_constants.GET_REQUEST_METHOD,
url=api_url,
refresh_key=refresh_key,
authorization_host=authorization_host,
description="vmc_sddc.list_",
params=params,
verify_ssl=verify_ssl,
cert=cert,
)
[docs]def get_by_id(
hostname, refresh_key, authorization_host, org_id, sddc_id, verify_ssl=True, cert=None
):
"""
Returns a SDDC detail for the given SDDC Id
Please refer the `VMC Get SDDC documentation <https://developer.vmware.com/docs/vmc/latest/vmc/api/orgs/org/sddcs/sddc/get/>`_ to get insight of functionality and input parameters
CLI Example:
.. code-block:: bash
salt <minion id> vmc_sddc.get_by_id hostname=vmc.vmware.com sddc_id=sddc_id...
hostname
The host name of VMC
refresh_key
API Token of the user which is used to get the Access Token required for VMC operations
authorization_host
Hostname of the Cloud Services Platform (CSP)
org_id
The Id of organization to which the SDDC belongs to
sddc_id
sddc_id of the SDDC which will be retrieved
verify_ssl
(Optional) Option to enable/disable SSL verification. Enabled by default.
If set to False, the certificate validation is skipped.
cert
(Optional) Path to the SSL client certificate file to connect to VMC Cloud Console.
The certificate can be retrieved from browser.
"""
log.info("Retrieving the SDDC details for the sddc %s in the organization %s", sddc_id, org_id)
api_base_url = vmc_request.set_base_url(hostname)
api_url = "{base_url}vmc/api/orgs/{org_id}/sddcs/{sddc_id}".format(
base_url=api_base_url, org_id=org_id, sddc_id=sddc_id
)
return vmc_request.call_api(
method=vmc_constants.GET_REQUEST_METHOD,
url=api_url,
refresh_key=refresh_key,
authorization_host=authorization_host,
description="vmc_sddc.get_by_id",
verify_ssl=verify_ssl,
cert=cert,
)
[docs]def create(
hostname,
refresh_key,
authorization_host,
org_id,
sddc_name,
num_hosts,
provider,
region,
account_link_config=None,
account_link_sddc_config=None,
deployment_type=None,
host_instance_type=None,
msft_license_config=None,
sddc_id=None,
sddc_template_id=None,
sddc_type=None,
size=None,
skip_creating_vxlan=False,
sso_domain=None,
storage_capacity=None,
vpc_cidr=None,
vxlan_subnet=None,
validate_only=False,
verify_ssl=True,
cert=None,
):
"""
Create a SDDC for given org
Please refer the `VMC Create A New SDDC documentation <https://developer.vmware.com/docs/vmc/latest/vmc/api/orgs/org/sddcs/post/>`_ to get insight of functionality and input parameters
CLI Example:
.. code-block:: bash
salt <minion id> vmc_sddc.create hostname=vmc.vmware.com ...
hostname
The host name of VMC
refresh_key
API Token of the user which is used to get the Access Token required for VMC operations
authorization_host
Hostname of the Cloud Services Platform (CSP)
org_id
The Id of organization to which the SDDC belongs to
sddc_name: String
(Required) The name of SDDC that will be assigned to new created SDDC
num_hosts: Integer As Int32
(Required) Number of hosts in a SDDC
provider: String
(Required) Determines what additional properties are available based on cloud provider.
Possible values are: AWS , ZEROCLOUD
region: String
(Required) Aws region where SDDC will be deployed
account_link_config
(Optional) The account linking configuration, we will keep this one and remove accountLinkSddcConfig finally.
account_link_config expects to be passed as a dict having delay_account_link parameter
delay_account_link: Boolean
(Optional) Boolean flag identifying whether account linking should be delayed or not for the SDDC.
.. code::
{
"delay_account_link": false
}
account_link_sddc_config : List Of AccountLinkSddcConfig
(Optional) A list of the SDDC linking configurations to use.
AccountLinkSddcConfig has two parameters connected_account_id and customer_subnet_ids
connected_account_id:String
(Optional) The ID of the customer connected account to work with.
customer_subnet_ids: Array of String
(Optional) List of subnet Ids
deployment_type: String
(Optional) Denotes if request is for a SingleAZ or a MultiAZ SDDC. Default is SingleAZ.
Possible values are: SingleAZ , MultiAZ
host_instance_type: String
(Optional) The instance type for the esx hosts in the primary cluster of the SDDC.
Possible values are: i3.metal, r5.metal, i3en.metal
msft_license_config : MsftLicensingConfig
(Optional) Indicates the desired licensing support, if any, of Microsoft software.
sddc_id: String As UUID
(Optional) If provided, will be assigned as SDDC id of the provisioned SDDC.
sddc_template_id : String As UUID
(Optional) If provided, configuration from the template will applied to the provisioned SDDC.
sddc_type: String
(Optional) Denotes the sddc type , if the value is null or empty, the type is considered as default.
size:String
(Optional) The size of the vCenter and NSX appliances. “large” sddcSize corresponds to a ‘large’ vCenter appliance and ‘large’ NSX appliance. ‘medium’ sddcSize corresponds to ‘medium’ vCenter appliance and ‘medium’ NSX appliance. Value defaults to ‘medium’.
Possible values are: nsx_small , medium , large , nsx_large
skip_creating_vxlan : Boolean
(Optional) skip creating vxlan for compute gateway for SDDC provisioning
sso_domain : String
(Optional) The SSO domain name to use for vSphere users. If not specified, vmc.local will be used.
storage_capacity: Integer As Int64
(Optional) The storage capacity value to be requested for the sddc primary cluster, in GiBs. If provided, instead of using the direct-attached storage, a capacity value amount of seperable storage will be used.
vpc_cidr
(Optional) AWS VPC IP range. Only prefix of 16 or 20 is currently supported.
vxlan_subnet : String
(Optional) VXLAN IP subnet in CIDR for compute gateway
validate_only: Boolean
(Optional) When true, only validates the given sddc configuration without provisioning
verify_ssl
(Optional) Option to enable/disable SSL verification. Enabled by default.
If set to False, the certificate validation is skipped.
cert
(Optional) Path to the SSL client certificate file to connect to VMC Cloud Console.
The certificate can be retrieved from browser.
For example:
.. code::
{
"account_link_config": {
"delay_account_link": false
},
"account_link_sddc_config": [
{
"connected_account_id": "string",
"customer_subnet_ids": [
"string"
]
}
],
"deployment_type": "SingleAZ",
"host_instance_type": "i3.metal",
"msft_license_config": {
"mssql_licensing": "string",
"windows_licensing": "string"
},
"sddc_name": "Salt-SDDC-1",
"num_hosts": 0,
"provider": "ZEROCLOUD",
"sddc_id": "string-UUID",
"sddc_template_id": "string",
"sddc_type": "OneNode",
"size": "medium",
"skip_creating_vxlan": false,
"sso_domain": "string",
"storage_capacity": 1,
"vpc_cidr": "string",
"vxlan_subnet": "string",
"region": "us-west-2"
}
"""
log.info("Creating a new SDDC %s in the organization %s", sddc_name, org_id)
api_base_url = vmc_request.set_base_url(hostname)
api_url = "{base_url}vmc/api/orgs/{org_id}/sddcs".format(base_url=api_base_url, org_id=org_id)
allowed_dict = {
"name": sddc_name,
"num_hosts": num_hosts,
"provider": provider,
"region": region,
"account_link_config": account_link_config,
"account_link_sddc_config": account_link_sddc_config,
"deployment_type": deployment_type,
"host_instance_type": host_instance_type,
"msft_license_config": msft_license_config,
"sddc_id": sddc_id,
"sddc_template_id": sddc_template_id,
"sddc_type": sddc_type,
"size": size,
"skip_creating_vxlan": skip_creating_vxlan,
"sso_domain": sso_domain,
"storage_capacity": storage_capacity,
"vpc_cidr": vpc_cidr,
"vxlan_subnet": vxlan_subnet,
}
req_data = vmc_request._filter_kwargs(allowed_kwargs=allowed_dict.keys(), **allowed_dict)
params = vmc_request._filter_kwargs(allowed_kwargs=["validateOnly"], validateOnly=validate_only)
request_data = vmc_request.create_payload_for_request(vmc_templates.create_sddc, req_data)
return vmc_request.call_api(
method=vmc_constants.POST_REQUEST_METHOD,
url=api_url,
refresh_key=refresh_key,
authorization_host=authorization_host,
description="vmc_sddc.create",
data=request_data,
params=params,
verify_ssl=verify_ssl,
cert=cert,
)
[docs]def delete(
hostname,
refresh_key,
authorization_host,
org_id,
sddc_id,
force_delete=False,
retain_configuration=False,
template_name=None,
verify_ssl=True,
cert=None,
):
"""
Deletes the Given SDDC
Please refer the `VMC Delete SDDC documentation <https://developer.vmware.com/docs/vmc/latest/vmc/api/orgs/org/sddcs/sddc/delete/>`_ to get insight of functionality and input parameters
CLI Example:
.. code-block:: bash
salt <minion id> vmc_sddc.delete hostname=vmc.vmware.com sddc_id=sddc_id ...
hostname
The host name of VMC
refresh_key
API Token of the user which is used to get the Access Token required for VMC operations
authorization_host
Hostname of the Cloud Services Platform (CSP)
org_id
The Id of organization to which the SDDC belongs to
sddc_id
sddc_id which will be deleted
force_delete: Boolean
(Optional) If = true, will delete forcefully.
Beware: do not use the force flag if there is a chance an active provisioning or deleting task is running against this SDDC. This option is restricted.
retain_configuration: Boolean
(Optional) If = 'true', the SDDC's configuration is retained as a template for later use.
This flag is applicable only to SDDCs in ACTIVE state.
template_name: String
(Optional) Only applicable when retainConfiguration is also set to 'true'. When set, this value will be used as the name of the SDDC configuration template generated.
verify_ssl
(Optional) Option to enable/disable SSL verification. Enabled by default.
If set to False, the certificate validation is skipped.
cert
(Optional) Path to the SSL client certificate file to connect to VMC Cloud Console.
The certificate can be retrieved from browser.
"""
log.info("Deleting the given SDDC %s", sddc_id)
api_url_base = vmc_request.set_base_url(hostname)
api_url = "{base_url}vmc/api/orgs/{org_id}/sddcs/{sddc_id}".format(
base_url=api_url_base, org_id=org_id, sddc_id=sddc_id
)
params = vmc_request._filter_kwargs(
allowed_kwargs=["force", "retain_configuration", "template_name"],
force=force_delete,
retain_configuration=retain_configuration,
template_name=template_name,
)
return vmc_request.call_api(
method=vmc_constants.DELETE_REQUEST_METHOD,
url=api_url,
refresh_key=refresh_key,
authorization_host=authorization_host,
description="vmc_sddc.delete",
params=params,
verify_ssl=verify_ssl,
cert=cert,
)
[docs]def update_name(
hostname,
refresh_key,
authorization_host,
org_id,
sddc_id,
sddc_new_name,
verify_ssl=True,
cert=None,
):
"""
Updates name for Given SDDC
Please refer the `VMC Patch SDDC documentation <https://developer.vmware.com/docs/vmc/latest/vmc/api/orgs/org/sddcs/sddc/patch/>`_ to get insight of functionality and input parameters
CLI Example:
.. code-block:: bash
salt <minion id> vmc_sddc.update_name hostname=vmc.vmware.com sddc_id ...
hostname
The host name of VMC
refresh_key
API Token of the user which is used to get the Access Token required for VMC operations
authorization_host
Hostname of the Cloud Services Platform (CSP)
org_id
The Id of organization to which the SDDC belongs to
sddc_id
sddc_id for which name will update
sddc_new_name
The new name of the SDDC to be changed to
verify_ssl
(Optional) Option to enable/disable SSL verification. Enabled by default.
If set to False, the certificate validation is skipped.
cert
(Optional) Path to the SSL client certificate file to connect to VMC Cloud Console.
The certificate can be retrieved from browser.
"""
log.info("Updating sddc name for the SDDC %s", sddc_id)
api_url_base = vmc_request.set_base_url(hostname)
api_url = "{base_url}vmc/api/orgs/{org_id}/sddcs/{sddc_id}".format(
base_url=api_url_base, org_id=org_id, sddc_id=sddc_id
)
data = {"name": sddc_new_name}
return vmc_request.call_api(
method=vmc_constants.PATCH_REQUEST_METHOD,
url=api_url,
refresh_key=refresh_key,
authorization_host=authorization_host,
description="vmc_sddc.update_name",
data=data,
verify_ssl=verify_ssl,
cert=cert,
)
[docs]def get_vcenter_detail(
hostname, refresh_key, authorization_host, org_id, sddc_id, verify_ssl=True, cert=None
):
"""
Retrieves vcenter Details from the Given SDDC
Please refer the `VMC Get SDDC documentation <https://developer.vmware.com/docs/vmc/latest/vmc/api/orgs/org/sddcs/sddc/get/>`_ to get insight of functionality and input parameters
CLI Example:
.. code-block:: bash
salt <minion id> vmc_sddc.get_vcenter_detail hostname=vmc.vmware.com sddc_id ...
hostname
The host name of VMC
refresh_key
API Token of the user which is used to get the Access Token required for VMC operations
authorization_host
Hostname of the Cloud Services Platform (CSP)
org_id
The Id of organization to which the SDDC belongs to
sddc_id
sddc_id from which vcenter details should be retrieved
verify_ssl
(Optional) Option to enable/disable SSL verification. Enabled by default.
If set to False, the certificate validation is skipped.
cert
(Optional) Path to the SSL client certificate file to connect to VMC Cloud Console.
The certificate can be retrieved from browser.
"""
log.info("Retrieving the vCenter detail for the given SDDC %s", sddc_id)
sddc_detail = get_by_id(
hostname, refresh_key, authorization_host, org_id, sddc_id, verify_ssl, cert
)
if "error" in sddc_detail:
return sddc_detail
vcenter_url = sddc_detail["resource_config"]["vc_url"]
username = sddc_detail["resource_config"]["cloud_username"]
password = sddc_detail["resource_config"]["cloud_password"]
vcenter_detail = {
"vcenter_url": vcenter_url,
"username": username,
"password": password,
}
result = {"description": "vmc_sddc.get_vcenter_detail", "vcenter_detail": vcenter_detail}
return result
[docs]def get_vms(
hostname,
username,
password,
clusters=None,
datacenters=None,
folders=None,
hosts=None,
names=None,
power_states=None,
resource_pools=None,
vms=None,
verify_ssl=True,
cert=None,
):
"""
Retrieves the virtual machines from the SDDC vcenter
Please refer the `vCenter Get VM List documentation <https://developer.vmware.com/apis/vsphere-automation/latest/vcenter/api/vcenter/vm/get/>`_ to get insight of functionality and input parameters
CLI Example:
.. code-block:: bash
salt <minion id> vmc_sddc.get_vms hostname=vmc.vmware.com ...
hostname
The host name of vCenter console
username
username required to login to vCenter console
password
password required to login to vCenter console
clusters: Array Of String
(Optional) Clusters that must contain the virtual machine for the virtual machine to match the filter. If unset or empty, virtual machines in any cluster match the filter.
When clients pass a value of this structure as a parameter, the field must contain identifiers for the resource type: ClusterComputeResource.
When operations return a value of this structure as a result, the field will contain identifiers for the resource type: ClusterComputeResource.
datacenters: Array Of String
(Optional)datacenters that must contain the virtual machine for the virtual machine to match the filter.
If unset or empty, virtual machines in any datacenter match the filter.
When clients pass a value of this structure as a parameter, the field must contain identifiers for the resource type: Datacenter.
When operations return a value of this structure as a result, the field will contain identifiers for the resource type: Datacenter.
folders: Array Of String
(Optional) Folders that must contain the virtual machine for the virtual machine to match the filter.
If unset or empty, virtual machines in any folder match the filter.
When clients pass a value of this structure as a parameter, the field must contain identifiers for the resource type: Folder.
When operations return a value of this structure as a result, the field will contain identifiers for the resource type: Folder.
hosts: Array Of String
(Optional) Hosts that must contain the virtual machine for the virtual machine to match the filter.
If unset or empty, virtual machines on any host match the filter.
When clients pass a value of this structure as a parameter, the field must contain identifiers for the resource type: HostSystem.
When operations return a value of this structure as a result, the field will contain identifiers for the resource type: HostSystem.
names: Array Of String
(Optional) Names that virtual machines must have to match the filter (see VM.Info.name).
If unset or empty, virtual machines with any name match the filter.
power_states: Array Of VmPowerState
(Optional) Power states that a virtual machine must be in to match the filter
The Power.State enumerated type defines the valid power states for a virtual machine.
POWERED_OFF : The virtual machine is powered off.
POWERED_ON : The virtual machine is powered on.
SUSPENDED : The virtual machine is suspended.
If unset or empty, virtual machines in any power state match the filter.
resource_pools: Array Of String
(Optional) Resource pools that must contain the virtual machine for the virtual machine to match the filter.
If unset or empty, virtual machines in any resource pool match the filter.
When clients pass a value of this structure as a parameter, the field must contain identifiers for the resource type: ResourcePool.
When operations return a value of this structure as a result, the field will contain identifiers for the resource type: ResourcePool.
vms: Array Of String
(Optional) Identifiers of virtual machines that can match the filter.
If unset or empty, virtual machines with any identifier match the filter.
When clients pass a value of this structure as a parameter, the field must contain identifiers for the resource type: VirtualMachine.
When operations return a value of this structure as a result, the field will contain identifiers for the resource type: VirtualMachine.
verify_ssl
(Optional) Option to enable/disable SSL verification. Enabled by default.
If set to False, the certificate validation is skipped.
cert
(Optional) Path to the SSL client certificate file to connect to VMC Cloud Console.
The certificate can be retrieved from browser.
"""
log.info("Retrieving the virtual machines from the SDDC vCenter")
api_url_base = vmc_request.set_base_url(hostname)
api_url = "{base_url}api/vcenter/vm"
api_url = api_url.format(base_url=api_url_base)
allowed_dict = {
"clusters": clusters,
"datacenters": datacenters,
"folders": folders,
"hosts": hosts,
"names": names,
"power_states": power_states,
"resource_pools": resource_pools,
"vms": vms,
}
params = vmc_request._filter_kwargs(allowed_kwargs=allowed_dict.keys(), **allowed_dict)
headers = vmc_vcenter_request.get_headers(hostname, username, password)
return vmc_vcenter_request.call_api(
method=vmc_constants.GET_REQUEST_METHOD,
url=api_url,
headers=headers,
description="vmc_sddc.get_vms",
params=params,
verify_ssl=verify_ssl,
cert=cert,
)
[docs]def get_vms_by_sddc_id(
hostname, refresh_key, authorization_host, org_id, sddc_id, verify_ssl=True, cert=None
):
"""
Retrieves the virtual machines for the given SDDC.
Please refer the `vCenter Get VM List documentation <https://developer.vmware.com/apis/vsphere-automation/latest/vcenter/api/vcenter/vm/get/>`_ to get insight of functionality and input parameters
CLI Example:
.. code-block:: bash
salt <minion id> vm_minion vmc_sddc.get_vms_by_sddc_id hostname=vmc.vmware.com sddc_id ...
hostname
The host name of VMC
refresh_key
API Token of the user which is used to get the Access Token required for VMC operations
authorization_host
Hostname of the Cloud Services Platform (CSP)
org_id
The Id of organization to which the SDDC belongs to
sddc_id
Id of the SDDC for which VMs are retrieved
verify_ssl
(Optional) Option to enable/disable SSL verification. Enabled by default.
If set to False, the certificate validation is skipped.
cert
(Optional) Path to the SSL client certificate file to connect to VMC Cloud Console.
The certificate can be retrieved from browser.
"""
log.info("Retrieving the virtual machines for the given SDDC %s", sddc_id)
vcenter_detail_result = get_vcenter_detail(
hostname, refresh_key, authorization_host, org_id, sddc_id, verify_ssl, cert
)
if "error" in vcenter_detail_result:
return vcenter_detail_result
vcenter_detail = vcenter_detail_result["vcenter_detail"]
vcenter_url = vcenter_detail["vcenter_url"]
username = vcenter_detail["username"]
password = vcenter_detail["password"]
vcenter_hostname = vcenter_url[8 : len(vcenter_url) - 1]
return get_vms(
hostname=vcenter_hostname,
username=username,
password=password,
verify_ssl=verify_ssl,
cert=cert,
)