Skip to content
Merged
Show file tree
Hide file tree
Changes from 20 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .changes/v1.0.0/20-features.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
- **New Resource:** `vcfa_org_regional_networking_vpc_qos` to manage Org Regional Networking VPC QoS [GH-20]
- **New Data Source:** `vcfa_org_regional_networking_vpc_qos` to read Org Regional Networking VPC QoS [GH-20]
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -66,3 +66,5 @@ require (
google.golang.org/protobuf v1.35.1 // indirect
sigs.k8s.io/yaml v1.4.0 // indirect
)

replace github.com/vmware/go-vcloud-director/v3 => github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20250129093129-d0949059595d
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20250129093129-d0949059595d h1:T+I3NO2LJpqMzNCZOCX43z7zSYczCKloWLaD5FY/Xm0=
github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20250129093129-d0949059595d/go.mod h1:68KHsVns52dsq/w5JQYzauaU/+NAi1FmCxhBrFc/VoQ=
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
github.com/ProtonMail/go-crypto v1.1.0-alpha.2 h1:bkyFVUP+ROOARdgCiJzNQo2V2kiB97LyUpzH9P6Hrlg=
Expand Down Expand Up @@ -149,8 +151,6 @@ github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IU
github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok=
github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g=
github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds=
github.com/vmware/go-vcloud-director/v3 v3.0.0-alpha.22 h1:JvBEv0P3pcs+AkkJoFMxdSYJxGw0Y298f2pwwP2nC9M=
github.com/vmware/go-vcloud-director/v3 v3.0.0-alpha.22/go.mod h1:68KHsVns52dsq/w5JQYzauaU/+NAi1FmCxhBrFc/VoQ=
github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
Expand Down
72 changes: 72 additions & 0 deletions vcfa/datasource_vcfa_org_regional_networking_vpc_qos.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package vcfa

import (
"context"
"fmt"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
)

func datasourceVcfaOrgRegionalNetworkingVpcQos() *schema.Resource {
return &schema.Resource{
ReadContext: datasourceVcfaOrgRegionalNetworkingVpcQosRead,

Schema: map[string]*schema.Schema{
"org_regional_networking_id": {
Type: schema.TypeString,
Required: true,
Description: fmt.Sprintf("ID of %s", labelVcfaRegionalNetworkingSetting),
},
"edge_cluster_id": {
Type: schema.TypeString,
Computed: true,
Description: fmt.Sprintf("ID of parent %s", labelVcfaEdgeCluster),
},
"ingress_committed_bandwidth_mbps": {
Type: schema.TypeString,
Computed: true,
Description: fmt.Sprintf("Ingress committed bandwidth in Mbps for %s", labelVcfaOrgRegionalNetworkingVpcQos),
},
"ingress_burst_size_bytes": {
Type: schema.TypeString,
Computed: true,
Description: fmt.Sprintf("Ingress burst size bytes for %s", labelVcfaOrgRegionalNetworkingVpcQos),
},
"egress_committed_bandwidth_mbps": {
Type: schema.TypeString,
Computed: true,
Description: fmt.Sprintf("Egress committed bandwidth in Mbps for %s", labelVcfaOrgRegionalNetworkingVpcQos),
},
"egress_burst_size_bytes": {
Type: schema.TypeString,
Computed: true,
Description: fmt.Sprintf("Ingress burst size bytes for %s", labelVcfaOrgRegionalNetworkingVpcQos),
},
},
}
}

func datasourceVcfaOrgRegionalNetworkingVpcQosRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
vcfaClient := meta.(*VCDClient)
rns, err := vcfaClient.GetTmRegionalNetworkingSettingById(d.Get("org_regional_networking_id").(string))
if err != nil {
return diag.Errorf("error looking up %s by ID: %s", labelVcfaOrgNetworking, err)
}

// ID is Org Regional Networking Setting ID
d.SetId(rns.TmRegionalNetworkingSetting.ID)

// fetch VPC profile
vpcProfile, err := rns.GetDefaultVpcConnectivityProfile()
if err != nil {
return diag.Errorf("error retrieving %s: %s", labelVcfaOrgRegionalNetworkingVpcQos, err)
}

err = setTmOrgRegionalNetworkingVpcQosData(vcfaClient, d, vpcProfile)
if err != nil {
return diag.Errorf("error storing %s configuration to state: %s", labelVcfaOrgRegionalNetworkingVpcQos, err)
}

return nil
}
76 changes: 39 additions & 37 deletions vcfa/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,46 +32,48 @@ func Resources(nameRegexp string, includeDeprecated bool) (map[string]*schema.Re
}

var globalDataSourceMap = map[string]*schema.Resource{
"vcfa_tm_version": datasourceVcfaTmVersion(), // 1.0
"vcfa_vcenter": datasourceVcfaVcenter(), // 1.0
"vcfa_org": datasourceVcfaOrg(), // 1.0
"vcfa_nsx_manager": datasourceVcfaNsxManager(), // 1.0
"vcfa_supervisor": datasourceVcfaSupervisor(), // 1.0
"vcfa_supervisor_zone": datasourceVcfaSupervisorZone(), // 1.0
"vcfa_region": datasourceVcfaRegion(), // 1.0
"vcfa_ip_space": datasourceVcfaIpSpace(), // 1.0
"vcfa_region_zone": datasourceVcfaRegionZone(), // 1.0
"vcfa_org_vdc": datasourceVcfaOrgVdc(), // 1.0
"vcfa_region_storage_policy": datasourceVcfaRegionStoragePolicy(), // 1.0
"vcfa_storage_class": datasourceVcfaStorageClass(), // 1.0
"vcfa_content_library": datasourceVcfaContentLibrary(), // 1.0
"vcfa_content_library_item": datasourceVcfaContentLibraryItem(), // 1.0
"vcfa_tier0_gateway": datasourceVcfaTier0Gateway(), // 1.0
"vcfa_provider_gateway": datasourceVcfaProviderGateway(), // 1.0
"vcfa_edge_cluster": datasourceVcfaEdgeCluster(), // 1.0
"vcfa_edge_cluster_qos": datasourceVcfaEdgeClusterQos(), // 1.0
"vcfa_org_networking": datasourceVcfaOrgNetworking(), // 1.0
"vcfa_org_regional_networking": datasourceVcfaOrgRegionalNetworking(), // 1.0
"vcfa_org_oidc": datasourceVcfaOrgOidc(), // 1.0
"vcfa_right": datasourceVcfaRight(), // 1.0
"vcfa_rights_bundle": datasourceVcfaRightsBundle(), // 1.0
"vcfa_tm_version": datasourceVcfaTmVersion(), // 1.0
"vcfa_vcenter": datasourceVcfaVcenter(), // 1.0
"vcfa_org": datasourceVcfaOrg(), // 1.0
"vcfa_nsx_manager": datasourceVcfaNsxManager(), // 1.0
"vcfa_supervisor": datasourceVcfaSupervisor(), // 1.0
"vcfa_supervisor_zone": datasourceVcfaSupervisorZone(), // 1.0
"vcfa_region": datasourceVcfaRegion(), // 1.0
"vcfa_ip_space": datasourceVcfaIpSpace(), // 1.0
"vcfa_region_zone": datasourceVcfaRegionZone(), // 1.0
"vcfa_org_vdc": datasourceVcfaOrgVdc(), // 1.0
"vcfa_region_storage_policy": datasourceVcfaRegionStoragePolicy(), // 1.0
"vcfa_storage_class": datasourceVcfaStorageClass(), // 1.0
"vcfa_content_library": datasourceVcfaContentLibrary(), // 1.0
"vcfa_content_library_item": datasourceVcfaContentLibraryItem(), // 1.0
"vcfa_tier0_gateway": datasourceVcfaTier0Gateway(), // 1.0
"vcfa_provider_gateway": datasourceVcfaProviderGateway(), // 1.0
"vcfa_edge_cluster": datasourceVcfaEdgeCluster(), // 1.0
"vcfa_edge_cluster_qos": datasourceVcfaEdgeClusterQos(), // 1.0
"vcfa_org_oidc": datasourceVcfaOrgOidc(), // 1.0
"vcfa_org_networking": datasourceVcfaOrgNetworking(), // 1.0
"vcfa_org_regional_networking": datasourceVcfaOrgRegionalNetworking(), // 1.0
"vcfa_org_regional_networking_vpc_qos": datasourceVcfaOrgRegionalNetworkingVpcQos(), // 1.0
"vcfa_right": datasourceVcfaRight(), // 1.0
"vcfa_rights_bundle": datasourceVcfaRightsBundle(),
}

var globalResourceMap = map[string]*schema.Resource{
"vcfa_vcenter": resourceVcfaVcenter(), // 1.0
"vcfa_org": resourceVcfaOrg(), // 1.0
"vcfa_nsx_manager": resourceVcfaNsxManager(), // 1.0
"vcfa_region": resourceVcfaRegion(), // 1.0
"vcfa_ip_space": resourceVcfaIpSpace(), // 1.0
"vcfa_org_vdc": resourceVcfaOrgVdc(), // 1.0
"vcfa_content_library": resourceVcfaContentLibrary(), // 1.0
"vcfa_content_library_item": resourceVcfaContentLibraryItem(), // 1.0
"vcfa_provider_gateway": resourceVcfaProviderGateway(), // 1.0
"vcfa_edge_cluster_qos": resourceVcfaEdgeClusterQos(), // 1.0
"vcfa_org_networking": resourceVcfaOrgNetworking(), // 1.0
"vcfa_org_regional_networking": resourceVcfaOrgRegionalNetworking(), // 1.0
"vcfa_org_oidc": resourceVcfaOrgOidc(), // 1.0
"vcfa_rights_bundle": resourceVcfaRightsBundle(), // 1.0
"vcfa_vcenter": resourceVcfaVcenter(), // 1.0
"vcfa_org": resourceVcfaOrg(), // 1.0
"vcfa_nsx_manager": resourceVcfaNsxManager(), // 1.0
"vcfa_region": resourceVcfaRegion(), // 1.0
"vcfa_ip_space": resourceVcfaIpSpace(), // 1.0
"vcfa_org_vdc": resourceVcfaOrgVdc(), // 1.0
"vcfa_content_library": resourceVcfaContentLibrary(), // 1.0
"vcfa_content_library_item": resourceVcfaContentLibraryItem(), // 1.0
"vcfa_provider_gateway": resourceVcfaProviderGateway(), // 1.0
"vcfa_edge_cluster_qos": resourceVcfaEdgeClusterQos(), // 1.0
"vcfa_org_oidc": resourceVcfaOrgOidc(), // 1.0
"vcfa_org_networking": resourceVcfaOrgNetworking(), // 1.0
"vcfa_org_regional_networking": resourceVcfaOrgRegionalNetworking(), // 1.0
"vcfa_org_regional_networking_vpc_qos": resourceVcfaOrgRegionalNetworkingVpcQos(), // 1.0
"vcfa_rights_bundle": resourceVcfaRightsBundle(), // 1.0
}

// Provider returns a terraform.ResourceProvider.
Expand Down
80 changes: 80 additions & 0 deletions vcfa/resource_vcfa_org_regional_networking_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,16 @@ func TestAccVcfaOrgRegionalNetworking(t *testing.T) {
configText2 := templateFill(preRequisites+testAccVcfaOrgRegionalNetworkingStep2, params)
params["FuncName"] = t.Name() + "-step3"
configText3 := templateFill(preRequisites+testAccVcfaOrgRegionalNetworkingStep3DS, params)
params["FuncName"] = t.Name() + "-step4"
configText4 := templateFill(preRequisites+testAccVcfaOrgRegionalNetworkingStep4VpcQos, params)
params["FuncName"] = t.Name() + "-step5"
configText5 := templateFill(preRequisites+testAccVcfaOrgRegionalNetworkingStep5VpcQos, params)

debugPrintf("#[DEBUG] CONFIGURATION step1: %s\n", configText1)
debugPrintf("#[DEBUG] CONFIGURATION step2: %s\n", configText2)
debugPrintf("#[DEBUG] CONFIGURATION step3: %s\n", configText3)
debugPrintf("#[DEBUG] CONFIGURATION step4: %s\n", configText4)
debugPrintf("#[DEBUG] CONFIGURATION step5: %s\n", configText5)
if vcfaShortTest {
t.Skip(acceptanceTestsSkipped)
return
Expand Down Expand Up @@ -95,6 +101,50 @@ func TestAccVcfaOrgRegionalNetworking(t *testing.T) {
ImportStateVerify: true,
ImportStateId: fmt.Sprintf("%s%s%s", params["Testname"].(string), ImportSeparator, params["Testname"].(string)+"-upd"), // Org name and Region name
},
{ // Testing vcfa_org_regional_networking_vpc_qos - ensuring that the same QoS parameters are inherited from parent Edge Cluster
Config: configText4,
Check: resource.ComposeTestCheckFunc(
// Ensure that the same Edge Cluster is backing Org Regional Networking and that Egress and Ingress configurations are the same
resource.TestCheckResourceAttrPair("data.vcfa_edge_cluster_qos.test", "edge_cluster_id", "data.vcfa_org_regional_networking_vpc_qos.test", "edge_cluster_id"),
resource.TestCheckResourceAttrPair("data.vcfa_edge_cluster_qos.test", "ingress_committed_bandwidth_mbps", "data.vcfa_org_regional_networking_vpc_qos.test", "ingress_committed_bandwidth_mbps"),
resource.TestCheckResourceAttrPair("data.vcfa_edge_cluster_qos.test", "ingress_burst_size_bytes", "data.vcfa_org_regional_networking_vpc_qos.test", "ingress_burst_size_bytes"),
resource.TestCheckResourceAttrPair("data.vcfa_edge_cluster_qos.test", "egress_committed_bandwidth_mbps", "data.vcfa_org_regional_networking_vpc_qos.test", "egress_committed_bandwidth_mbps"),
resource.TestCheckResourceAttrPair("data.vcfa_edge_cluster_qos.test", "egress_burst_size_bytes", "data.vcfa_org_regional_networking_vpc_qos.test", "egress_burst_size_bytes"),
),
},
{ // Testing vcfa_org_regional_networking_vpc_qos - overriding default values to custom at VPC QoS level
Config: configText5,
Check: resource.ComposeTestCheckFunc(
// Ensure that the same Edge Cluster is backing Org Regional Networking and that Egress and Ingress configurations are the same
resource.TestCheckResourceAttrPair("data.vcfa_edge_cluster_qos.test", "edge_cluster_id", "data.vcfa_org_regional_networking_vpc_qos.test", "edge_cluster_id"),
resource.TestCheckResourceAttr("vcfa_org_regional_networking_vpc_qos.test", "ingress_committed_bandwidth_mbps", "14"),
resource.TestCheckResourceAttr("vcfa_org_regional_networking_vpc_qos.test", "ingress_burst_size_bytes", "15"),
resource.TestCheckResourceAttr("vcfa_org_regional_networking_vpc_qos.test", "egress_committed_bandwidth_mbps", "16"),
resource.TestCheckResourceAttr("vcfa_org_regional_networking_vpc_qos.test", "egress_burst_size_bytes", "17"),
),
},
{
// vcfa_org_regional_networking_vpc_qos has the same path as vcfa_org_regional_networking, because VPC QoS is just a property
ResourceName: "vcfa_org_regional_networking_vpc_qos.test",
ImportState: true,
ImportStateVerify: true,
ImportStateId: fmt.Sprintf("%s%s%s", params["Testname"].(string), ImportSeparator, params["Testname"].(string)+"-upd"),
},
{ // Testing vcfa_org_regional_networking_vpc_qos - check that after removing the custom VPC QoS
// Apply the config once only so that the data sources are reloaded after removal of resource
Config: configText4,
},
{ // Testing vcfa_org_regional_networking_vpc_qos - check that after removing the custom VPC QoS
Config: configText4,
Check: resource.ComposeTestCheckFunc(
// Ensure that the same Edge Cluster is backing Org Regional Networking and that Egress and Ingress configurations are the same
resource.TestCheckResourceAttrPair("data.vcfa_edge_cluster_qos.test", "edge_cluster_id", "data.vcfa_org_regional_networking_vpc_qos.test", "edge_cluster_id"),
resource.TestCheckResourceAttrPair("data.vcfa_edge_cluster_qos.test", "ingress_committed_bandwidth_mbps", "data.vcfa_org_regional_networking_vpc_qos.test", "ingress_committed_bandwidth_mbps"),
resource.TestCheckResourceAttrPair("data.vcfa_edge_cluster_qos.test", "ingress_burst_size_bytes", "data.vcfa_org_regional_networking_vpc_qos.test", "ingress_burst_size_bytes"),
resource.TestCheckResourceAttrPair("data.vcfa_edge_cluster_qos.test", "egress_committed_bandwidth_mbps", "data.vcfa_org_regional_networking_vpc_qos.test", "egress_committed_bandwidth_mbps"),
resource.TestCheckResourceAttrPair("data.vcfa_edge_cluster_qos.test", "egress_burst_size_bytes", "data.vcfa_org_regional_networking_vpc_qos.test", "egress_burst_size_bytes"),
),
},
},
})

Expand Down Expand Up @@ -149,3 +199,33 @@ data "vcfa_org_regional_networking" "test" {
org_id = vcfa_org.test.id
}
`

const testAccVcfaOrgRegionalNetworkingStep4VpcQos = testAccVcfaOrgRegionalNetworkingStep2 + `
data "vcfa_edge_cluster_qos" "test" {
edge_cluster_id = data.vcfa_edge_cluster.test.id
}

data "vcfa_org_regional_networking_vpc_qos" "test" {
org_regional_networking_id = vcfa_org_regional_networking.test.id
}

`

const testAccVcfaOrgRegionalNetworkingStep5VpcQos = testAccVcfaOrgRegionalNetworkingStep2 + `
data "vcfa_edge_cluster_qos" "test" {
edge_cluster_id = data.vcfa_edge_cluster.test.id
}

data "vcfa_org_regional_networking_vpc_qos" "test" {
org_regional_networking_id = vcfa_org_regional_networking.test.id
}

resource "vcfa_org_regional_networking_vpc_qos" "test" {
org_regional_networking_id = vcfa_org_regional_networking.test.id
ingress_committed_bandwidth_mbps = 14
ingress_burst_size_bytes = 15
egress_committed_bandwidth_mbps = 16
egress_burst_size_bytes = 17
}

`
Loading