NSX-T Plugin
Cloudify NSX-T Plugin enables users create NSX-T Resources in NSX-T manager.
Release History
See releases.
Authentication with NSX-T
Each node template, has a client_config
property which stores your account credentials.
The client_config
consists of the following:
host
: Required.: Your NSX-T Manager Host IP.port
: Required.: Your NSX-T Manager Port that listen on.username
: Required.: Your NSX-T Manager Username.password
: Required.: Your NSX-T Manager Password.auth_type
: Authentication Type. It supports the following:basic
: Default value.session
insecure
: If true, SSL validation is skipped. Defaultfalse
.cert
: Your cert file path.dsl_definitions: client_config: &client_config host: { get_input: host } port: { get_input: port } username: { get_input: username } password: { get_input: password }
Common Properties
Openstack Plugin node types have these common properties, except where noted:
Properties
client_config
: A dictionary that contains values to be passed to the connection client.resource_config
: A dictionary with required and common parameters to the resource’s create or put call.
Common Runtime Properties
Node instances of any of the types defined in this plugin are set with the following runtime properties during the cloudify.interfaces.lifecycle.create operation
:
id
: The ID of the NSX-T resourcename
: The name of the NSX-T resourcetype
: The type of the NSX-T resourceresource_config
: The resource configuration returned from resource creation
Currently, the plugin provides the following features for interacting with NSX-T API: 1. Segment: - Create Segment - Delete Segment
DHCP Server Config:
- Create DHCP Server Config
- Delete DHCP Server Config
Tier1 Gateway:
- Create Tier1 Gateway
- Delete Tier1 Gateway
Virtual Machine:
- List Virtual Machines
- List All Virtual Network Interface Associated with VM
DHCP Static Binding
- Create DHCP Static Binding
- Delete DHCP Static Binding
Node Types
cloudify.nodes.nsx-t.DhcpServerConfig
This node type refers to a DHCP Server Config.
Resource Config
id
: String. Required. This is the ID of the DHCP Server Configdisplay_name
: String. Not required. The name of DHCP Server Config. if not provided, it will take the same ID value.description
: String. Not required. The resource description.edge_cluster_path
: String. Edge cluster pathlease_time
: Integer. IP address lease time in seconds.server_addresses
: List: DHCP server address in CIDR format. Both IPv4 and IPv6 address families are supported.preferred_edge_paths
: List: Edge node path policy paths to edge nodes on which the DHCP servers run.children
: List: subtree for this type within policy tree containing nested elements.tags
: List: Opaque identifiers meaningful to the API user by having pairs of scope and tag.
Properties
tier1_gateway_id
: String: The ID of the Tier 1 Gateway to connect DHCP to
DHCP Server Config Example
dhcb_server_config:
type: cloudify.nodes.nsx-t.DhcpServerConfig
properties:
client_config:
host: { get_input: host }
port: { get_input: port }
username: { get_input: username }
password: { get_input: password }
resource_config:
id: test_dhcp_server
display_name: Test DHCP Server
description: Test DHCP Server Config
edge_cluster_path: /infra/sites/default/enforcement-points/default/edge-clusters/272cfe43-ebcc-49bb-8471-62a261ed8931
tags:
- scope: Name
tag: Test DHCP
cloudify.nodes.nsx-t.Segment
This node type refers to a Segment.
id
: String. Required. This is the ID of the Segmentdisplay_name
: String. Not required. The name of Segment. if not provided, it will take the same ID value.description
: String. Not required. The Segment description.subnet
: Dict: Segment Subnet Configuration. The following keys are part ofsubnet
:ip_v4_config
: Dict: IP V4 Configuration.dhcp_config
: Dict: The DHCP Configurationresource_type
: String: Type of the DHCP Configuration. Default: SegmentDhcpV4Configserver_address
: List: IP address of the DHCP server in CIDR format.dns_servers
: List: IP address of DNS servers for subnet.lease_time
: Integer: DHCP lease time for subnetoption
: Dict: DHCP options.
gateway_address
: String: Gateway IP address in CIDR format IPv4dhcp_ranges
: DHCP address ranges are used for dynamic IP allocation. Supports address range and CIDR formats.
ip_v6_config
: Dict: IP V6 Configuration. -dhcp_config
: Dict: The DHCP Configurationresource_type
: String: Type of the DHCP Configuration. Default: SegmentDhcpV4Configserver_address
: List: IP address of the DHCP server in CIDR format.dns_servers
: List: IP address of DNS servers for subnet.lease_time
: Integer: DHCP lease time for subnetoption
: Dict: DHCP options.gateway_address
: String: Gateway IP address in CIDR format IPv6dhcp_ranges
: DHCP address ranges are used for dynamic IP allocation. Supports address range and CIDR formats.
admin_state
: String. Represents Desired state of the Segment. It supports the following values:UP
: Default valueDown
replication_mode
: String. Replication mode of the Segment. If this field is not set for overlay segment then the default ofMTEP
will be used. It supports the following values:MTEP
SOURCE
transport_zone_path
: String: Policy path to the transport zone.connectivity_path
: String: Policy path to the connecting Tier-0 or Tier-1.dhcp_config_path
: String: Policy path to DHCP server or relay configuration to use for all IPv4 & IPv6 subnets configured on this segment.l2_extension
: Dict: Configuration for extending Segment through L2 VPN.domain_name
: String: DNS domain name.extra_configs
: List: Extra configs on Segment. This property could be used for vendor specific configuration in key value string pairs, the setting in extra_configs will be automatically inheritted by segment ports in the Segmentmetadata_proxy_paths
: List: Metadata Proxy Configuration Paths.mac_pool_id
: String: Allocation mac pool associated with the Segment, Mac pool id that associated with a Segment.overlay_id
: String: Overlay connectivity ID for this Segment Used for overlay connectivity of segments.tags
: List: Opaque identifiers meaningful to the API user by having pairs of scope and tag.children
: List: subtree for this type within policy tree containing nested elements.address_bindings
: List: Address bindings for the Logical switch. Array of (PacketAddressClassifier)[https://vdc-download.vmware.com/vmwb-repository/dcr-public/9e1c6bcc-85db-46b6-bc38-d6d2431e7c17/30af91b5-3a91-4d5d-8ed5-a7d806764a16/api_includes/types_PacketAddressClassifier.html]bridge_profiles
: List: Bridge Profile Configuration Multiple distinct L2 bridge profiles can be configured.advanced_config
: Dict: Advanced configuration for Segment.vlan_ids
: List: VLAN ids for VLAN backed Segment. Can be a VLAN id or a range of VLAN ids specified with ‘-’ in between.
Relationships
* cloudify.relationships.nsx-t.segment_connected_to_dhcp_server_config
:
* cloudify.nodes.nsx-t.DhcpServerConfig
: Depend on DHCP Server Config
Segment Example
segment:
type: cloudify.nodes.nsx-t.Segment
properties:
client_config:
host: { get_input: host }
port: { get_input: port }
username: { get_input: username }
password: { get_input: password }
resource_config:
id: test_segment
display_name: test-segment
description: Test Segment Config
transport_zone_path: /infra/sites/default/enforcement-points/default/transport-zones/1b3a2f36-bfd1-443e-a0f6-4de01abc963e
connectivity_path: /infra/tier-1s/test-tier1
dhcp_config_path: /infra/dhcp-server-configs/test_dhcp_server
subnet:
ip_v4_config:
dhcp_config:
server_address: 192.168.11.11/24
lease_time: 86400
resource_type: SegmentDhcpV4Config
gateway_address: 192.168.11.12/24
dhcp_ranges:
- "192.168.11.100-192.168.11.160"
ip_v6_config:
dhcp_config:
server_address: fc7e:f206:db42::6/48
lease_time: 86400
resource_type: SegmentDhcpV6Config
gateway_address: fc7e:f206:db42::2/48
relationships:
- type: cloudify.relationships.nsx-t.segment_connected_to_dhcp_server_config
target: dhcb_server_config
cloudify.nodes.nsx-t.Tier1
This node type refers to a Tier1 Gateway.
Resource Config
id
: String. Required. This is the ID of the Tier1 Gatewaydisplay_name
: String. Not required. The name of Tier1 Gateway. if not provided, it will take the same ID value.tier0_path
: String. Not required. Specify Tier-1 connectivity to Tier-0 instance.type
: String. Tier1 connectivity type for reference.dhcp_config_paths
: List. DHCP configuration for Segments connected to Tier-1disable_firewall
: Boolean: Disable or enable gateway firewall. Default Falseenable_standby_relocation
: Boolean: Flag to enable standby service router relocation.failover_mode
: String: Determines the behavior when a Tier-1 instance restarts after a failure. Default NON_PREEMPTIVEintersite_config
: Dict: Inter site routing configuration when the gateway is streched.fallback_sites
: List: Fallback site to be used as new primary site on current primary site failure.intersite_transit_subnet
: String: IPv4 subnet for inter-site transit segment connecting service routers across sites for stretched gateway. Default169.254.32.0/20
last_admin_active_epoch
: Integer: Epoch(in seconds) is auto updated based on system current timestamp when primary locale service is updatedprimary_site_path
: String: Primary egress site for gateway.
ipv6_profile_paths
: List: Configuration IPv6 NDRA and DAD profiles . Either or both NDRA and/or DAD profiles can be configured.pool_allocation
: String: Supports edge node allocation at different sizes for routing and load balancer service to meet performance and scalability requirements. Default ROUTINGqos_profile
: Dict: QoS Profile configuration for Tier1 router link connected to Tier0 gateway.egress_qos_profile_path
: String: Policy path to gateway QoS profile in egress direction.ingress_qos_profile_path
: String: Policy path to gateway QoS profile in ingress direction.
route_advertisement_rules
: List: Route advertisement rules and filtering.route_advertisement_types
: List: Enable different types of route advertisements.children
: List: subtree for this type within policy tree containing nested elements.tags
: List: Opaque identifiers meaningful to the API user
Tier1 Example
tier1:
type: cloudify.nodes.nsx-t.Tier1
properties:
client_config:
host: { get_input: host }
port: { get_input: port }
username: { get_input: username }
password: { get_input: password }
resource_config:
id: test_tier1
display_name: Test Tier1 Router
description: Test Tier1 Router
tier0_path:{ get_input: tier0_path }
cloudify.types.nsx-t.inventory.VirtualMachine
This node type refers to a Virtual Machine resource.
Resource Config
* vm_id
: String. Not required. External VM ID.
* vm_name
: String. Not required. The Name of VM.
* network_id
: String. Required. The network id to get ips from.
Runtime Properties
Beside the common runtime properties, the VirtualMachine
node type also expose the following two runtime properties:
* networks
: Dict. Dictionary of all virtual network interfaces attached to the current vm.
```json
{
"Network adapter 1":{
"device_key":"4000",
"device_name":"Network adapter 1",
"external_id":"502a627a-2b5a-0f27-ace9-44a9b66d9692-4000",
"host_id":"55174c3a-412e-4083-b2f1-cf2cd265ef5b",
"ip_address_info":[
{
"ip_addresses":[
"192.168.11.100",
"2001:ab8::250:56ff:feaa:9160",
"fe80::250:56ff:feaa:9160"
],
"source":"VM_TOOLS"
}
],
"lport_attachment_id":"3e660c66-7a8e-45a4-8c82-ffe3afcc7de2",
"mac_address":"00:50:56:aa:91:60",
"owner_vm_id":"502a627a-2b5a-0f27-ace9-44a9b66d9692",
"owner_vm_type":"REGULAR",
"vm_local_id_on_host":"49",
"_last_sync_time":1598369175580,
"display_name":"Network adapter 1",
"resource_type":"VirtualNetworkInterface",
"ipv4_addresses":[
"192.168.11.100"
],
"ipv6_addresses":[
"2001:ab8::250:56ff:feaa:9160",
"fe80::250:56ff:feaa:9160"
]
}
}
```
The value of
network_id
is the exposed as runtime property with the following value:{ "device_key":"4001", "device_name":"Network adapter 2", "external_id":"502a479c-e3f4-2ace-daab-4d874e8cc8b6-4001", "host_id":"55174c3a-412e-4083-b2f1-cf2cd265ef5b", "ip_address_info":[ { "ip_addresses":[ "192.168.234.100", "fe80::250:56ff:feaa:34fd" ], "source":"VM_TOOLS" } ], "lport_attachment_id":"a9e26ccb-eb63-4098-bb7d-a93b6257b33f", "mac_address":"00:50:56:aa:34:fd", "owner_vm_id":"502a479c-e3f4-2ace-daab-4d874e8cc8b6", "owner_vm_type":"REGULAR", "vm_local_id_on_host":"22", "_last_sync_time":1597825357509, "display_name":"Network adapter 2", "resource_type":"VirtualNetworkInterface" }
VirtualMachine Example
virtual_machine_inventory:
type: cloudify.nodes.nsx-t.inventory.VirtualMachine
properties:
client_config:
host: { get_input: host }
port: { get_input: port }
username: { get_input: username }
password: { get_input: password }
resource_config:
vm_name: { get_attribute: [ host, name ] }
network_id: { get_attribute: [ segment, id ] }
relationships:
- type: cloudify.relationships.nsx-t.inventory_connected_to_server
target: host
- type: cloudify.relationships.depends_on
target: segment
Relationships
We support a relationship called cloudify.relationships.server_connected_to_segment
that support dhcp static binding where a static ip attached to the server that has the following operations:
cloudify.interfaces.relationship_lifecycle.preconfigure
:network_unique_id
: String. The uuid of segment must be passed which will be exposed as runtime property for Segment nodeip_v4_address
: String. The ip address v4 that is going to be assigned to the server.ip_v6_address
: String. The ip address v6 that is going to be assigned to the server.
Notes: 1. One or both of
ip_v4_address
,ip_v6_address
must be provided otherwise the operation will raise error 2. Ifnetwork_unique_id
is not provided, then plugin will try to lookup it internally.cloudify.interfaces.relationship_lifecycle.unlink
: This operation will remove all the static dhcp binding created before
Relationships Example
host-node:
type: cloudify.vsphere.nodes.Server
properties:
client_config:
host: { get_input: host }
port: { get_input: port }
username: { get_input: username }
password: { get_input: password }
agent_config:
install_method: none
allowed_clusters: { get_input: allowed_clusters }
server:
name: { get_input: server_name }
template: { get_input: template }
cpus: 1
memory: 1024
networking:
connect_networks:
- name: { get_attribute: [ segment, name ] }
nsx_t_switch: { get_input: nsx_t_switch }
use_dhcp: true
relationships:
- type: cloudify.relationships.server_connected_to_segment
target: segment
target_interfaces:
cloudify.interfaces.relationship_lifecycle:
preconfigure:
inputs:
network_unique_id: { get_attribute: [ segment, unique_id ] }
ip_v4_address: { get_input: ip_address }