Cloudify NSX-T Plugin enables users create NSX-T Resources in NSX-T manager that can be exposed to the vsphere environment
The plugin provides the following features for interacting with NSX-T API:
-
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
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 }
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.
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
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
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
This node type refers to a Segment.
-
id
: String. Required. This is the ID of the Segment -
display_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 Segment -
metadata_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:
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
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:
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 }
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.
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.{ "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"
}
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
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:
- One or both of
ip_v4_address
,ip_v6_address
must be provided otherwise the operation will raise error - If
network_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
host:
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 }
Notes: The configuration for the above resources are based on the NSX-T API documentation: