-
Notifications
You must be signed in to change notification settings - Fork 85
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Policy host transport node profile resource
Signed-off-by: Kobi Samoray <[email protected]>
- Loading branch information
Showing
3 changed files
with
298 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
177 changes: 177 additions & 0 deletions
177
nsxt/resource_nsxt_policy_host_transport_node_profile.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,177 @@ | ||
/* Copyright © 2023 VMware, Inc. All Rights Reserved. | ||
SPDX-License-Identifier: MPL-2.0 */ | ||
|
||
package nsxt | ||
|
||
import ( | ||
"fmt" | ||
|
||
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" | ||
"github.com/vmware/vsphere-automation-sdk-go/runtime/protocol/client" | ||
"github.com/vmware/vsphere-automation-sdk-go/services/nsxt/infra" | ||
"github.com/vmware/vsphere-automation-sdk-go/services/nsxt/model" | ||
) | ||
|
||
func resourceNsxtPolicyHostTransportNodeProfile() *schema.Resource { | ||
return &schema.Resource{ | ||
Create: resourceNsxtPolicyHostTransportNodeProfileCreate, | ||
Read: resourceNsxtPolicyHostTransportNodeProfileRead, | ||
Update: resourceNsxtPolicyHostTransportNodeProfileUpdate, | ||
Delete: resourceNsxtPolicyHostTransportNodeProfileDelete, | ||
Importer: &schema.ResourceImporter{ | ||
State: nsxtPolicyPathResourceImporter, | ||
}, | ||
Schema: map[string]*schema.Schema{ | ||
"nsx_id": getNsxIDSchema(), | ||
"path": getPathSchema(), | ||
"display_name": getDisplayNameSchema(), | ||
"description": getDescriptionSchema(), | ||
"revision": getRevisionSchema(), | ||
"tag": getTagsSchema(), | ||
// host_switch_spec | ||
"standard_host_switch": getStandardHostSwitchSchema(), | ||
"preconfigured_host_switch": getPreconfiguredHostSwitchSchema(), | ||
"ignore_overridden_hosts": { | ||
Type: schema.TypeBool, | ||
Default: false, | ||
Description: "Determines if cluster-level configuration should be applied on overridden hosts", | ||
Optional: true, | ||
}, | ||
}, | ||
} | ||
} | ||
|
||
func resourceNsxtPolicyHostTransportNodeProfileExists(id string, connector client.Connector, isGlobal bool) (bool, error) { | ||
client := infra.NewHostTransportNodeProfilesClient(connector) | ||
|
||
_, err := client.Get(id) | ||
if err == nil { | ||
return true, nil | ||
} | ||
|
||
if isNotFoundError(err) { | ||
return false, nil | ||
} | ||
|
||
return false, logAPIError("Error retrieving IP Block", err) | ||
} | ||
|
||
func resourceNsxtPolicyHostTransportNodeProfileCreate(d *schema.ResourceData, m interface{}) error { | ||
connector := getPolicyConnector(m) | ||
client := infra.NewHostTransportNodeProfilesClient(connector) | ||
|
||
id, err := getOrGenerateID(d, m, resourceNsxtPolicyHostTransportNodeProfileExists) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
displayName := d.Get("display_name").(string) | ||
description := d.Get("description").(string) | ||
tags := getPolicyTagsFromSchema(d) | ||
ignoreOverridenHosts := d.Get("ignore_overridden_hosts").(bool) | ||
|
||
hostSwitchSpec, err := getHostSwitchSpecFromSchema(d) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
obj := model.PolicyHostTransportNodeProfile{ | ||
DisplayName: &displayName, | ||
Description: &description, | ||
Tags: tags, | ||
HostSwitchSpec: hostSwitchSpec, | ||
IgnoreOverriddenHosts: &ignoreOverridenHosts, | ||
} | ||
|
||
_, err = client.Update(id, obj, nil) | ||
if err != nil { | ||
return handleCreateError("Policy Host Transport Node Profile", id, err) | ||
} | ||
|
||
d.SetId(id) | ||
d.Set("nsx_id", id) | ||
return resourceNsxtPolicyHostTransportNodeProfileRead(d, m) | ||
} | ||
|
||
func resourceNsxtPolicyHostTransportNodeProfileRead(d *schema.ResourceData, m interface{}) error { | ||
connector := getPolicyConnector(m) | ||
client := infra.NewHostTransportNodeProfilesClient(connector) | ||
|
||
id := d.Id() | ||
if id == "" { | ||
return fmt.Errorf("error obtaining Policy Host Transport Node Profile ID") | ||
} | ||
|
||
obj, err := client.Get(id) | ||
if err != nil { | ||
return handleReadError(d, "Policy Host Transport Node Profile", id, err) | ||
} | ||
|
||
d.Set("display_name", obj.DisplayName) | ||
d.Set("description", obj.Description) | ||
setPolicyTagsInSchema(d, obj.Tags) | ||
d.Set("nsx_id", obj.Id) | ||
d.Set("path", obj.Path) | ||
d.Set("revision", obj.Revision) | ||
|
||
err = setHostSwitchSpecInSchema(d, obj.HostSwitchSpec) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
return nil | ||
} | ||
|
||
func resourceNsxtPolicyHostTransportNodeProfileUpdate(d *schema.ResourceData, m interface{}) error { | ||
connector := getPolicyConnector(m) | ||
client := infra.NewHostTransportNodeProfilesClient(connector) | ||
|
||
id := d.Id() | ||
if id == "" { | ||
return fmt.Errorf("error obtaining Policy Host Transport Node Profile ID") | ||
} | ||
|
||
// Read the rest of the configured parameters | ||
displayName := d.Get("display_name").(string) | ||
description := d.Get("description").(string) | ||
revision := int64(d.Get("revision").(int)) | ||
tags := getPolicyTagsFromSchema(d) | ||
ignoreOverridenHosts := d.Get("ignore_overridden_hosts").(bool) | ||
|
||
hostSwitchSpec, err := getHostSwitchSpecFromSchema(d) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
obj := model.PolicyHostTransportNodeProfile{ | ||
DisplayName: &displayName, | ||
Description: &description, | ||
Tags: tags, | ||
HostSwitchSpec: hostSwitchSpec, | ||
IgnoreOverriddenHosts: &ignoreOverridenHosts, | ||
Revision: &revision, | ||
} | ||
|
||
_, err = client.Update(id, obj, nil) | ||
if err != nil { | ||
return handleUpdateError("Policy Host Transport Node Profile", id, err) | ||
} | ||
|
||
return resourceNsxtPolicyHostTransportNodeProfileRead(d, m) | ||
} | ||
|
||
func resourceNsxtPolicyHostTransportNodeProfileDelete(d *schema.ResourceData, m interface{}) error { | ||
id := d.Id() | ||
if id == "" { | ||
return fmt.Errorf("error obtaining Policy Host Transport Node Profile ID") | ||
} | ||
|
||
connector := getPolicyConnector(m) | ||
client := infra.NewHostTransportNodeProfilesClient(connector) | ||
err := client.Delete(id) | ||
if err != nil { | ||
return handleDeleteError("Policy Host Transport Node Profile", id, err) | ||
} | ||
|
||
return nil | ||
} |
120 changes: 120 additions & 0 deletions
120
website/docs/r/policy_host_transport_node_profile.html.markdown
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,120 @@ | ||
--- | ||
subcategory: "Fabric" | ||
layout: "nsxt" | ||
page_title: "NSXT: nsxt_policy_host_transport_node_profile" | ||
description: A resource to configure a Policy Host Transport Node Profile. | ||
--- | ||
|
||
# nsxt_transport_node | ||
|
||
This resource provides a method for the management of a Policy Host Transport Node Profile. | ||
This resource is supported with NSX 4.1.0 onwards. | ||
|
||
## Example Usage | ||
```hcl | ||
resource "nsxt_policy_host_transport_node_profile" "test" { | ||
display_name = "test_policy_host_tnp" | ||
standard_host_switch { | ||
host_switch_mode = "STANDARD" | ||
host_switch_type = "NVDS" | ||
ip_assignment { | ||
assigned_by_dhcp = true | ||
} | ||
transport_zone_endpoint { | ||
transport_zone_id = data.nsxt_transport_zone.tz1.id | ||
} | ||
host_switch_profile_id = [nsxt_uplink_host_switch_profile.hsw_profile1.id] | ||
is_migrate_pnics = false | ||
pnics { | ||
device_name = "fp-eth0" | ||
uplink_name = "uplink1" | ||
} | ||
} | ||
} | ||
``` | ||
|
||
## Argument Reference | ||
|
||
The following arguments are supported: | ||
|
||
* `display_name` - (Required) Display name of the resource. | ||
* `description` - (Optional) Description of the resource. | ||
* `tag` - (Optional) A list of scope + tag pairs to associate with this resource. | ||
* `ignore_overridden_hosts` - (Optional) Determines if cluster-level configuration should be applied on overridden hosts | ||
* `standard_host_switch` - (Optional) Standard host switch specification. | ||
* `cpu_config` - (Optional) Enhanced Networking Stack enabled HostSwitch CPU configuration. | ||
* `num_lcores` - (Required) Number of Logical cpu cores (Lcores) to be placed on a specified NUMA node. | ||
* `numa_node_index` - (Required) Unique index of the Non Uniform Memory Access (NUMA) node. | ||
* `host_switch_id` - (Optional) The host switch id. This ID will be used to reference a host switch. | ||
* `host_switch_mode` - (Optional) Operational mode of a HostSwitch. Accepted values - 'STANDARD', 'ENS', 'ENS_INTERRUPT' or 'LEGACY'. The default value is 'STANDARD'. | ||
* `host_switch_profile_id` - (Optional) Identifiers of host switch profiles to be associated with this host switch. | ||
* `host_switch_type` - (Optional) Type of HostSwitch. Accepted values - 'NVDS' or 'VDS'. The default value is 'NVDS'. | ||
* `ip_assignment` - (Required) - Specification for IPs to be used with host switch virtual tunnel endpoints. Should contain exatly one of the below: | ||
* `assigned_by_dhcp` - (Optional) Enables DHCP assignment. Should be set to true. | ||
* `static_ip` - (Optional) IP assignment specification for Static IP List. | ||
* `ip_addresses` - (Required) List of IPs for transport node host switch virtual tunnel endpoints. | ||
* `subnet_mask` - (Required) Subnet mask. | ||
* `default_gateway` - (Required) Gateway IP. | ||
* `static_ip_mac` - (Optional) IP and MAC assignment specification for Static IP List. | ||
* `default_gateway` - (Required) Gateway IP. | ||
* `subnet_mask` - (Required) Subnet mask. | ||
* `ip_mac_pair` - (Required) List of IPs and MACs for transport node host switch virtual tunnel endpoints. | ||
* `ip` - (Required) IP address. | ||
* `mac` - (Required) MAC address. | ||
* `static_ip_pool_id` - (Optional) IP assignment specification for Static IP Pool. | ||
* `is_migrate_pnics` - (Optional) Migrate any pnics which are in use. | ||
* `pnics` - (Optional) Physical NICs connected to the host switch. | ||
* `device_name` - (Required) Device name or key. | ||
* `uplink_name` - (Required) Uplink name for this Pnic. | ||
* `portgroup_transport_zone_id` - (Optional) Transport Zone ID representing the DVS used in NSX on DVPG. | ||
* `transport_node_profile_sub_config` - (Optional) Transport Node Profile sub-configuration Options. | ||
* `host_switch_config_option` - (Required) Subset of the host switch configuration. | ||
* `host_switch_id` - (Optional) The host switch id. This ID will be used to reference a host switch. | ||
* `host_switch_profile_id` - (Optional) Identifiers of host switch profiles to be associated with this host switch. | ||
* `ip_assignment` - (Required) - Specification for IPs to be used with host switch virtual tunnel endpoints. Should contain exatly one of the below: | ||
* `assigned_by_dhcp` - (Optional) Enables DHCP assignment. Should be set to true. | ||
* `static_ip` - (Optional) IP assignment specification for Static IP List. | ||
* `ip_addresses` - (Required) List of IPs for transport node host switch virtual tunnel endpoints. | ||
* `subnet_mask` - (Required) Subnet mask. | ||
* `default_gateway` - (Required) Gateway IP. | ||
* `static_ip_mac` - (Optional) IP and MAC assignment specification for Static IP List. | ||
* `default_gateway` - (Required) Gateway IP. | ||
* `subnet_mask` - (Required) Subnet mask. | ||
* `ip_mac_pair` - (Required) List of IPs and MACs for transport node host switch virtual tunnel endpoints. | ||
* `ip` - (Required) IP address. | ||
* `mac` - (Required) MAC address. | ||
* `static_ip_pool_id` - (Optional) IP assignment specification for Static IP Pool. | ||
* `uplink` - (Optional) Uplink/LAG of VMware vSphere Distributed Switch connected to the HostSwitch. | ||
* `uplink_name` - (Required) Uplink name from UplinkHostSwitch profile. | ||
* `vds_lag_name` - (Optional) Link Aggregation Group (LAG) name of Virtual Distributed Switch. | ||
* `vds_uplink_name` - (Optional) Uplink name of VMware vSphere Distributed Switch (VDS). | ||
* `name` - (Required) Name of the transport node profile config option. | ||
* `transport_zone_endpoint` - (Optional) Transport zone endpoints | ||
* `transport_zone_id` - (Required) Unique ID identifying the transport zone for this endpoint. | ||
* `transport_zone_profile_id` - (Optional) Identifiers of the transport zone profiles associated with this transport zone endpoint on this transport node. | ||
* `uplink` - (Optional) Uplink/LAG of VMware vSphere Distributed Switch connected to the HostSwitch. | ||
* `uplink_name` - (Required) Uplink name from UplinkHostSwitch profile. | ||
* `vds_lag_name` - (Optional) Link Aggregation Group (LAG) name of Virtual Distributed Switch. | ||
* `vds_uplink_name` - (Optional) Uplink name of VMware vSphere Distributed Switch (VDS). | ||
* `vmk_install_migration` - (Optional) The vmknic and logical switch mappings. | ||
* `destination_network` - (Required) The network id to which the ESX vmk interface will be migrated. | ||
* `device_name` - (Required) ESX vmk interface name. | ||
* `preconfigured_host_switch` - (Optional) Preconfigured host switch. | ||
* `endpoint` - (Optional) Name of the virtual tunnel endpoint which is preconfigured on this host switch. | ||
* `host_switch_id` - (Required) External Id of the preconfigured host switch. | ||
* `transport_zone_endpoint` - (Optional) Transport zone endpoints | ||
* `transport_zone_id` - (Required) Unique ID identifying the transport zone for this endpoint. | ||
* `transport_zone_profile_id` - (Optional) Identifiers of the transport zone profiles associated with this transport zone endpoint on this transport node. | ||
|
||
In addition to arguments listed above, the following attributes are exported: | ||
|
||
* `id` - ID of the resource. | ||
* `revision` - Indicates current revision number of the object as seen by NSX-T API server. This attribute can be useful for debugging. | ||
|
||
[docs-import]: https://www.terraform.io/cli/import | ||
|
||
``` | ||
terraform import nsxt_policy_host_transport_node_profile.test POLICY_PATH | ||
``` | ||
The above command imports Policy Host Transport Node Profile named `test` with NSX policy path `POLICY_PATH`. |