From 5b2b86ce91f3257895f82b53a56e5d15f65d1c3a Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Wed, 20 Nov 2024 13:52:03 +0200 Subject: [PATCH 01/23] Split vcd_nsxt_manager data source and vcd_tm_nsxt_manager resources + data source Signed-off-by: Dainius Serplis --- go.mod | 2 + go.sum | 4 +- vcd/datasource_vcd_nsxt_manager.go | 70 ++++++++----------- vcd/datasource_vcd_tm_nsxt_manager.go | 67 ++++++++++++++++++ vcd/provider.go | 3 +- ...ger.go => resource_vcd_tm_nsxt_manager.go} | 2 +- ...o => resource_vcd_tm_nsxt_manager_test.go} | 34 ++++----- website/docs/d/nsxt_manager.html.markdown | 4 -- website/docs/d/tm_nsxt_manager.html.markdown | 41 +++++++++++ ...markdown => tm_nsxt_manager.html.markdown} | 14 ++-- website/vcd.erb | 7 +- 11 files changed, 175 insertions(+), 73 deletions(-) create mode 100644 vcd/datasource_vcd_tm_nsxt_manager.go rename vcd/{resource_vcd_nsxt_manager.go => resource_vcd_tm_nsxt_manager.go} (99%) rename vcd/{resource_vcd_nsxt_manager_test.go => resource_vcd_tm_nsxt_manager_test.go} (61%) create mode 100644 website/docs/d/tm_nsxt_manager.html.markdown rename website/docs/r/{nsxt_manager.html.markdown => tm_nsxt_manager.html.markdown} (85%) diff --git a/go.mod b/go.mod index d59f3d8ff..b8fbd9718 100644 --- a/go.mod +++ b/go.mod @@ -68,3 +68,5 @@ require ( google.golang.org/grpc v1.63.2 // indirect google.golang.org/protobuf v1.34.0 // indirect ) + +replace github.com/vmware/go-vcloud-director/v3 => github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241120114955-097f2128dbb3 diff --git a/go.sum b/go.sum index 20523d855..44bbcde23 100644 --- a/go.sum +++ b/go.sum @@ -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.20241120114955-097f2128dbb3 h1:rjYZ+LjAPMPpXY2vtac5H2UdVCVZ/e+LZdMLcBbFprQ= +github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241120114955-097f2128dbb3/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= @@ -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.6 h1:gCv8L2S9kIbgIiwmiX3Pip+BChuyMAB/XqSKUsFF3Og= -github.com/vmware/go-vcloud-director/v3 v3.0.0-alpha.6/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= diff --git a/vcd/datasource_vcd_nsxt_manager.go b/vcd/datasource_vcd_nsxt_manager.go index ef5f15e4e..6bb4bf9d4 100644 --- a/vcd/datasource_vcd_nsxt_manager.go +++ b/vcd/datasource_vcd_nsxt_manager.go @@ -2,66 +2,58 @@ package vcd import ( "context" - "fmt" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/vmware/go-vcloud-director/v3/govcd" - "github.com/vmware/go-vcloud-director/v3/types/v56" ) -// TODO: TM: validate compatibility with old data source - func datasourceVcdNsxtManager() *schema.Resource { return &schema.Resource{ - ReadContext: datasourceVcdNsxtManagerRead, - + ReadContext: datasourceNsxtManagerRead, Schema: map[string]*schema.Schema{ "name": { Type: schema.TypeString, Required: true, - Description: fmt.Sprintf("Name of %s", labelNsxtManager), - }, - "description": { - Type: schema.TypeString, - Computed: true, - Description: fmt.Sprintf("Description of %s", labelNsxtManager), - }, - "username": { - Type: schema.TypeString, - Computed: true, - Description: fmt.Sprintf("Username for authenticating to %s", labelNsxtManager), - }, - "url": { - Type: schema.TypeString, - Computed: true, - Description: fmt.Sprintf("URL of %s", labelNsxtManager), - }, - "network_provider_scope": { - Type: schema.TypeString, - Computed: true, - Description: fmt.Sprintf("Network Provider Scope for %s", labelNsxtManager), - }, - "status": { - Type: schema.TypeString, - Computed: true, - Description: fmt.Sprintf("Status of %s", labelNsxtManager), + Description: "Name of NSX-T manager.", }, "href": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("HREF of %s", labelNsxtManager), + Description: "HREF of NSX-T manager.", }, }, } } -func datasourceVcdNsxtManagerRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { +func datasourceNsxtManagerRead(_ context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { vcdClient := meta.(*VCDClient) - c := crudConfig[*govcd.NsxtManagerOpenApi, types.NsxtManagerOpenApi]{ - entityLabel: labelNsxtManager, - getEntityFunc: vcdClient.GetNsxtManagerOpenApiByName, - stateStoreFunc: setNsxtManagerData, + nsxtManagerName := d.Get("name").(string) + + nsxtManagers, err := vcdClient.QueryNsxtManagerByName(nsxtManagerName) + if err != nil { + return diag.Errorf("could not find NSX-T manager by name '%s': %s", nsxtManagerName, err) } - return readDatasource(ctx, d, meta, c) + + if len(nsxtManagers) == 0 { + return diag.Errorf("%s found %d NSX-T managers with name '%s'", + govcd.ErrorEntityNotFound, len(nsxtManagers), nsxtManagerName) + } + + if len(nsxtManagers) > 1 { + return diag.Errorf("found %d NSX-T managers with name '%s'", len(nsxtManagers), nsxtManagerName) + } + + // We try to keep IDs clean + id := extractUuid(nsxtManagers[0].HREF) + urn, err := govcd.BuildUrnWithUuid("urn:vcloud:nsxtmanager:", id) + if err != nil { + return diag.Errorf("could not construct URN from id '%s': %s", id, err) + } + dSet(d, "name", nsxtManagers[0].Name) + dSet(d, "href", nsxtManagers[0].HREF) + d.SetId(urn) + + return nil } diff --git a/vcd/datasource_vcd_tm_nsxt_manager.go b/vcd/datasource_vcd_tm_nsxt_manager.go new file mode 100644 index 000000000..0a7ba21ba --- /dev/null +++ b/vcd/datasource_vcd_tm_nsxt_manager.go @@ -0,0 +1,67 @@ +package vcd + +import ( + "context" + "fmt" + + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/vmware/go-vcloud-director/v3/govcd" + "github.com/vmware/go-vcloud-director/v3/types/v56" +) + +// TODO: TM: validate compatibility with old data source + +func datasourceVcdTmNsxtManager() *schema.Resource { + return &schema.Resource{ + ReadContext: datasourceVcdNsxtManagerRead, + + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + Description: fmt.Sprintf("Name of %s", labelNsxtManager), + }, + "description": { + Type: schema.TypeString, + Computed: true, + Description: fmt.Sprintf("Description of %s", labelNsxtManager), + }, + "username": { + Type: schema.TypeString, + Computed: true, + Description: fmt.Sprintf("Username for authenticating to %s", labelNsxtManager), + }, + "url": { + Type: schema.TypeString, + Computed: true, + Description: fmt.Sprintf("URL of %s", labelNsxtManager), + }, + "network_provider_scope": { + Type: schema.TypeString, + Computed: true, + Description: fmt.Sprintf("Network Provider Scope for %s", labelNsxtManager), + }, + "status": { + Type: schema.TypeString, + Computed: true, + Description: fmt.Sprintf("Status of %s", labelNsxtManager), + }, + "href": { + Type: schema.TypeString, + Computed: true, + Description: fmt.Sprintf("HREF of %s", labelNsxtManager), + }, + }, + } +} + +func datasourceVcdNsxtManagerRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + vcdClient := meta.(*VCDClient) + c := crudConfig[*govcd.NsxtManagerOpenApi, types.NsxtManagerOpenApi]{ + entityLabel: labelNsxtManager, + getEntityFunc: vcdClient.GetNsxtManagerOpenApiByName, + stateStoreFunc: setNsxtManagerData, + } + return readDatasource(ctx, d, meta, c) +} diff --git a/vcd/provider.go b/vcd/provider.go index a9d32e319..a08026a4e 100644 --- a/vcd/provider.go +++ b/vcd/provider.go @@ -181,6 +181,7 @@ var globalDataSourceMap = map[string]*schema.Resource{ "vcd_tm_supervisor": datasourceVcdTmSupervisor(), // 4.0 "vcd_tm_supervisor_zone": datasourceVcdTmSupervisorZone(), // 4.0 "vcd_tm_region": datasourceVcdTmRegion(), // 4.0 + "vcd_tm_nsxt_manager": datasourceVcdTmNsxtManager(), // 4.0 } var globalResourceMap = map[string]*schema.Resource{ @@ -308,7 +309,7 @@ var globalResourceMap = map[string]*schema.Resource{ "vcd_nsxt_alb_virtual_service_http_resp_rules": resourceVcdAlbVirtualServiceRespRules(), // 3.14 "vcd_nsxt_alb_virtual_service_http_sec_rules": resourceVcdAlbVirtualServiceSecRules(), // 3.14 "vcd_tm_content_library": resourceVcdTmContentLibrary(), // 4.0 - "vcd_nsxt_manager": resourceVcdNsxtManager(), // 4.0 + "vcd_tm_nsxt_manager": resourceVcdTmNsxtManager(), // 4.0 "vcd_vcenter": resourceVcdVcenter(), // 4.0 "vcd_tm_org": resourceVcdTmOrg(), // 4.0 "vcd_tm_region": resourceVcdTmRegion(), // 4.0 diff --git a/vcd/resource_vcd_nsxt_manager.go b/vcd/resource_vcd_tm_nsxt_manager.go similarity index 99% rename from vcd/resource_vcd_nsxt_manager.go rename to vcd/resource_vcd_tm_nsxt_manager.go index 105ba3482..06d597bab 100644 --- a/vcd/resource_vcd_nsxt_manager.go +++ b/vcd/resource_vcd_tm_nsxt_manager.go @@ -12,7 +12,7 @@ import ( const labelNsxtManager = "NSX-T Manager" -func resourceVcdNsxtManager() *schema.Resource { +func resourceVcdTmNsxtManager() *schema.Resource { return &schema.Resource{ CreateContext: resourceVcdNsxtManagerCreate, ReadContext: resourceVcdNsxtManagerRead, diff --git a/vcd/resource_vcd_nsxt_manager_test.go b/vcd/resource_vcd_tm_nsxt_manager_test.go similarity index 61% rename from vcd/resource_vcd_nsxt_manager_test.go rename to vcd/resource_vcd_tm_nsxt_manager_test.go index 4bde6eb40..eae70831f 100644 --- a/vcd/resource_vcd_nsxt_manager_test.go +++ b/vcd/resource_vcd_tm_nsxt_manager_test.go @@ -9,7 +9,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) -func TestAccVcdNsxtManager(t *testing.T) { +func TestAccVcdTmNsxtManager(t *testing.T) { preTestChecks(t) skipIfNotSysAdmin(t) @@ -49,31 +49,31 @@ func TestAccVcdNsxtManager(t *testing.T) { { Config: configText1, Check: resource.ComposeTestCheckFunc( - resource.TestMatchResourceAttr("vcd_nsxt_manager.test", "id", regexp.MustCompile(`^urn:vcloud:nsxtmanager:`)), - resource.TestMatchResourceAttr("vcd_nsxt_manager.test", "href", regexp.MustCompile(`api/admin/extension/nsxtManagers/`)), - resource.TestCheckResourceAttr("vcd_nsxt_manager.test", "name", params["Testname"].(string)), - resource.TestCheckResourceAttr("vcd_nsxt_manager.test", "description", "terraform test"), - resource.TestCheckResourceAttrSet("vcd_nsxt_manager.test", "status"), - resource.TestCheckResourceAttr("vcd_nsxt_manager.test", "url", params["Url"].(string)), + resource.TestMatchResourceAttr("vcd_tm_nsxt_manager.test", "id", regexp.MustCompile(`^urn:vcloud:nsxtmanager:`)), + resource.TestMatchResourceAttr("vcd_tm_nsxt_manager.test", "href", regexp.MustCompile(`api/admin/extension/nsxtManagers/`)), + resource.TestCheckResourceAttr("vcd_tm_nsxt_manager.test", "name", params["Testname"].(string)), + resource.TestCheckResourceAttr("vcd_tm_nsxt_manager.test", "description", "terraform test"), + resource.TestCheckResourceAttrSet("vcd_tm_nsxt_manager.test", "status"), + resource.TestCheckResourceAttr("vcd_tm_nsxt_manager.test", "url", params["Url"].(string)), ), }, { Config: configText2, Check: resource.ComposeTestCheckFunc( - resource.TestMatchResourceAttr("vcd_nsxt_manager.test", "id", regexp.MustCompile(`^urn:vcloud:nsxtmanager:`)), - resource.TestMatchResourceAttr("vcd_nsxt_manager.test", "href", regexp.MustCompile(`api/admin/extension/nsxtManagers/`)), - resource.TestCheckResourceAttr("vcd_nsxt_manager.test", "name", params["Testname"].(string)), - resource.TestCheckResourceAttr("vcd_nsxt_manager.test", "description", ""), + resource.TestMatchResourceAttr("vcd_tm_nsxt_manager.test", "id", regexp.MustCompile(`^urn:vcloud:nsxtmanager:`)), + resource.TestMatchResourceAttr("vcd_tm_nsxt_manager.test", "href", regexp.MustCompile(`api/admin/extension/nsxtManagers/`)), + resource.TestCheckResourceAttr("vcd_tm_nsxt_manager.test", "name", params["Testname"].(string)), + resource.TestCheckResourceAttr("vcd_tm_nsxt_manager.test", "description", ""), ), }, { Config: configText3, Check: resource.ComposeTestCheckFunc( - resourceFieldsEqual("vcd_nsxt_manager.test", "data.vcd_nsxt_manager.test", []string{"%", "auto_trust_certificate", "password"}), + resourceFieldsEqual("vcd_tm_nsxt_manager.test", "data.vcd_tm_nsxt_manager.test", []string{"%", "auto_trust_certificate", "password"}), ), }, { - ResourceName: "vcd_nsxt_manager.test", + ResourceName: "vcd_tm_nsxt_manager.test", ImportState: true, ImportStateVerify: true, ImportStateId: params["Testname"].(string), @@ -86,7 +86,7 @@ func TestAccVcdNsxtManager(t *testing.T) { } const testAccVcdNsxtManagerStep1 = ` -resource "vcd_nsxt_manager" "test" { +resource "vcd_tm_nsxt_manager" "test" { name = "{{.Testname}}" description = "terraform test" username = "{{.Username}}" @@ -97,7 +97,7 @@ resource "vcd_nsxt_manager" "test" { } ` const testAccVcdNsxtManagerStep2 = ` -resource "vcd_nsxt_manager" "test" { +resource "vcd_tm_nsxt_manager" "test" { name = "{{.Testname}}" description = "" username = "{{.Username}}" @@ -108,7 +108,7 @@ resource "vcd_nsxt_manager" "test" { ` const testAccVcdNsxtManagerStep3DS = testAccVcdNsxtManagerStep1 + ` -data "vcd_nsxt_manager" "test" { - name = vcd_nsxt_manager.test.name +data "vcd_tm_nsxt_manager" "test" { + name = vcd_tm_nsxt_manager.test.name } ` diff --git a/website/docs/d/nsxt_manager.html.markdown b/website/docs/d/nsxt_manager.html.markdown index 1b54075d3..ccbcc7cf3 100644 --- a/website/docs/d/nsxt_manager.html.markdown +++ b/website/docs/d/nsxt_manager.html.markdown @@ -35,7 +35,3 @@ The following arguments are supported: * `id` - ID of the manager * `href` - Full URL of the manager - -All attributes defined in -[`vcd_nsxt_manager`](/providers/vmware/vcd/latest/docs/resources/nsxt_manager#attribute-reference) -are supported. diff --git a/website/docs/d/tm_nsxt_manager.html.markdown b/website/docs/d/tm_nsxt_manager.html.markdown new file mode 100644 index 000000000..db4a394fb --- /dev/null +++ b/website/docs/d/tm_nsxt_manager.html.markdown @@ -0,0 +1,41 @@ +--- +layout: "vcd" +page_title: "VMware Cloud Director: vcd_tm_nsxt_manager" +sidebar_current: "docs-vcd-data-source-tm-nsxt-manager" +description: |- + Provides a data source for available Tenant Manager NSX-T manager. +--- + +# vcd\_tm\_nsxt\_manager + +Provides a data source for available Tenant Manager NSX-T manager. + +Supported in provider *v3.0+* + +~> **Note:** This resource uses new VMware Cloud Director +[OpenAPI](https://code.vmware.com/docs/11982/getting-started-with-vmware-cloud-director-openapi) and +requires at least VCD *10.1.1+* and NSX-T *3.0+*. + +## Example Usage + +```hcl +data "vcd_nsxt_manager" "main" { + name = "nsxt-manager-one" +} +``` + + +## Argument Reference + +The following arguments are supported: + +* `name` - (Required) NSX-T manager name + +## Attribute reference + +* `id` - ID of the manager +* `href` - Full URL of the manager + +All attributes defined in +[`vcd_nsxt_manager`](/providers/vmware/vcd/latest/docs/resources/nsxt_manager#attribute-reference) +are supported. diff --git a/website/docs/r/nsxt_manager.html.markdown b/website/docs/r/tm_nsxt_manager.html.markdown similarity index 85% rename from website/docs/r/nsxt_manager.html.markdown rename to website/docs/r/tm_nsxt_manager.html.markdown index 894be73c4..43015d43a 100644 --- a/website/docs/r/nsxt_manager.html.markdown +++ b/website/docs/r/tm_nsxt_manager.html.markdown @@ -1,21 +1,21 @@ --- layout: "vcd" -page_title: "VMware Cloud Director: vcd_nsxt_manager" -sidebar_current: "docs-vcd-resource-nsxt-manager" +page_title: "VMware Cloud Director: vcd_tm_nsxt_manager" +sidebar_current: "docs-vcd-resource-tm-nsxt-manager" description: |- - Provides a resource to manage NSX-T Managers. + Provides a resource to manage Tenant Manager NSX-T Managers. --- -# vcd\_nsxt\_manager +# vcd\_tm\_nsxt\_manager -Provides a resource to manage NSX-T Managers. +Provides a resource to manage Tenant Manager NSX-T Managers. ~> Only `System Administrator` can create this resource. ## Example Usage ```hcl -resource "vcd_nsxt_manager" "test" { +resource "vcd_tm_nsxt_manager" "test" { name = "TestAccVcdTmNsxtManager" description = "terraform test" username = "admin" @@ -63,7 +63,7 @@ supplying path for it. An example is below: [docs-import]: https://www.terraform.io/docs/import/ ``` -terraform import vcd_nsxt_manager.imported my-nsxt-manager +terraform import vcd_tm_nsxt_manager.imported my-nsxt-manager ``` The above would import the `my-nsxt-manager` NSX-T Manager settings that are defined at provider diff --git a/website/vcd.erb b/website/vcd.erb index 6e707c2c9..0320ee62e 100644 --- a/website/vcd.erb +++ b/website/vcd.erb @@ -499,6 +499,9 @@ > vcd_tm_region + > + vcd_tm_nsxt_manager + > @@ -872,8 +875,8 @@ > vcd_vcenter - > - vcd_nsxt_manager + > + vcd_tm_nsxt_manager > vcd_tm_region From ca9a6d66c6c15d6b6cef2a11d2155180c198a2a5 Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Wed, 20 Nov 2024 13:59:36 +0200 Subject: [PATCH 02/23] Test and doc references + changelog Signed-off-by: Dainius Serplis --- .changes/v4.0.0/1343-features.md | 3 ++- vcd/resource_vcd_tm_region_test.go | 10 +++++----- vcd/tm_common_test.go | 11 ++++++----- website/docs/d/tm_nsxt_manager.html.markdown | 4 ++-- website/docs/r/tm_region.html.markdown | 4 ++-- 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/.changes/v4.0.0/1343-features.md b/.changes/v4.0.0/1343-features.md index a21894dd1..ffd5e9090 100644 --- a/.changes/v4.0.0/1343-features.md +++ b/.changes/v4.0.0/1343-features.md @@ -1,2 +1,3 @@ * **New Resource:** `vcd_vcenter` to manage vCenter servers [GH-1343, GH-1348] -* **New Resource:** `vcd_nsxt_manager` to manage NSX-T Managers [GH-1343] +* **New Resource:** `vcd_tm_nsxt_manager` to manage NSX-T Managers [GH-1343, GH-1355] +* **New Data Source:** `vcd_tm_nsxt_manager` to manage NSX-T Managers [GH-1343, GH-1355] diff --git a/vcd/resource_vcd_tm_region_test.go b/vcd/resource_vcd_tm_region_test.go index 763f9d236..efe6be8b8 100644 --- a/vcd/resource_vcd_tm_region_test.go +++ b/vcd/resource_vcd_tm_region_test.go @@ -61,7 +61,7 @@ func TestAccVcdTmRegion(t *testing.T) { { Config: configText1, Check: resource.ComposeTestCheckFunc( - resource.TestMatchResourceAttr("vcd_nsxt_manager.test", "id", regexp.MustCompile(`^urn:vcloud:nsxtmanager:`)), + resource.TestMatchResourceAttr("vcd_tm_nsxt_manager.test", "id", regexp.MustCompile(`^urn:vcloud:nsxtmanager:`)), resource.TestCheckResourceAttrSet("vcd_vcenter.test", "id"), resource.TestCheckResourceAttrSet("vcd_tm_region.test", "id"), cachedRegionId.cacheTestResourceFieldValue("vcd_tm_region.test", "id"), @@ -88,7 +88,7 @@ func TestAccVcdTmRegion(t *testing.T) { { Config: configText2, Check: resource.ComposeTestCheckFunc( - resource.TestMatchResourceAttr("vcd_nsxt_manager.test", "id", regexp.MustCompile(`^urn:vcloud:nsxtmanager:`)), + resource.TestMatchResourceAttr("vcd_tm_nsxt_manager.test", "id", regexp.MustCompile(`^urn:vcloud:nsxtmanager:`)), resource.TestCheckResourceAttrSet("vcd_vcenter.test", "id"), resource.TestCheckResourceAttrSet("vcd_tm_region.test", "id"), cachedRegionId.testCheckCachedResourceFieldValueChanged("vcd_tm_region.test", "id"), @@ -137,7 +137,7 @@ func TestAccVcdTmRegion(t *testing.T) { } const testAccVcdRegionPrerequisites = ` -resource "vcd_nsxt_manager" "test" { +resource "vcd_tm_nsxt_manager" "test" { name = "{{.Testname}}" description = "terraform test" username = "{{.NsxtManagerUsername}}" @@ -176,7 +176,7 @@ resource "vcd_tm_region" "test" { name = "{{.Testname}}" description = "Terraform description" is_enabled = true - nsx_manager_id = vcd_nsxt_manager.test.id + nsx_manager_id = vcd_tm_nsxt_manager.test.id supervisor_ids = [data.vcd_tm_supervisor.test.id] storage_policy_names = ["{{.VcenterStorageProfile}}"] } @@ -188,7 +188,7 @@ resource "vcd_tm_region" "test" { name = "{{.Testname}}" description = "Terraform description updated" is_enabled = true - nsx_manager_id = vcd_nsxt_manager.test.id + nsx_manager_id = vcd_tm_nsxt_manager.test.id supervisor_ids = [data.vcd_tm_supervisor.test.id] storage_policy_names = ["{{.VcenterStorageProfile}}"] } diff --git a/vcd/tm_common_test.go b/vcd/tm_common_test.go index bef91971b..f49e705b9 100644 --- a/vcd/tm_common_test.go +++ b/vcd/tm_common_test.go @@ -3,8 +3,9 @@ package vcd import ( - "github.com/vmware/go-vcloud-director/v3/govcd" "testing" + + "github.com/vmware/go-vcloud-director/v3/govcd" ) // getVCenterHcl gets a vCenter data source as first returned parameter and its HCL reference as second one, @@ -50,10 +51,10 @@ func getNsxManagerHcl(t *testing.T) (string, string) { nsxtManager, err := vcdClient.GetNsxtManagerOpenApiByUrl(testConfig.Tm.NsxtManagerUrl) if err == nil { return ` -data "vcd_nsxt_manager" "nsx_manager" { +data "vcd_tm_nsxt_manager" "nsx_manager" { name = "` + nsxtManager.NsxtManagerOpenApi.Name + `" } -`, "data.vcd_nsxt_manager.nsx_manager" +`, "data.vcd_tm_nsxt_manager.nsx_manager" } if !govcd.ContainsNotFound(err) { t.Fatal(err) @@ -64,7 +65,7 @@ data "vcd_nsxt_manager" "nsx_manager" { return "", "" } return ` -resource "vcd_nsxt_manager" "nsx_manager" { +resource "vcd_tm_nsxt_manager" "nsx_manager" { name = "` + t.Name() + `" description = "` + t.Name() + `" username = "` + testConfig.Tm.NsxtManagerUsername + `" @@ -74,7 +75,7 @@ resource "vcd_nsxt_manager" "nsx_manager" { auto_trust_certificate = true } -`, "vcd_nsxt_manager.nsx_manager" +`, "vcd_tm_nsxt_manager.nsx_manager" } // getRegionHcl gets a Region data source as first returned parameter and its HCL reference as second one, diff --git a/website/docs/d/tm_nsxt_manager.html.markdown b/website/docs/d/tm_nsxt_manager.html.markdown index db4a394fb..550d215b0 100644 --- a/website/docs/d/tm_nsxt_manager.html.markdown +++ b/website/docs/d/tm_nsxt_manager.html.markdown @@ -19,7 +19,7 @@ requires at least VCD *10.1.1+* and NSX-T *3.0+*. ## Example Usage ```hcl -data "vcd_nsxt_manager" "main" { +data "vcd_tm_nsxt_manager" "main" { name = "nsxt-manager-one" } ``` @@ -37,5 +37,5 @@ The following arguments are supported: * `href` - Full URL of the manager All attributes defined in -[`vcd_nsxt_manager`](/providers/vmware/vcd/latest/docs/resources/nsxt_manager#attribute-reference) +[`vcd_tm_nsxt_manager`](/providers/vmware/vcd/latest/docs/resources/tm_nsxt_manager#attribute-reference) are supported. diff --git a/website/docs/r/tm_region.html.markdown b/website/docs/r/tm_region.html.markdown index 21a9fc49d..72c67d869 100644 --- a/website/docs/r/tm_region.html.markdown +++ b/website/docs/r/tm_region.html.markdown @@ -24,7 +24,7 @@ data "vcd_tm_supervisor" "one" { resource "vcd_tm_region" "one" { name = "region-one" is_enabled = true - nsx_manager_id = data.vcd_nsxt_manager.test.id + nsx_manager_id = data.vcd_tm_nsxt_manager.test.id supervisor_ids = [data.vcd_tm_supervisor.test.id] storage_policy_names = ["vSAN Default Storage Policy"] } @@ -38,7 +38,7 @@ The following arguments are supported: * `description` - (Optional) An optional description for Region * `is_enabled` - (Optional) Defines if the Region is enabled. Default is `true` * `nsx_manager_id` - (Required) NSX-T Manager assigned to this region. Can be looked up using - [`vcd_nsxt_manager`](/providers/vmware/vcd/latest/docs/data-sources/nsxt_manager) + [`vcd_tm_nsxt_manager`](/providers/vmware/vcd/latest/docs/data-sources/tm_nsxt_manager) * `supervisor_ids` - (Required) A set of Supervisor IDs. At least one is required. Can be looked up using [`vcd_tm_supervisor`](/providers/vmware/vcd/latest/docs/data-sources/tm_supervisor) * `storage_policy_names` - (Required) A set of Storage Policy names to be used for this region. At From 7cb5ff5a405e8a6a5571c5abc9bde1107b8db90b Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Wed, 20 Nov 2024 14:26:09 +0200 Subject: [PATCH 03/23] Add make testacc-coverage Signed-off-by: Dainius Serplis --- GNUmakefile | 4 ++++ scripts/runtest.sh | 3 +++ 2 files changed, 7 insertions(+) diff --git a/GNUmakefile b/GNUmakefile index a10044514..8cc0466ba 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -88,6 +88,10 @@ testacc-orguser: testunit testacc: testunit @sh -c "'$(CURDIR)/scripts/runtest.sh' acceptance" +# Runs the full acceptance test as system administrator +testacc-coverage: testunit + @sh -c "'$(CURDIR)/scripts/runtest.sh' acceptance" + # Runs the acceptance test as system administrator for search label test-search: testunit @sh -c "'$(CURDIR)/scripts/runtest.sh' search" diff --git a/scripts/runtest.sh b/scripts/runtest.sh index 2218a311e..31401c7b8 100755 --- a/scripts/runtest.sh +++ b/scripts/runtest.sh @@ -373,6 +373,9 @@ case $wanted in acceptance) acceptance_test functional ;; + acceptance-coverage) + acceptance_test functional "-coverprofile testacc.cover" + ;; sequential-acceptance) acceptance_test functional "-race --parallel=1" ;; From 096f86293746055474d9f661081750df57edf0e8 Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Wed, 20 Nov 2024 14:31:44 +0200 Subject: [PATCH 04/23] Remove -race flag because it requires CGO_ENABLED Signed-off-by: Dainius Serplis --- scripts/runtest.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/runtest.sh b/scripts/runtest.sh index 31401c7b8..b27a63f46 100755 --- a/scripts/runtest.sh +++ b/scripts/runtest.sh @@ -80,13 +80,13 @@ function check_for_config_file { function unit_test { if [ -n "$VERBOSE" ] then - echo "go test -race -tags unit ${TEST} || exit 1" - echo "go test -race -tags unit -v -timeout 5m" + echo "go test -tags unit ${TEST} || exit 1" + echo "go test -tags unit -v -timeout 5m" fi if [ -z "$DRY_RUN" ] then - go test -race -tags unit ${TEST} || exit 1 - go test -race -tags unit -v -timeout 5m + go test -tags unit ${TEST} || exit 1 + go test -tags unit -v -timeout 5m fi } From ee2c5b49428386c11b32c293548ad18c5040cd03 Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Thu, 21 Nov 2024 10:38:37 +0200 Subject: [PATCH 05/23] Fix makefile to run with coverage if requested Signed-off-by: Dainius Serplis --- GNUmakefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GNUmakefile b/GNUmakefile index 8cc0466ba..ebe268fe2 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -90,7 +90,7 @@ testacc: testunit # Runs the full acceptance test as system administrator testacc-coverage: testunit - @sh -c "'$(CURDIR)/scripts/runtest.sh' acceptance" + @sh -c "'$(CURDIR)/scripts/runtest.sh' acceptance-coverage" # Runs the acceptance test as system administrator for search label test-search: testunit From 5b91788f3f5f9f379804927ac5331c8a0bd0745c Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Thu, 21 Nov 2024 10:39:28 +0200 Subject: [PATCH 06/23] Improve gitignore Signed-off-by: Dainius Serplis --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c196a06ee..3dcb0c38a 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ website/node_modules *.cover vcd/vcd_test_config*.json +vcd_test_config*.json vcd/go-vcloud-director.log vcd/test-artifacts website/vendor From 727027645478cfc4fc1ae25e1c58f5ba9a4e8e56 Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Thu, 21 Nov 2024 10:44:32 +0200 Subject: [PATCH 07/23] Run 'unit' tests as well during testacc Signed-off-by: Dainius Serplis --- scripts/runtest.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/runtest.sh b/scripts/runtest.sh index b27a63f46..bab35cbf5 100755 --- a/scripts/runtest.sh +++ b/scripts/runtest.sh @@ -371,10 +371,10 @@ case $wanted in acceptance_test functional ;; acceptance) - acceptance_test functional + acceptance_test "functional unit" ;; acceptance-coverage) - acceptance_test functional "-coverprofile testacc.cover" + acceptance_test "functional unit" "-coverprofile testacc.cover" ;; sequential-acceptance) acceptance_test functional "-race --parallel=1" From 91e9c5dc3d046d8ad84e695b8c05a8cb71ea5379 Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Thu, 21 Nov 2024 11:41:32 +0200 Subject: [PATCH 08/23] Recalibrate 'vcd_vcenter' data source to be backwards compatible Signed-off-by: Dainius Serplis --- .changes/v4.0.0/1343-features.md | 2 +- vcd/datasource_vcd_vcenter.go | 46 ++++++++++++++++++++++++++-- vcd/resource_vcd_vcenter.go | 23 +++++++++++--- website/docs/r/vcenter.html.markdown | 3 +- 4 files changed, 66 insertions(+), 8 deletions(-) diff --git a/.changes/v4.0.0/1343-features.md b/.changes/v4.0.0/1343-features.md index ffd5e9090..d7677ddeb 100644 --- a/.changes/v4.0.0/1343-features.md +++ b/.changes/v4.0.0/1343-features.md @@ -1,3 +1,3 @@ -* **New Resource:** `vcd_vcenter` to manage vCenter servers [GH-1343, GH-1348] +* **New Resource:** `vcd_vcenter` to manage vCenter servers [GH-1343, GH-1348, GH-1355] * **New Resource:** `vcd_tm_nsxt_manager` to manage NSX-T Managers [GH-1343, GH-1355] * **New Data Source:** `vcd_tm_nsxt_manager` to manage NSX-T Managers [GH-1343, GH-1355] diff --git a/vcd/datasource_vcd_vcenter.go b/vcd/datasource_vcd_vcenter.go index 11e22ea16..62ee1a1a8 100644 --- a/vcd/datasource_vcd_vcenter.go +++ b/vcd/datasource_vcd_vcenter.go @@ -3,6 +3,7 @@ package vcd import ( "context" "fmt" + "net/url" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -57,7 +58,7 @@ func datasourceVcdVcenter() *schema.Resource { Computed: true, Description: fmt.Sprintf("Mode of %s", labelVirtualCenter), }, - "listener_state": { + "connection_status": { Type: schema.TypeString, Computed: true, Description: fmt.Sprintf("Listener state of %s", labelVirtualCenter), @@ -67,7 +68,7 @@ func datasourceVcdVcenter() *schema.Resource { Computed: true, Description: fmt.Sprintf("Mode of %s", labelVirtualCenter), }, - "version": { + "vcenter_version": { Type: schema.TypeString, Computed: true, Description: fmt.Sprintf("Version of %s", labelVirtualCenter), @@ -77,12 +78,26 @@ func datasourceVcdVcenter() *schema.Resource { Computed: true, Description: fmt.Sprintf("%s UUID", labelVirtualCenter), }, + "vcenter_host": { + Type: schema.TypeString, + Computed: true, + Description: fmt.Sprintf("%s hostname", labelVirtualCenter), + }, + "status": { + Type: schema.TypeString, + Computed: true, + Description: "vCenter status", + }, }, } } func datasourceVcdVcenterRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { vcdClient := meta.(*VCDClient) + if err := classicVcdVcenterReadStatus(vcdClient, d); err != nil { + return err + } + c := crudConfig[*govcd.VCenter, types.VSphereVirtualCenter]{ entityLabel: labelVirtualCenter, getEntityFunc: vcdClient.GetVCenterByName, @@ -90,3 +105,30 @@ func datasourceVcdVcenterRead(ctx context.Context, d *schema.ResourceData, meta } return readDatasource(ctx, d, meta, c) } + +// classicVcdVcenterReadStatus +func classicVcdVcenterReadStatus(vcdClient *VCDClient, d *schema.ResourceData) diag.Diagnostics { + if vcdClient.Client.IsTm() { + return nil + } + vCenterName := d.Get("name").(string) + + vcs, err := govcd.QueryVirtualCenters(vcdClient.VCDClient, "name=="+url.QueryEscape(vCenterName)) + if err != nil { + return diag.Errorf("error occurred while querying vCenters: %s", err) + } + + if len(vcs) == 0 { + return diag.Errorf("%s: could not identify single vCenter. Got %d with name '%s'", + govcd.ErrorEntityNotFound, len(vcs), vCenterName) + } + + if len(vcs) > 1 { + return diag.Errorf("could not identify single vCenter. Got %d with name '%s'", + len(vcs), vCenterName) + } + + d.Set("status", vcs[0].Status) + + return nil +} diff --git a/vcd/resource_vcd_vcenter.go b/vcd/resource_vcd_vcenter.go index 9f52bb408..2432efc9a 100644 --- a/vcd/resource_vcd_vcenter.go +++ b/vcd/resource_vcd_vcenter.go @@ -88,7 +88,7 @@ func resourceVcdVcenter() *schema.Resource { Computed: true, Description: fmt.Sprintf("Mode of %s", labelVirtualCenter), }, - "listener_state": { + "connection_status": { Type: schema.TypeString, Computed: true, Description: fmt.Sprintf("Listener state of %s", labelVirtualCenter), @@ -98,7 +98,7 @@ func resourceVcdVcenter() *schema.Resource { Computed: true, Description: fmt.Sprintf("Mode of %s", labelVirtualCenter), }, - "version": { + "vcenter_version": { Type: schema.TypeString, Computed: true, Description: fmt.Sprintf("Version of %s", labelVirtualCenter), @@ -108,6 +108,16 @@ func resourceVcdVcenter() *schema.Resource { Computed: true, Description: fmt.Sprintf("%s UUID", labelVirtualCenter), }, + "vcenter_host": { + Type: schema.TypeString, + Computed: true, + Description: fmt.Sprintf("%s hostname", labelVirtualCenter), + }, + "status": { + Type: schema.TypeString, + Computed: true, + Description: "vCenter status", + }, }, } } @@ -140,10 +150,15 @@ func setTmVcenterData(d *schema.ResourceData, v *govcd.VCenter) error { dSet(d, "has_proxy", v.VSphereVCenter.HasProxy) dSet(d, "is_connected", v.VSphereVCenter.IsConnected) dSet(d, "mode", v.VSphereVCenter.Mode) - dSet(d, "listener_state", v.VSphereVCenter.ListenerState) + dSet(d, "connection_status", v.VSphereVCenter.ListenerState) dSet(d, "cluster_health_status", v.VSphereVCenter.ClusterHealthStatus) - dSet(d, "version", v.VSphereVCenter.VcVersion) + dSet(d, "vcenter_version", v.VSphereVCenter.VcVersion) dSet(d, "uuid", v.VSphereVCenter.Uuid) + host, err := url.Parse(v.VSphereVCenter.Url) + if err != nil { + return fmt.Errorf("error parsing URL for storing 'vcenter_host': %s", err) + } + dSet(d, "vcenter_host", host.Host) d.SetId(v.VSphereVCenter.VcId) diff --git a/website/docs/r/vcenter.html.markdown b/website/docs/r/vcenter.html.markdown index 7b4c64074..b07b1f5b8 100644 --- a/website/docs/r/vcenter.html.markdown +++ b/website/docs/r/vcenter.html.markdown @@ -61,11 +61,12 @@ The following attributes are exported on this resource: * `is_connected` - Defines if the vCenter server is connected. * `mode` - One of `NONE`, `IAAS` (scoped to the provider), `SDDC` (scoped to tenants), `MIXED` (both uses are possible) -* `listener_state` - `INITIAL`, `INVALID_SETTINGS`, `UNSUPPORTED`, `DISCONNECTED`, `CONNECTING`, +* `connection_status` - `INITIAL`, `INVALID_SETTINGS`, `UNSUPPORTED`, `DISCONNECTED`, `CONNECTING`, `CONNECTED_SYNCING`, `CONNECTED`, `STOP_REQ`, `STOP_AND_PURGE_REQ`, `STOP_ACK` * `cluster_health_status` - Cluster health status. One of `GRAY` , `RED` , `YELLOW` , `GREEN` * `version` - vCenter version * `uuid` - UUID of vCenter +* `vcenter_host` - Host of Vcenter server ## Importing From 89a2c69ed37c6ea4dded1ef5747c6c6975d341c3 Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Thu, 21 Nov 2024 14:46:15 +0200 Subject: [PATCH 09/23] Fix TM vcenter test Signed-off-by: Dainius Serplis --- vcd/datasource_vcd_vcenter.go | 2 +- vcd/resource_vcd_vcenter_test.go | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/vcd/datasource_vcd_vcenter.go b/vcd/datasource_vcd_vcenter.go index 62ee1a1a8..5eb835a27 100644 --- a/vcd/datasource_vcd_vcenter.go +++ b/vcd/datasource_vcd_vcenter.go @@ -128,7 +128,7 @@ func classicVcdVcenterReadStatus(vcdClient *VCDClient, d *schema.ResourceData) d len(vcs), vCenterName) } - d.Set("status", vcs[0].Status) + dSet(d, "status", vcs[0].Status) return nil } diff --git a/vcd/resource_vcd_vcenter_test.go b/vcd/resource_vcd_vcenter_test.go index 46d708ed2..75724281b 100644 --- a/vcd/resource_vcd_vcenter_test.go +++ b/vcd/resource_vcd_vcenter_test.go @@ -63,10 +63,10 @@ func TestAccVcdVcenter(t *testing.T) { resource.TestCheckResourceAttrSet("vcd_vcenter.test", "cluster_health_status"), resource.TestCheckResourceAttrSet("vcd_vcenter.test", "is_connected"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "listener_state"), + resource.TestCheckResourceAttrSet("vcd_vcenter.test", "connection_status"), resource.TestCheckResourceAttrSet("vcd_vcenter.test", "mode"), resource.TestCheckResourceAttrSet("vcd_vcenter.test", "uuid"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "version"), + resource.TestCheckResourceAttrSet("vcd_vcenter.test", "vcenter_version"), ), }, { @@ -80,10 +80,10 @@ func TestAccVcdVcenter(t *testing.T) { resource.TestCheckResourceAttrSet("vcd_vcenter.test", "cluster_health_status"), resource.TestCheckResourceAttrSet("vcd_vcenter.test", "is_connected"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "listener_state"), + resource.TestCheckResourceAttrSet("vcd_vcenter.test", "connection_status"), resource.TestCheckResourceAttrSet("vcd_vcenter.test", "mode"), resource.TestCheckResourceAttrSet("vcd_vcenter.test", "uuid"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "version"), + resource.TestCheckResourceAttrSet("vcd_vcenter.test", "vcenter_version"), ), }, { @@ -97,10 +97,10 @@ func TestAccVcdVcenter(t *testing.T) { resource.TestCheckResourceAttrSet("vcd_vcenter.test", "cluster_health_status"), resource.TestCheckResourceAttrSet("vcd_vcenter.test", "is_connected"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "listener_state"), + resource.TestCheckResourceAttrSet("vcd_vcenter.test", "connection_status"), resource.TestCheckResourceAttrSet("vcd_vcenter.test", "mode"), resource.TestCheckResourceAttrSet("vcd_vcenter.test", "uuid"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "version"), + resource.TestCheckResourceAttrSet("vcd_vcenter.test", "vcenter_version"), ), }, { From 745837fc8a7131ca36df6c4264747d0e82756da9 Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Fri, 22 Nov 2024 12:16:22 +0200 Subject: [PATCH 10/23] Run unit tests together with acceptance ones Signed-off-by: Dainius Serplis --- go.mod | 3 ++- go.sum | 4 ++-- scripts/runtest.sh | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index b8fbd9718..b6ce18965 100644 --- a/go.mod +++ b/go.mod @@ -69,4 +69,5 @@ require ( google.golang.org/protobuf v1.34.0 // indirect ) -replace github.com/vmware/go-vcloud-director/v3 => github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241120114955-097f2128dbb3 +//replace github.com/vmware/go-vcloud-director/v3 => github.com/Didainius/go-vcloud-director/v3 v2.12.1-0.20211018060826-c7f8ab32330e +replace github.com/vmware/go-vcloud-director/v3 => github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241122100248-bed0b77f7e99 diff --git a/go.sum b/go.sum index 44bbcde23..94ac47c63 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +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.20241120114955-097f2128dbb3 h1:rjYZ+LjAPMPpXY2vtac5H2UdVCVZ/e+LZdMLcBbFprQ= -github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241120114955-097f2128dbb3/go.mod h1:68KHsVns52dsq/w5JQYzauaU/+NAi1FmCxhBrFc/VoQ= +github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241122100248-bed0b77f7e99 h1:69x51IyYGmvkWm5K1WWFTopNYKPGk484lttoBNcRxkU= +github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241122100248-bed0b77f7e99/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= diff --git a/scripts/runtest.sh b/scripts/runtest.sh index bab35cbf5..d60df1df0 100755 --- a/scripts/runtest.sh +++ b/scripts/runtest.sh @@ -371,10 +371,10 @@ case $wanted in acceptance_test functional ;; acceptance) - acceptance_test "functional unit" + acceptance_test "unit functional" ;; acceptance-coverage) - acceptance_test "functional unit" "-coverprofile testacc.cover" + acceptance_test "unit functional" "-coverprofile testacc.cover" ;; sequential-acceptance) acceptance_test functional "-race --parallel=1" From a239253866eb220c01d3fdd76e1ba277ae894b55 Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Mon, 25 Nov 2024 08:21:56 +0200 Subject: [PATCH 11/23] Adjust TestAccDataSourceNotFound Signed-off-by: Dainius Serplis --- vcd/datasource_not_found_test.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/vcd/datasource_not_found_test.go b/vcd/datasource_not_found_test.go index a0bff912f..e18988f74 100644 --- a/vcd/datasource_not_found_test.go +++ b/vcd/datasource_not_found_test.go @@ -5,6 +5,7 @@ package vcd import ( "fmt" "regexp" + "strings" "testing" "github.com/vmware/go-vcloud-director/v3/govcd" @@ -36,6 +37,10 @@ func TestAccDataSourceNotFound(t *testing.T) { func testSpecificDataSourceNotFound(dataSourceName string, vcdClient *VCDClient) func(*testing.T) { return func(t *testing.T) { + if !vcdClient.Client.IsTm() && strings.HasPrefix(dataSourceName, "vcd_tm") { + t.Skipf("Skipping %s datasource not found test on VCD", dataSourceName) + } + type skipAlways struct { dataSourceName string reason string From eea88533505aed5f44a6dffb06a024a3f8071d8f Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Tue, 26 Nov 2024 10:14:50 +0200 Subject: [PATCH 12/23] Self review Signed-off-by: Dainius Serplis --- vcd/datasource_vcd_vcenter.go | 2 -- website/docs/d/tm_nsxt_manager.html.markdown | 1 - 2 files changed, 3 deletions(-) diff --git a/vcd/datasource_vcd_vcenter.go b/vcd/datasource_vcd_vcenter.go index 5eb835a27..ea7e8c1a5 100644 --- a/vcd/datasource_vcd_vcenter.go +++ b/vcd/datasource_vcd_vcenter.go @@ -11,8 +11,6 @@ import ( "github.com/vmware/go-vcloud-director/v3/types/v56" ) -// TODO: TM: validate compatibility with old data source - func datasourceVcdVcenter() *schema.Resource { return &schema.Resource{ ReadContext: datasourceVcdVcenterRead, diff --git a/website/docs/d/tm_nsxt_manager.html.markdown b/website/docs/d/tm_nsxt_manager.html.markdown index 550d215b0..fe33d1110 100644 --- a/website/docs/d/tm_nsxt_manager.html.markdown +++ b/website/docs/d/tm_nsxt_manager.html.markdown @@ -24,7 +24,6 @@ data "vcd_tm_nsxt_manager" "main" { } ``` - ## Argument Reference The following arguments are supported: From 2477e59416114fb3b5401a7ef6915295c91680c7 Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Tue, 26 Nov 2024 11:11:17 +0200 Subject: [PATCH 13/23] Bump sdk Signed-off-by: Dainius Serplis --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index b6ce18965..399d58666 100644 --- a/go.mod +++ b/go.mod @@ -70,4 +70,4 @@ require ( ) //replace github.com/vmware/go-vcloud-director/v3 => github.com/Didainius/go-vcloud-director/v3 v2.12.1-0.20211018060826-c7f8ab32330e -replace github.com/vmware/go-vcloud-director/v3 => github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241122100248-bed0b77f7e99 +replace github.com/vmware/go-vcloud-director/v3 => github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241126082008-42ff199b5e8e diff --git a/go.sum b/go.sum index 94ac47c63..2b417a62e 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +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.20241122100248-bed0b77f7e99 h1:69x51IyYGmvkWm5K1WWFTopNYKPGk484lttoBNcRxkU= -github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241122100248-bed0b77f7e99/go.mod h1:68KHsVns52dsq/w5JQYzauaU/+NAi1FmCxhBrFc/VoQ= +github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241126082008-42ff199b5e8e h1:+FuEgAwA/TRQZmQAE1iWGjcdB7O7eJJCgLU6LkhjP/k= +github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241126082008-42ff199b5e8e/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= From ecf28804da7cc172a3b9fc612168c7f3e6f35b5a Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Tue, 26 Nov 2024 11:51:51 +0200 Subject: [PATCH 14/23] Update changelog Signed-off-by: Dainius Serplis --- .changes/v4.0.0/1353-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/.changes/v4.0.0/1353-notes.md b/.changes/v4.0.0/1353-notes.md index c4fd4157a..a8eb426b4 100644 --- a/.changes/v4.0.0/1353-notes.md +++ b/.changes/v4.0.0/1353-notes.md @@ -1,5 +1,6 @@ * Improve scripts for TM test support - `make testtm-acc`, `testtm-acc-coverage`, `make testtm-binary`, `make testtm-binary-prepare` [GH-1353] +* Add `make testacc-coverage` VCD acceptance test run with coverage [GH-1355] * Adjusts `TESTING.md` for TM testing [GH-1353] * Splits sample test configs to `sample_vcd_test_config.json` for VCD and `sample_vcd_test_config_tm.json` for TM [GH-1353] From 29962290f25d75d3d822c29e7305f9cc812a1c88 Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Tue, 26 Nov 2024 13:25:30 +0200 Subject: [PATCH 15/23] Make 'status' a computed field Signed-off-by: Dainius Serplis --- vcd/datasource_vcd_vcenter.go | 31 ---------------------------- vcd/datasource_vcd_vcenter_test.go | 2 +- vcd/resource_vcd_vcenter.go | 11 ++++++++++ vcd/resource_vcd_vcenter_test.go | 1 + website/docs/r/vcenter.html.markdown | 2 ++ 5 files changed, 15 insertions(+), 32 deletions(-) diff --git a/vcd/datasource_vcd_vcenter.go b/vcd/datasource_vcd_vcenter.go index ea7e8c1a5..05872e8a4 100644 --- a/vcd/datasource_vcd_vcenter.go +++ b/vcd/datasource_vcd_vcenter.go @@ -3,7 +3,6 @@ package vcd import ( "context" "fmt" - "net/url" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" @@ -92,9 +91,6 @@ func datasourceVcdVcenter() *schema.Resource { func datasourceVcdVcenterRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { vcdClient := meta.(*VCDClient) - if err := classicVcdVcenterReadStatus(vcdClient, d); err != nil { - return err - } c := crudConfig[*govcd.VCenter, types.VSphereVirtualCenter]{ entityLabel: labelVirtualCenter, @@ -103,30 +99,3 @@ func datasourceVcdVcenterRead(ctx context.Context, d *schema.ResourceData, meta } return readDatasource(ctx, d, meta, c) } - -// classicVcdVcenterReadStatus -func classicVcdVcenterReadStatus(vcdClient *VCDClient, d *schema.ResourceData) diag.Diagnostics { - if vcdClient.Client.IsTm() { - return nil - } - vCenterName := d.Get("name").(string) - - vcs, err := govcd.QueryVirtualCenters(vcdClient.VCDClient, "name=="+url.QueryEscape(vCenterName)) - if err != nil { - return diag.Errorf("error occurred while querying vCenters: %s", err) - } - - if len(vcs) == 0 { - return diag.Errorf("%s: could not identify single vCenter. Got %d with name '%s'", - govcd.ErrorEntityNotFound, len(vcs), vCenterName) - } - - if len(vcs) > 1 { - return diag.Errorf("could not identify single vCenter. Got %d with name '%s'", - len(vcs), vCenterName) - } - - dSet(d, "status", vcs[0].Status) - - return nil -} diff --git a/vcd/datasource_vcd_vcenter_test.go b/vcd/datasource_vcd_vcenter_test.go index b8daf9d37..70ed92f46 100644 --- a/vcd/datasource_vcd_vcenter_test.go +++ b/vcd/datasource_vcd_vcenter_test.go @@ -34,7 +34,7 @@ func TestAccVcdVcenterDS(t *testing.T) { resource.TestMatchResourceAttr("data.vcd_vcenter.vc", "id", regexp.MustCompile("^urn:vcloud:vimserver:.*")), resource.TestCheckResourceAttrSet("data.vcd_vcenter.vc", "vcenter_version"), resource.TestCheckResourceAttrSet("data.vcd_vcenter.vc", "vcenter_host"), - resource.TestCheckResourceAttrSet("data.vcd_vcenter.vc", "status"), + resource.TestCheckResourceAttr("data.vcd_vcenter.vc", "status", "READY"), resource.TestCheckResourceAttrSet("data.vcd_vcenter.vc", "is_enabled"), resource.TestCheckResourceAttrSet("data.vcd_vcenter.vc", "connection_status"), ), diff --git a/vcd/resource_vcd_vcenter.go b/vcd/resource_vcd_vcenter.go index 2432efc9a..a358685e7 100644 --- a/vcd/resource_vcd_vcenter.go +++ b/vcd/resource_vcd_vcenter.go @@ -160,6 +160,17 @@ func setTmVcenterData(d *schema.ResourceData, v *govcd.VCenter) error { } dSet(d, "vcenter_host", host.Host) + // Status is a derivative value that was present in XML Query API, but is no longer maintained + // The value was derived from multiple fields based on a complex logic. Instead, evaluating if + // vCenter is ready for operations, would be to rely on `is_enabled`, `is_connected` and + // optionally `cluster_health_status` fields. + // + // The `status` is a rough approximation of this value + dSet(d, "status", "NOT_READY") + if v.VSphereVCenter.IsConnected && v.VSphereVCenter.ListenerState == "CONNECTED" { + dSet(d, "status", "READY") + } + d.SetId(v.VSphereVCenter.VcId) return nil diff --git a/vcd/resource_vcd_vcenter_test.go b/vcd/resource_vcd_vcenter_test.go index 75724281b..3fe272e05 100644 --- a/vcd/resource_vcd_vcenter_test.go +++ b/vcd/resource_vcd_vcenter_test.go @@ -84,6 +84,7 @@ func TestAccVcdVcenter(t *testing.T) { resource.TestCheckResourceAttrSet("vcd_vcenter.test", "mode"), resource.TestCheckResourceAttrSet("vcd_vcenter.test", "uuid"), resource.TestCheckResourceAttrSet("vcd_vcenter.test", "vcenter_version"), + resource.TestCheckResourceAttr("vcd_vcenter.test", "status", "READY"), ), }, { diff --git a/website/docs/r/vcenter.html.markdown b/website/docs/r/vcenter.html.markdown index b07b1f5b8..8fead2028 100644 --- a/website/docs/r/vcenter.html.markdown +++ b/website/docs/r/vcenter.html.markdown @@ -67,6 +67,8 @@ The following attributes are exported on this resource: * `version` - vCenter version * `uuid` - UUID of vCenter * `vcenter_host` - Host of Vcenter server +* `status` - Status can be `READY` or `NOT_READY`. It is a derivative field of `is_connected` and + `connection_status` so relying on those fields could be more precise. ## Importing From 5dc2c1445faebb3bce1d747abc7a877d9522f986 Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Tue, 26 Nov 2024 13:32:25 +0200 Subject: [PATCH 16/23] bump sdk Signed-off-by: Dainius Serplis --- go.mod | 3 +-- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index 399d58666..de0ef24a3 100644 --- a/go.mod +++ b/go.mod @@ -69,5 +69,4 @@ require ( google.golang.org/protobuf v1.34.0 // indirect ) -//replace github.com/vmware/go-vcloud-director/v3 => github.com/Didainius/go-vcloud-director/v3 v2.12.1-0.20211018060826-c7f8ab32330e -replace github.com/vmware/go-vcloud-director/v3 => github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241126082008-42ff199b5e8e +replace github.com/vmware/go-vcloud-director/v3 => github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241126113054-dae643826d5f diff --git a/go.sum b/go.sum index 2b417a62e..7acd66623 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +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.20241126082008-42ff199b5e8e h1:+FuEgAwA/TRQZmQAE1iWGjcdB7O7eJJCgLU6LkhjP/k= -github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241126082008-42ff199b5e8e/go.mod h1:68KHsVns52dsq/w5JQYzauaU/+NAi1FmCxhBrFc/VoQ= +github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241126113054-dae643826d5f h1:HS+RmyJUiNGjfZoT2rW23YiSFvJHsKhc9L3KNgBUKyU= +github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241126113054-dae643826d5f/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= From a8da70c144227038736e84a9930e854231a67ec8 Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Tue, 26 Nov 2024 14:55:52 +0200 Subject: [PATCH 17/23] Address comments Signed-off-by: Dainius Serplis --- vcd/datasource_vcd_tm_nsxt_manager.go | 2 -- website/docs/d/tm_nsxt_manager.html.markdown | 6 ------ 2 files changed, 8 deletions(-) diff --git a/vcd/datasource_vcd_tm_nsxt_manager.go b/vcd/datasource_vcd_tm_nsxt_manager.go index 0a7ba21ba..fa690d718 100644 --- a/vcd/datasource_vcd_tm_nsxt_manager.go +++ b/vcd/datasource_vcd_tm_nsxt_manager.go @@ -10,8 +10,6 @@ import ( "github.com/vmware/go-vcloud-director/v3/types/v56" ) -// TODO: TM: validate compatibility with old data source - func datasourceVcdTmNsxtManager() *schema.Resource { return &schema.Resource{ ReadContext: datasourceVcdNsxtManagerRead, diff --git a/website/docs/d/tm_nsxt_manager.html.markdown b/website/docs/d/tm_nsxt_manager.html.markdown index fe33d1110..ba5921118 100644 --- a/website/docs/d/tm_nsxt_manager.html.markdown +++ b/website/docs/d/tm_nsxt_manager.html.markdown @@ -10,12 +10,6 @@ description: |- Provides a data source for available Tenant Manager NSX-T manager. -Supported in provider *v3.0+* - -~> **Note:** This resource uses new VMware Cloud Director -[OpenAPI](https://code.vmware.com/docs/11982/getting-started-with-vmware-cloud-director-openapi) and -requires at least VCD *10.1.1+* and NSX-T *3.0+*. - ## Example Usage ```hcl From f6397f5fa447b71fce45010379f710b9a9e02842 Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Thu, 28 Nov 2024 13:04:55 +0200 Subject: [PATCH 18/23] vcd_vcenter -> vcd_tm_vcenter Signed-off-by: Dainius Serplis --- ...center.go => datasource_vcd_tm_vcenter.go} | 30 +++---- vcd/datasource_vcd_vcenter_test.go | 51 ----------- vcd/provider.go | 4 +- vcd/resource_vcd_tm_nsxt_manager.go | 2 +- ..._vcenter.go => resource_vcd_tm_vcenter.go} | 74 +++++++-------- ...est.go => resource_vcd_tm_vcenter_test.go} | 90 +++++++++---------- ...html.markdown => tm_vcenter.html.markdown} | 10 +-- ...html.markdown => tm_vcenter.html.markdown} | 10 +-- website/vcd.erb | 8 +- 9 files changed, 114 insertions(+), 165 deletions(-) rename vcd/{datasource_vcd_vcenter.go => datasource_vcd_tm_vcenter.go} (69%) delete mode 100644 vcd/datasource_vcd_vcenter_test.go rename vcd/{resource_vcd_vcenter.go => resource_vcd_tm_vcenter.go} (80%) rename vcd/{resource_vcd_vcenter_test.go => resource_vcd_tm_vcenter_test.go} (50%) rename website/docs/d/{vcenter.html.markdown => tm_vcenter.html.markdown} (62%) rename website/docs/r/{vcenter.html.markdown => tm_vcenter.html.markdown} (94%) diff --git a/vcd/datasource_vcd_vcenter.go b/vcd/datasource_vcd_tm_vcenter.go similarity index 69% rename from vcd/datasource_vcd_vcenter.go rename to vcd/datasource_vcd_tm_vcenter.go index 05872e8a4..b04c0cedf 100644 --- a/vcd/datasource_vcd_vcenter.go +++ b/vcd/datasource_vcd_tm_vcenter.go @@ -10,7 +10,7 @@ import ( "github.com/vmware/go-vcloud-director/v3/types/v56" ) -func datasourceVcdVcenter() *schema.Resource { +func datasourceVcdTmVcenter() *schema.Resource { return &schema.Resource{ ReadContext: datasourceVcdVcenterRead, @@ -18,67 +18,67 @@ func datasourceVcdVcenter() *schema.Resource { "name": { Type: schema.TypeString, Required: true, - Description: fmt.Sprintf("Name of %s", labelVirtualCenter), + Description: fmt.Sprintf("Name of %s", labelTmVirtualCenter), }, "url": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("URL of %s", labelVirtualCenter), + Description: fmt.Sprintf("URL of %s", labelTmVirtualCenter), }, "username": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("Username of %s", labelVirtualCenter), + Description: fmt.Sprintf("Username of %s", labelTmVirtualCenter), }, "is_enabled": { Type: schema.TypeBool, Computed: true, - Description: fmt.Sprintf("Should the %s be enabled", labelVirtualCenter), + Description: fmt.Sprintf("Should the %s be enabled", labelTmVirtualCenter), }, "description": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("Description of %s", labelVirtualCenter), + Description: fmt.Sprintf("Description of %s", labelTmVirtualCenter), }, "has_proxy": { Type: schema.TypeBool, Computed: true, - Description: fmt.Sprintf("A flag that shows if %s has proxy defined", labelVirtualCenter), + Description: fmt.Sprintf("A flag that shows if %s has proxy defined", labelTmVirtualCenter), }, "is_connected": { Type: schema.TypeBool, Computed: true, - Description: fmt.Sprintf("A flag that shows if %s is connected", labelVirtualCenter), + Description: fmt.Sprintf("A flag that shows if %s is connected", labelTmVirtualCenter), }, "mode": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("Mode of %s", labelVirtualCenter), + Description: fmt.Sprintf("Mode of %s", labelTmVirtualCenter), }, "connection_status": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("Listener state of %s", labelVirtualCenter), + Description: fmt.Sprintf("Listener state of %s", labelTmVirtualCenter), }, "cluster_health_status": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("Mode of %s", labelVirtualCenter), + Description: fmt.Sprintf("Mode of %s", labelTmVirtualCenter), }, "vcenter_version": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("Version of %s", labelVirtualCenter), + Description: fmt.Sprintf("Version of %s", labelTmVirtualCenter), }, "uuid": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("%s UUID", labelVirtualCenter), + Description: fmt.Sprintf("%s UUID", labelTmVirtualCenter), }, "vcenter_host": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("%s hostname", labelVirtualCenter), + Description: fmt.Sprintf("%s hostname", labelTmVirtualCenter), }, "status": { Type: schema.TypeString, @@ -93,7 +93,7 @@ func datasourceVcdVcenterRead(ctx context.Context, d *schema.ResourceData, meta vcdClient := meta.(*VCDClient) c := crudConfig[*govcd.VCenter, types.VSphereVirtualCenter]{ - entityLabel: labelVirtualCenter, + entityLabel: labelTmVirtualCenter, getEntityFunc: vcdClient.GetVCenterByName, stateStoreFunc: setTmVcenterData, } diff --git a/vcd/datasource_vcd_vcenter_test.go b/vcd/datasource_vcd_vcenter_test.go deleted file mode 100644 index 70ed92f46..000000000 --- a/vcd/datasource_vcd_vcenter_test.go +++ /dev/null @@ -1,51 +0,0 @@ -//go:build ALL || functional - -package vcd - -import ( - "regexp" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" -) - -func TestAccVcdVcenterDS(t *testing.T) { - preTestChecks(t) - skipIfNotSysAdmin(t) - - var params = StringMap{ - "Vcenter": testConfig.Networking.Vcenter, - } - testParamsNotEmpty(t, params) - - configText := templateFill(datasourceTestVcenter, params) - if vcdShortTest { - t.Skip(acceptanceTestsSkipped) - return - } - debugPrintf("#[DEBUG] CONFIGURATION: %s", configText) - - resource.ParallelTest(t, resource.TestCase{ - ProviderFactories: testAccProviders, - Steps: []resource.TestStep{ - { - Config: configText, - Check: resource.ComposeTestCheckFunc( - resource.TestMatchResourceAttr("data.vcd_vcenter.vc", "id", regexp.MustCompile("^urn:vcloud:vimserver:.*")), - resource.TestCheckResourceAttrSet("data.vcd_vcenter.vc", "vcenter_version"), - resource.TestCheckResourceAttrSet("data.vcd_vcenter.vc", "vcenter_host"), - resource.TestCheckResourceAttr("data.vcd_vcenter.vc", "status", "READY"), - resource.TestCheckResourceAttrSet("data.vcd_vcenter.vc", "is_enabled"), - resource.TestCheckResourceAttrSet("data.vcd_vcenter.vc", "connection_status"), - ), - }, - }, - }) - postTestChecks(t) -} - -const datasourceTestVcenter = ` -data "vcd_vcenter" "vc" { - name = "{{.Vcenter}}" -} -` diff --git a/vcd/provider.go b/vcd/provider.go index a08026a4e..7a7bd47a2 100644 --- a/vcd/provider.go +++ b/vcd/provider.go @@ -67,7 +67,6 @@ var globalDataSourceMap = map[string]*schema.Resource{ "vcd_nsxt_manager": datasourceVcdNsxtManager(), // 3.0 "vcd_nsxt_tier0_router": datasourceVcdNsxtTier0Router(), // 3.0 "vcd_portgroup": datasourceVcdPortgroup(), // 3.0 - "vcd_vcenter": datasourceVcdVcenter(), // 3.0 "vcd_resource_list": datasourceVcdResourceList(), // 3.1 "vcd_resource_schema": datasourceVcdResourceSchema(), // 3.1 "vcd_nsxt_edge_cluster": datasourceVcdNsxtEdgeCluster(), // 3.1 @@ -182,6 +181,7 @@ var globalDataSourceMap = map[string]*schema.Resource{ "vcd_tm_supervisor_zone": datasourceVcdTmSupervisorZone(), // 4.0 "vcd_tm_region": datasourceVcdTmRegion(), // 4.0 "vcd_tm_nsxt_manager": datasourceVcdTmNsxtManager(), // 4.0 + "vcd_tm_vcenter": datasourceVcdTmVcenter(), // 4.0 } var globalResourceMap = map[string]*schema.Resource{ @@ -310,7 +310,7 @@ var globalResourceMap = map[string]*schema.Resource{ "vcd_nsxt_alb_virtual_service_http_sec_rules": resourceVcdAlbVirtualServiceSecRules(), // 3.14 "vcd_tm_content_library": resourceVcdTmContentLibrary(), // 4.0 "vcd_tm_nsxt_manager": resourceVcdTmNsxtManager(), // 4.0 - "vcd_vcenter": resourceVcdVcenter(), // 4.0 + "vcd_tm_vcenter": resourceVcdTmVcenter(), // 4.0 "vcd_tm_org": resourceVcdTmOrg(), // 4.0 "vcd_tm_region": resourceVcdTmRegion(), // 4.0 } diff --git a/vcd/resource_vcd_tm_nsxt_manager.go b/vcd/resource_vcd_tm_nsxt_manager.go index 06d597bab..32f588d60 100644 --- a/vcd/resource_vcd_tm_nsxt_manager.go +++ b/vcd/resource_vcd_tm_nsxt_manager.go @@ -53,7 +53,7 @@ func resourceVcdTmNsxtManager() *schema.Resource { Type: schema.TypeBool, Required: true, ForceNew: true, - Description: fmt.Sprintf("Defines if the %s certificate should automatically be trusted", labelVirtualCenter), + Description: fmt.Sprintf("Defines if the %s certificate should automatically be trusted", labelNsxtManager), }, "network_provider_scope": { Type: schema.TypeString, diff --git a/vcd/resource_vcd_vcenter.go b/vcd/resource_vcd_tm_vcenter.go similarity index 80% rename from vcd/resource_vcd_vcenter.go rename to vcd/resource_vcd_tm_vcenter.go index a358685e7..e649091ae 100644 --- a/vcd/resource_vcd_vcenter.go +++ b/vcd/resource_vcd_tm_vcenter.go @@ -12,106 +12,106 @@ import ( "github.com/vmware/go-vcloud-director/v3/util" ) -const labelVirtualCenter = "vCenter Server" +const labelTmVirtualCenter = "Tenant Manager vCenter Server" -func resourceVcdVcenter() *schema.Resource { +func resourceVcdTmVcenter() *schema.Resource { return &schema.Resource{ - CreateContext: resourceVcdVcenterCreate, - ReadContext: resourceVcdVcenterRead, - UpdateContext: resourceVcdVcenterUpdate, - DeleteContext: resourceVcdVcenterDelete, + CreateContext: resourceVcdTmVcenterCreate, + ReadContext: resourceVcdTmVcenterRead, + UpdateContext: resourceVcdTmVcenterUpdate, + DeleteContext: resourceVcdTmVcenterDelete, Importer: &schema.ResourceImporter{ - StateContext: resourceVcdVcenterImport, + StateContext: resourceVcdTmVcenterImport, }, Schema: map[string]*schema.Schema{ "name": { Type: schema.TypeString, Required: true, - Description: fmt.Sprintf("Name of %s", labelVirtualCenter), + Description: fmt.Sprintf("Name of %s", labelTmVirtualCenter), }, "url": { Type: schema.TypeString, Required: true, - Description: fmt.Sprintf("URL including port of %s", labelVirtualCenter), + Description: fmt.Sprintf("URL including port of %s", labelTmVirtualCenter), }, "auto_trust_certificate": { Type: schema.TypeBool, Required: true, ForceNew: true, - Description: fmt.Sprintf("Defines if the %s certificate should automatically be trusted", labelVirtualCenter), + Description: fmt.Sprintf("Defines if the %s certificate should automatically be trusted", labelTmVirtualCenter), }, "refresh_vcenter_on_read": { Type: schema.TypeBool, Optional: true, - Description: fmt.Sprintf("Defines if the %s should be refreshed on every read operation", labelVirtualCenter), + Description: fmt.Sprintf("Defines if the %s should be refreshed on every read operation", labelTmVirtualCenter), }, "refresh_policies_on_read": { Type: schema.TypeBool, Optional: true, - Description: fmt.Sprintf("Defines if the %s should refresh Policies on every read operation", labelVirtualCenter), + Description: fmt.Sprintf("Defines if the %s should refresh Policies on every read operation", labelTmVirtualCenter), }, "username": { Type: schema.TypeString, Required: true, - Description: fmt.Sprintf("Username of %s", labelVirtualCenter), + Description: fmt.Sprintf("Username of %s", labelTmVirtualCenter), }, "password": { Type: schema.TypeString, Required: true, Sensitive: true, - Description: fmt.Sprintf("Password of %s", labelVirtualCenter), + Description: fmt.Sprintf("Password of %s", labelTmVirtualCenter), }, "is_enabled": { Type: schema.TypeBool, Optional: true, Default: true, - Description: fmt.Sprintf("Should the %s be enabled", labelVirtualCenter), + Description: fmt.Sprintf("Should the %s be enabled", labelTmVirtualCenter), }, "description": { Type: schema.TypeString, Optional: true, - Description: fmt.Sprintf("Description of %s", labelVirtualCenter), + Description: fmt.Sprintf("Description of %s", labelTmVirtualCenter), }, "has_proxy": { Type: schema.TypeBool, Computed: true, - Description: fmt.Sprintf("A flag that shows if %s has proxy defined", labelVirtualCenter), + Description: fmt.Sprintf("A flag that shows if %s has proxy defined", labelTmVirtualCenter), }, "is_connected": { Type: schema.TypeBool, Computed: true, - Description: fmt.Sprintf("A flag that shows if %s is connected", labelVirtualCenter), + Description: fmt.Sprintf("A flag that shows if %s is connected", labelTmVirtualCenter), }, "mode": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("Mode of %s", labelVirtualCenter), + Description: fmt.Sprintf("Mode of %s", labelTmVirtualCenter), }, "connection_status": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("Listener state of %s", labelVirtualCenter), + Description: fmt.Sprintf("Listener state of %s", labelTmVirtualCenter), }, "cluster_health_status": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("Mode of %s", labelVirtualCenter), + Description: fmt.Sprintf("Mode of %s", labelTmVirtualCenter), }, "vcenter_version": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("Version of %s", labelVirtualCenter), + Description: fmt.Sprintf("Version of %s", labelTmVirtualCenter), }, "uuid": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("%s UUID", labelVirtualCenter), + Description: fmt.Sprintf("%s UUID", labelTmVirtualCenter), }, "vcenter_host": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("%s hostname", labelVirtualCenter), + Description: fmt.Sprintf("%s hostname", labelTmVirtualCenter), }, "status": { Type: schema.TypeString, @@ -137,7 +137,7 @@ func getTmVcenterType(_ *VCDClient, d *schema.ResourceData) (*types.VSphereVirtu func setTmVcenterData(d *schema.ResourceData, v *govcd.VCenter) error { if v == nil || v.VSphereVCenter == nil { - return fmt.Errorf("nil object for %s", labelVirtualCenter) + return fmt.Errorf("nil object for %s", labelTmVirtualCenter) } dSet(d, "name", v.VSphereVCenter.Name) @@ -176,22 +176,22 @@ func setTmVcenterData(d *schema.ResourceData, v *govcd.VCenter) error { return nil } -func resourceVcdVcenterCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { +func resourceVcdTmVcenterCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { vcdClient := meta.(*VCDClient) c := crudConfig[*govcd.VCenter, types.VSphereVirtualCenter]{ - entityLabel: labelVirtualCenter, + entityLabel: labelTmVirtualCenter, getTypeFunc: getTmVcenterType, stateStoreFunc: setTmVcenterData, createFunc: vcdClient.CreateVcenter, - resourceReadFunc: resourceVcdVcenterRead, + resourceReadFunc: resourceVcdTmVcenterRead, // certificate should be trusted for the vCenter to work preCreateHooks: []schemaHook{autoTrustHostCertificate("url", "auto_trust_certificate")}, } return createResource(ctx, d, meta, c) } -func resourceVcdVcenterUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { +func resourceVcdTmVcenterUpdate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { // return immediately if only flags are updated if !d.HasChangesExcept("refresh_vcenter_on_read", "refresh_policies_on_read") { return nil @@ -199,16 +199,16 @@ func resourceVcdVcenterUpdate(ctx context.Context, d *schema.ResourceData, meta vcdClient := meta.(*VCDClient) c := crudConfig[*govcd.VCenter, types.VSphereVirtualCenter]{ - entityLabel: labelVirtualCenter, + entityLabel: labelTmVirtualCenter, getTypeFunc: getTmVcenterType, getEntityFunc: vcdClient.GetVCenterById, - resourceReadFunc: resourceVcdVcenterRead, + resourceReadFunc: resourceVcdTmVcenterRead, } return updateResource(ctx, d, meta, c) } -func resourceVcdVcenterRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { +func resourceVcdTmVcenterRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { vcdClient := meta.(*VCDClient) // TODO: TM: remove this block and use the commented one within crudConfig below. @@ -227,7 +227,7 @@ func resourceVcdVcenterRead(ctx context.Context, d *schema.ResourceData, meta in shouldRefresh := d.Get("refresh_vcenter_on_read").(bool) shouldRefreshPolicies := d.Get("refresh_policies_on_read").(bool) c := crudConfig[*govcd.VCenter, types.VSphereVirtualCenter]{ - entityLabel: labelVirtualCenter, + entityLabel: labelTmVirtualCenter, // getEntityFunc: vcdClient.GetVCenterById,// TODO: TM: use this function getEntityFunc: fakeGetById, // TODO: TM: remove this function stateStoreFunc: setTmVcenterData, @@ -239,11 +239,11 @@ func resourceVcdVcenterRead(ctx context.Context, d *schema.ResourceData, meta in return readResource(ctx, d, meta, c) } -func resourceVcdVcenterDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { +func resourceVcdTmVcenterDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { vcdClient := meta.(*VCDClient) c := crudConfig[*govcd.VCenter, types.VSphereVirtualCenter]{ - entityLabel: labelVirtualCenter, + entityLabel: labelTmVirtualCenter, getEntityFunc: vcdClient.GetVCenterById, preDeleteHooks: []outerEntityHook[*govcd.VCenter]{disableVcenter}, // vCenter must be disabled before deletion } @@ -251,12 +251,12 @@ func resourceVcdVcenterDelete(ctx context.Context, d *schema.ResourceData, meta return deleteResource(ctx, d, meta, c) } -func resourceVcdVcenterImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { +func resourceVcdTmVcenterImport(ctx context.Context, d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { vcdClient := meta.(*VCDClient) v, err := vcdClient.GetVCenterByName(d.Id()) if err != nil { - return nil, fmt.Errorf("error retrieving %s by name: %s", labelVirtualCenter, err) + return nil, fmt.Errorf("error retrieving %s by name: %s", labelTmVirtualCenter, err) } d.SetId(v.VSphereVCenter.VcId) diff --git a/vcd/resource_vcd_vcenter_test.go b/vcd/resource_vcd_tm_vcenter_test.go similarity index 50% rename from vcd/resource_vcd_vcenter_test.go rename to vcd/resource_vcd_tm_vcenter_test.go index 3fe272e05..a8f1bf114 100644 --- a/vcd/resource_vcd_vcenter_test.go +++ b/vcd/resource_vcd_tm_vcenter_test.go @@ -8,7 +8,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) -func TestAccVcdVcenter(t *testing.T) { +func TestAccVcdTmVcenter(t *testing.T) { preTestChecks(t) skipIfNotSysAdmin(t) @@ -55,57 +55,57 @@ func TestAccVcdVcenter(t *testing.T) { { Config: configText1, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "id"), - resource.TestCheckResourceAttr("vcd_vcenter.test", "name", t.Name()), - resource.TestCheckResourceAttr("vcd_vcenter.test", "description", ""), - resource.TestCheckResourceAttr("vcd_vcenter.test", "is_enabled", "true"), - resource.TestCheckResourceAttr("vcd_vcenter.test", "has_proxy", "false"), - - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "cluster_health_status"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "is_connected"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "connection_status"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "mode"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "uuid"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "vcenter_version"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "id"), + resource.TestCheckResourceAttr("vcd_tm_vcenter.test", "name", t.Name()), + resource.TestCheckResourceAttr("vcd_tm_vcenter.test", "description", ""), + resource.TestCheckResourceAttr("vcd_tm_vcenter.test", "is_enabled", "true"), + resource.TestCheckResourceAttr("vcd_tm_vcenter.test", "has_proxy", "false"), + + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "cluster_health_status"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "is_connected"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "connection_status"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "mode"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "uuid"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "vcenter_version"), ), }, { Config: configText2, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "id"), - resource.TestCheckResourceAttr("vcd_vcenter.test", "name", t.Name()+"-rename"), - resource.TestCheckResourceAttr("vcd_vcenter.test", "is_enabled", "false"), - resource.TestCheckResourceAttr("vcd_vcenter.test", "description", "description from Terraform"), - resource.TestCheckResourceAttr("vcd_vcenter.test", "has_proxy", "false"), - - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "cluster_health_status"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "is_connected"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "connection_status"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "mode"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "uuid"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "vcenter_version"), - resource.TestCheckResourceAttr("vcd_vcenter.test", "status", "READY"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "id"), + resource.TestCheckResourceAttr("vcd_tm_vcenter.test", "name", t.Name()+"-rename"), + resource.TestCheckResourceAttr("vcd_tm_vcenter.test", "is_enabled", "false"), + resource.TestCheckResourceAttr("vcd_tm_vcenter.test", "description", "description from Terraform"), + resource.TestCheckResourceAttr("vcd_tm_vcenter.test", "has_proxy", "false"), + + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "cluster_health_status"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "is_connected"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "connection_status"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "mode"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "uuid"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "vcenter_version"), + resource.TestCheckResourceAttr("vcd_tm_vcenter.test", "status", "READY"), ), }, { Config: configText3, Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "id"), - resource.TestCheckResourceAttr("vcd_vcenter.test", "name", t.Name()), - resource.TestCheckResourceAttr("vcd_vcenter.test", "description", ""), - resource.TestCheckResourceAttr("vcd_vcenter.test", "is_enabled", "true"), - resource.TestCheckResourceAttr("vcd_vcenter.test", "has_proxy", "false"), - - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "cluster_health_status"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "is_connected"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "connection_status"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "mode"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "uuid"), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "vcenter_version"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "id"), + resource.TestCheckResourceAttr("vcd_tm_vcenter.test", "name", t.Name()), + resource.TestCheckResourceAttr("vcd_tm_vcenter.test", "description", ""), + resource.TestCheckResourceAttr("vcd_tm_vcenter.test", "is_enabled", "true"), + resource.TestCheckResourceAttr("vcd_tm_vcenter.test", "has_proxy", "false"), + + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "cluster_health_status"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "is_connected"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "connection_status"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "mode"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "uuid"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "vcenter_version"), ), }, { - ResourceName: "vcd_vcenter.test", + ResourceName: "vcd_tm_vcenter.test", ImportState: true, ImportStateVerify: true, ImportStateId: params["Testname"].(string), @@ -114,7 +114,7 @@ func TestAccVcdVcenter(t *testing.T) { { Config: configText4, Check: resource.ComposeTestCheckFunc( - resourceFieldsEqual("data.vcd_vcenter.test", "vcd_vcenter.test", []string{"%"}), + resourceFieldsEqual("data.vcd_tm_vcenter.test", "vcd_tm_vcenter.test", []string{"%"}), ), }, }, @@ -124,7 +124,7 @@ func TestAccVcdVcenter(t *testing.T) { } const testAccVcdVcenterStep1 = ` -resource "vcd_vcenter" "test" { +resource "vcd_tm_vcenter" "test" { name = "{{.Testname}}" url = "{{.VcenterUrl}}" auto_trust_certificate = true @@ -137,7 +137,7 @@ resource "vcd_vcenter" "test" { ` const testAccVcdVcenterStep2 = ` -resource "vcd_vcenter" "test" { +resource "vcd_tm_vcenter" "test" { name = "{{.Testname}}-rename" description = "description from Terraform" auto_trust_certificate = true @@ -149,7 +149,7 @@ resource "vcd_vcenter" "test" { ` const testAccVcdVcenterStep3 = ` -resource "vcd_vcenter" "test" { +resource "vcd_tm_vcenter" "test" { name = "{{.Testname}}" url = "{{.VcenterUrl}}" auto_trust_certificate = true @@ -160,7 +160,7 @@ resource "vcd_vcenter" "test" { ` const testAccVcdVcenterStep4DS = testAccVcdVcenterStep3 + ` -data "vcd_vcenter" "test" { - name = vcd_vcenter.test.name +data "vcd_tm_vcenter" "test" { + name = vcd_tm_vcenter.test.name } ` diff --git a/website/docs/d/vcenter.html.markdown b/website/docs/d/tm_vcenter.html.markdown similarity index 62% rename from website/docs/d/vcenter.html.markdown rename to website/docs/d/tm_vcenter.html.markdown index 1a6e6836f..3a074a35a 100644 --- a/website/docs/d/vcenter.html.markdown +++ b/website/docs/d/tm_vcenter.html.markdown @@ -1,12 +1,12 @@ --- layout: "vcd" -page_title: "VMware Cloud Director: vcd_vcenter" -sidebar_current: "docs-vcd-data-source-vcenter" +page_title: "VMware Cloud Director: vcd_tm_vcenter" +sidebar_current: "docs-vcd-data-source-tm-vcenter" description: |- Provides a data source for vCenter server attached to VCD. --- -# vcd\_vcenter +# vcd\_tm\_vcenter Provides a data source for vCenter server attached to VCD. @@ -16,7 +16,7 @@ Supported in provider *v3.0+* ## Example Usage ```hcl -data "vcd_vcenter" "vc" { +data "vcd_tm_vcenter" "vc" { name = "vcenter-one" } ``` @@ -30,5 +30,5 @@ The following arguments are supported: ## Attribute reference All attributes defined in -[`vcd_vcenter`](/providers/vmware/vcd/latest/docs/resources/vcenter#attribute-reference) are +[`vcd_tm_vcenter`](/providers/vmware/vcd/latest/docs/resources/tm_vcenter#attribute-reference) are supported. diff --git a/website/docs/r/vcenter.html.markdown b/website/docs/r/tm_vcenter.html.markdown similarity index 94% rename from website/docs/r/vcenter.html.markdown rename to website/docs/r/tm_vcenter.html.markdown index 8fead2028..6b1d71d23 100644 --- a/website/docs/r/vcenter.html.markdown +++ b/website/docs/r/tm_vcenter.html.markdown @@ -1,12 +1,12 @@ --- layout: "vcd" -page_title: "VMware Cloud Director: vcd_vcenter" -sidebar_current: "docs-vcd-resource-vcenter" +page_title: "VMware Cloud Director: vcd_tm_vcenter" +sidebar_current: "docs-vcd-resource-tm-vcenter" description: |- Provides a resource to manage vCenters. --- -# vcd\_nsxt\_vcenter +# vcd\_tm\_vcenter Provides a resource to manage vCenters. @@ -15,7 +15,7 @@ Provides a resource to manage vCenters. ## Example Usage ```hcl -resource "vcd_vcenter" "test" { +resource "vcd_tm_vcenter" "test" { name = "TestAccVcdTmVcenter-rename" url = "https://host:443" auto_trust_certificate = true @@ -82,7 +82,7 @@ path for it. An example is below: [docs-import]: https://www.terraform.io/docs/import/ ``` -terraform import vcd_vcenter.imported my-vcenter +terraform import vcd_tm_vcenter.imported my-vcenter ``` The above would import the `my-vcenter` vCenter settings that are defined at provider level. diff --git a/website/vcd.erb b/website/vcd.erb index 0320ee62e..613c06e09 100644 --- a/website/vcd.erb +++ b/website/vcd.erb @@ -181,8 +181,8 @@ > vcd_nsxv_dhcp_relay - > - vcd_vcenter + > + vcd_tm_vcenter > vcd_provider_vdc @@ -872,8 +872,8 @@ > vcd_tm_content_library - > - vcd_vcenter + > + vcd_tm_vcenter > vcd_tm_nsxt_manager From 68862471672ca7e094bf36c35c246b4fff02d266 Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Thu, 28 Nov 2024 13:09:17 +0200 Subject: [PATCH 19/23] checkout vcd_vcenter from main Signed-off-by: Dainius Serplis --- vcd/datasource_vcd_vcenter.go | 92 ++++++++++++++++++++++++++++ vcd/datasource_vcd_vcenter_test.go | 51 +++++++++++++++ website/docs/d/vcenter.html.markdown | 34 ++++++++++ website/vcd.erb | 7 ++- 4 files changed, 182 insertions(+), 2 deletions(-) create mode 100644 vcd/datasource_vcd_vcenter.go create mode 100644 vcd/datasource_vcd_vcenter_test.go create mode 100644 website/docs/d/vcenter.html.markdown diff --git a/vcd/datasource_vcd_vcenter.go b/vcd/datasource_vcd_vcenter.go new file mode 100644 index 000000000..11e22ea16 --- /dev/null +++ b/vcd/datasource_vcd_vcenter.go @@ -0,0 +1,92 @@ +package vcd + +import ( + "context" + "fmt" + + "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/vmware/go-vcloud-director/v3/govcd" + "github.com/vmware/go-vcloud-director/v3/types/v56" +) + +// TODO: TM: validate compatibility with old data source + +func datasourceVcdVcenter() *schema.Resource { + return &schema.Resource{ + ReadContext: datasourceVcdVcenterRead, + + Schema: map[string]*schema.Schema{ + "name": { + Type: schema.TypeString, + Required: true, + Description: fmt.Sprintf("Name of %s", labelVirtualCenter), + }, + "url": { + Type: schema.TypeString, + Computed: true, + Description: fmt.Sprintf("URL of %s", labelVirtualCenter), + }, + "username": { + Type: schema.TypeString, + Computed: true, + Description: fmt.Sprintf("Username of %s", labelVirtualCenter), + }, + "is_enabled": { + Type: schema.TypeBool, + Computed: true, + Description: fmt.Sprintf("Should the %s be enabled", labelVirtualCenter), + }, + "description": { + Type: schema.TypeString, + Computed: true, + Description: fmt.Sprintf("Description of %s", labelVirtualCenter), + }, + "has_proxy": { + Type: schema.TypeBool, + Computed: true, + Description: fmt.Sprintf("A flag that shows if %s has proxy defined", labelVirtualCenter), + }, + "is_connected": { + Type: schema.TypeBool, + Computed: true, + Description: fmt.Sprintf("A flag that shows if %s is connected", labelVirtualCenter), + }, + "mode": { + Type: schema.TypeString, + Computed: true, + Description: fmt.Sprintf("Mode of %s", labelVirtualCenter), + }, + "listener_state": { + Type: schema.TypeString, + Computed: true, + Description: fmt.Sprintf("Listener state of %s", labelVirtualCenter), + }, + "cluster_health_status": { + Type: schema.TypeString, + Computed: true, + Description: fmt.Sprintf("Mode of %s", labelVirtualCenter), + }, + "version": { + Type: schema.TypeString, + Computed: true, + Description: fmt.Sprintf("Version of %s", labelVirtualCenter), + }, + "uuid": { + Type: schema.TypeString, + Computed: true, + Description: fmt.Sprintf("%s UUID", labelVirtualCenter), + }, + }, + } +} + +func datasourceVcdVcenterRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { + vcdClient := meta.(*VCDClient) + c := crudConfig[*govcd.VCenter, types.VSphereVirtualCenter]{ + entityLabel: labelVirtualCenter, + getEntityFunc: vcdClient.GetVCenterByName, + stateStoreFunc: setTmVcenterData, + } + return readDatasource(ctx, d, meta, c) +} diff --git a/vcd/datasource_vcd_vcenter_test.go b/vcd/datasource_vcd_vcenter_test.go new file mode 100644 index 000000000..b8daf9d37 --- /dev/null +++ b/vcd/datasource_vcd_vcenter_test.go @@ -0,0 +1,51 @@ +//go:build ALL || functional + +package vcd + +import ( + "regexp" + "testing" + + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" +) + +func TestAccVcdVcenterDS(t *testing.T) { + preTestChecks(t) + skipIfNotSysAdmin(t) + + var params = StringMap{ + "Vcenter": testConfig.Networking.Vcenter, + } + testParamsNotEmpty(t, params) + + configText := templateFill(datasourceTestVcenter, params) + if vcdShortTest { + t.Skip(acceptanceTestsSkipped) + return + } + debugPrintf("#[DEBUG] CONFIGURATION: %s", configText) + + resource.ParallelTest(t, resource.TestCase{ + ProviderFactories: testAccProviders, + Steps: []resource.TestStep{ + { + Config: configText, + Check: resource.ComposeTestCheckFunc( + resource.TestMatchResourceAttr("data.vcd_vcenter.vc", "id", regexp.MustCompile("^urn:vcloud:vimserver:.*")), + resource.TestCheckResourceAttrSet("data.vcd_vcenter.vc", "vcenter_version"), + resource.TestCheckResourceAttrSet("data.vcd_vcenter.vc", "vcenter_host"), + resource.TestCheckResourceAttrSet("data.vcd_vcenter.vc", "status"), + resource.TestCheckResourceAttrSet("data.vcd_vcenter.vc", "is_enabled"), + resource.TestCheckResourceAttrSet("data.vcd_vcenter.vc", "connection_status"), + ), + }, + }, + }) + postTestChecks(t) +} + +const datasourceTestVcenter = ` +data "vcd_vcenter" "vc" { + name = "{{.Vcenter}}" +} +` diff --git a/website/docs/d/vcenter.html.markdown b/website/docs/d/vcenter.html.markdown new file mode 100644 index 000000000..1a6e6836f --- /dev/null +++ b/website/docs/d/vcenter.html.markdown @@ -0,0 +1,34 @@ +--- +layout: "vcd" +page_title: "VMware Cloud Director: vcd_vcenter" +sidebar_current: "docs-vcd-data-source-vcenter" +description: |- + Provides a data source for vCenter server attached to VCD. +--- + +# vcd\_vcenter + +Provides a data source for vCenter server attached to VCD. + +Supported in provider *v3.0+* + + +## Example Usage + +```hcl +data "vcd_vcenter" "vc" { + name = "vcenter-one" +} +``` + +## Argument Reference + +The following arguments are supported: + +* `name` - (Required) vCenter name + +## Attribute reference + +All attributes defined in +[`vcd_vcenter`](/providers/vmware/vcd/latest/docs/resources/vcenter#attribute-reference) are +supported. diff --git a/website/vcd.erb b/website/vcd.erb index 613c06e09..3676778ce 100644 --- a/website/vcd.erb +++ b/website/vcd.erb @@ -181,8 +181,8 @@ > vcd_nsxv_dhcp_relay - > - vcd_tm_vcenter + > + vcd_vcenter > vcd_provider_vdc @@ -502,6 +502,9 @@ > vcd_tm_nsxt_manager + > + vcd_tm_vcenter + > From 5e92381bf5561607989363500ca41067bd404b03 Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Thu, 28 Nov 2024 13:14:16 +0200 Subject: [PATCH 20/23] Checkout correct vcd_vcenter Signed-off-by: Dainius Serplis --- vcd/datasource_vcd_vcenter.go | 110 ++++++++++++++------------- vcd/datasource_vcd_vcenter_test.go | 4 +- vcd/tm_common_test.go | 8 +- website/docs/d/vcenter.html.markdown | 8 +- 4 files changed, 69 insertions(+), 61 deletions(-) diff --git a/vcd/datasource_vcd_vcenter.go b/vcd/datasource_vcd_vcenter.go index 11e22ea16..dc4606a7e 100644 --- a/vcd/datasource_vcd_vcenter.go +++ b/vcd/datasource_vcd_vcenter.go @@ -2,91 +2,97 @@ package vcd import ( "context" - "fmt" + "log" + "net/url" "github.com/hashicorp/terraform-plugin-sdk/v2/diag" + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/vmware/go-vcloud-director/v3/govcd" "github.com/vmware/go-vcloud-director/v3/types/v56" ) -// TODO: TM: validate compatibility with old data source - func datasourceVcdVcenter() *schema.Resource { return &schema.Resource{ - ReadContext: datasourceVcdVcenterRead, - + ReadContext: datasourceVcenterRead, Schema: map[string]*schema.Schema{ "name": { Type: schema.TypeString, Required: true, - Description: fmt.Sprintf("Name of %s", labelVirtualCenter), + Description: "Name of vCenter.", }, - "url": { + "vcenter_version": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("URL of %s", labelVirtualCenter), + Description: "vCenter version", }, - "username": { + "vcenter_host": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("Username of %s", labelVirtualCenter), + Description: "vCenter hostname", }, - "is_enabled": { - Type: schema.TypeBool, - Computed: true, - Description: fmt.Sprintf("Should the %s be enabled", labelVirtualCenter), - }, - "description": { + "status": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("Description of %s", labelVirtualCenter), - }, - "has_proxy": { - Type: schema.TypeBool, - Computed: true, - Description: fmt.Sprintf("A flag that shows if %s has proxy defined", labelVirtualCenter), + Description: "vCenter status", }, - "is_connected": { + "is_enabled": { Type: schema.TypeBool, Computed: true, - Description: fmt.Sprintf("A flag that shows if %s is connected", labelVirtualCenter), - }, - "mode": { - Type: schema.TypeString, - Computed: true, - Description: fmt.Sprintf("Mode of %s", labelVirtualCenter), - }, - "listener_state": { - Type: schema.TypeString, - Computed: true, - Description: fmt.Sprintf("Listener state of %s", labelVirtualCenter), - }, - "cluster_health_status": { - Type: schema.TypeString, - Computed: true, - Description: fmt.Sprintf("Mode of %s", labelVirtualCenter), - }, - "version": { - Type: schema.TypeString, - Computed: true, - Description: fmt.Sprintf("Version of %s", labelVirtualCenter), + Description: "vCenter version", }, - "uuid": { + // In UI this field is called `connection`, but it is a reserved field in Terrraform + "connection_status": { Type: schema.TypeString, Computed: true, - Description: fmt.Sprintf("%s UUID", labelVirtualCenter), + Description: "vCenter connection state", }, }, } } -func datasourceVcdVcenterRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { +func datasourceVcenterRead(_ context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { vcdClient := meta.(*VCDClient) - c := crudConfig[*govcd.VCenter, types.VSphereVirtualCenter]{ - entityLabel: labelVirtualCenter, - getEntityFunc: vcdClient.GetVCenterByName, - stateStoreFunc: setTmVcenterData, + + vCenterName := d.Get("name").(string) + + vcs, err := govcd.QueryVirtualCenters(vcdClient.VCDClient, "name=="+url.QueryEscape(vCenterName)) + if err != nil { + return diag.Errorf("error occured while querying vCenters: %s", err) + } + + if len(vcs) == 0 { + return diag.Errorf("%s: could not identify single vCenter. Got %d with name '%s'", + govcd.ErrorEntityNotFound, len(vcs), vCenterName) + } + + if len(vcs) > 1 { + return diag.Errorf("could not identify single vCenter. Got %d with name '%s'", + len(vcs), vCenterName) + } + + uuid := extractUuid(vcs[0].HREF) + urn, err := govcd.BuildUrnWithUuid("urn:vcloud:vimserver:", uuid) + if err != nil { + return diag.Errorf("could not build URN for ID '%s': %s", uuid, err) + } + + d.SetId(urn) + setVcenterData(d, vcs[0]) + + return nil +} + +func setVcenterData(d *schema.ResourceData, vc *types.QueryResultVirtualCenterRecordType) { + dSet(d, "vcenter_version", vc.VcVersion) + // vc.Url is in format `https://XXXX.com/sdk` while UI shows hostname only so we extract it + // The error should not be a reason to fail datasource if it is invalid so it is just logged + host, err := url.Parse(vc.Url) + if err != nil { + log.Printf("[DEBUG] [vCenter read] - could not parse vCenter URL '%s': %s", vc.Url, err) } - return readDatasource(ctx, d, meta, c) + dSet(d, "vcenter_host", host.Host) + dSet(d, "status", vc.Status) + dSet(d, "is_enabled", vc.IsEnabled) + dSet(d, "connection_status", vc.ListenerState) } diff --git a/vcd/datasource_vcd_vcenter_test.go b/vcd/datasource_vcd_vcenter_test.go index b8daf9d37..05af24a7a 100644 --- a/vcd/datasource_vcd_vcenter_test.go +++ b/vcd/datasource_vcd_vcenter_test.go @@ -9,7 +9,7 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" ) -func TestAccVcdVcenterDS(t *testing.T) { +func TestAccVcdVcenter(t *testing.T) { preTestChecks(t) skipIfNotSysAdmin(t) @@ -47,5 +47,5 @@ func TestAccVcdVcenterDS(t *testing.T) { const datasourceTestVcenter = ` data "vcd_vcenter" "vc" { name = "{{.Vcenter}}" -} + } ` diff --git a/vcd/tm_common_test.go b/vcd/tm_common_test.go index f49e705b9..696e3e946 100644 --- a/vcd/tm_common_test.go +++ b/vcd/tm_common_test.go @@ -16,10 +16,10 @@ func getVCenterHcl(t *testing.T) (string, string) { vc, err := vcdClient.GetVCenterByUrl(testConfig.Tm.VcenterUrl) if err == nil { return ` -data "vcd_vcenter" "vc" { +data "vcd_tm_vcenter" "vc" { name = "` + vc.VSphereVCenter.Name + `" } -`, "data.vcd_vcenter.vc" +`, "data.vcd_tm_vcenter.vc" } if !govcd.ContainsNotFound(err) { t.Fatal(err) @@ -30,7 +30,7 @@ data "vcd_vcenter" "vc" { return "", "" } return ` -resource "vcd_vcenter" "vc" { +resource "vcd_tm_vcenter" "vc" { name = "` + t.Name() + `" url = "` + testConfig.Tm.VcenterUrl + `" auto_trust_certificate = true @@ -40,7 +40,7 @@ resource "vcd_vcenter" "vc" { password = "` + testConfig.Tm.VcenterPassword + `" is_enabled = true } -`, "vcd_vcenter.vc" +`, "vcd_tm_vcenter.vc" } // getNsxManagerHcl gets a NSX Manager data source as first returned parameter and its HCL reference as second one, diff --git a/website/docs/d/vcenter.html.markdown b/website/docs/d/vcenter.html.markdown index 1a6e6836f..ebfda7b93 100644 --- a/website/docs/d/vcenter.html.markdown +++ b/website/docs/d/vcenter.html.markdown @@ -29,6 +29,8 @@ The following arguments are supported: ## Attribute reference -All attributes defined in -[`vcd_vcenter`](/providers/vmware/vcd/latest/docs/resources/vcenter#attribute-reference) are -supported. +* `connection_status` - vCenter connection status (e.g. `CONNECTED`). +* `is_enabled` - Boolean value if vCenter is enabled. +* `status` - vCenter status (e.g. `READY`). +* `vcenter_host` - Hostname of configured vCenter. +* `vcenter_version` - vCenter version (e.g. `6.7.0`) From 9f3847845b4d9eb9473a608b70138ad6f909244c Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Thu, 28 Nov 2024 13:19:46 +0200 Subject: [PATCH 21/23] Add provider Signed-off-by: Dainius Serplis --- vcd/provider.go | 1 + 1 file changed, 1 insertion(+) diff --git a/vcd/provider.go b/vcd/provider.go index 7a7bd47a2..60adf476d 100644 --- a/vcd/provider.go +++ b/vcd/provider.go @@ -66,6 +66,7 @@ var globalDataSourceMap = map[string]*schema.Resource{ "vcd_vm_sizing_policy": datasourceVcdVmSizingPolicy(), // 3.0 "vcd_nsxt_manager": datasourceVcdNsxtManager(), // 3.0 "vcd_nsxt_tier0_router": datasourceVcdNsxtTier0Router(), // 3.0 + "vcd_vcenter": datasourceVcdVcenter(), // 3.0 "vcd_portgroup": datasourceVcdPortgroup(), // 3.0 "vcd_resource_list": datasourceVcdResourceList(), // 3.1 "vcd_resource_schema": datasourceVcdResourceSchema(), // 3.1 From 2c83da6bd9b6433cd9f82cd17a4339b22759efd3 Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Thu, 28 Nov 2024 13:33:31 +0200 Subject: [PATCH 22/23] Add changelog Signed-off-by: Dainius Serplis --- .changes/v4.0.0/1343-features.md | 3 ++- go.mod | 4 +--- go.sum | 4 ++-- vcd/resource_vcd_tm_region_test.go | 18 +++++++++--------- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/.changes/v4.0.0/1343-features.md b/.changes/v4.0.0/1343-features.md index d7677ddeb..f31138ba9 100644 --- a/.changes/v4.0.0/1343-features.md +++ b/.changes/v4.0.0/1343-features.md @@ -1,3 +1,4 @@ -* **New Resource:** `vcd_vcenter` to manage vCenter servers [GH-1343, GH-1348, GH-1355] +* **New Resource:** `vcd_tm_vcenter` to manage TM vCenter servers [GH-1343, GH-1348, GH-1355] +* **New Data Source:** `vcd_tm_vcenter` to read TM vCenter servers [GH-1355] * **New Resource:** `vcd_tm_nsxt_manager` to manage NSX-T Managers [GH-1343, GH-1355] * **New Data Source:** `vcd_tm_nsxt_manager` to manage NSX-T Managers [GH-1343, GH-1355] diff --git a/go.mod b/go.mod index de0ef24a3..a045f9a0f 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/hashicorp/go-version v1.6.0 github.com/hashicorp/terraform-plugin-sdk/v2 v2.34.0 github.com/kr/pretty v0.3.1 - github.com/vmware/go-vcloud-director/v3 v3.0.0-alpha.6 + github.com/vmware/go-vcloud-director/v3 v3.0.0-alpha.7 ) require ( @@ -68,5 +68,3 @@ require ( google.golang.org/grpc v1.63.2 // indirect google.golang.org/protobuf v1.34.0 // indirect ) - -replace github.com/vmware/go-vcloud-director/v3 => github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241126113054-dae643826d5f diff --git a/go.sum b/go.sum index 7acd66623..5024d348c 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,5 @@ 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.20241126113054-dae643826d5f h1:HS+RmyJUiNGjfZoT2rW23YiSFvJHsKhc9L3KNgBUKyU= -github.com/Didainius/go-vcloud-director/v3 v3.0.0-alpha.4.0.20241126113054-dae643826d5f/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= @@ -151,6 +149,8 @@ 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.7 h1:puIYeYmnPOisLptusccwNQKXVMS930Ja6KTyhjvqTow= +github.com/vmware/go-vcloud-director/v3 v3.0.0-alpha.7/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= diff --git a/vcd/resource_vcd_tm_region_test.go b/vcd/resource_vcd_tm_region_test.go index efe6be8b8..87d30cb10 100644 --- a/vcd/resource_vcd_tm_region_test.go +++ b/vcd/resource_vcd_tm_region_test.go @@ -62,7 +62,7 @@ func TestAccVcdTmRegion(t *testing.T) { Config: configText1, Check: resource.ComposeTestCheckFunc( resource.TestMatchResourceAttr("vcd_tm_nsxt_manager.test", "id", regexp.MustCompile(`^urn:vcloud:nsxtmanager:`)), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "id"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "id"), resource.TestCheckResourceAttrSet("vcd_tm_region.test", "id"), cachedRegionId.cacheTestResourceFieldValue("vcd_tm_region.test", "id"), resource.TestCheckResourceAttr("vcd_tm_region.test", "is_enabled", "true"), @@ -76,9 +76,9 @@ func TestAccVcdTmRegion(t *testing.T) { resource.TestCheckTypeSetElemAttr("vcd_tm_region.test", "storage_policy_names.*", testConfig.Tm.VcenterStorageProfile), resource.TestCheckResourceAttrSet("data.vcd_tm_supervisor.test", "id"), - resource.TestCheckResourceAttrPair("data.vcd_tm_supervisor.test", "vcenter_id", "vcd_vcenter.test", "id"), + resource.TestCheckResourceAttrPair("data.vcd_tm_supervisor.test", "vcenter_id", "vcd_tm_vcenter.test", "id"), resource.TestCheckResourceAttrSet("data.vcd_tm_supervisor_zone.test", "id"), - resource.TestCheckResourceAttrPair("data.vcd_tm_supervisor_zone.test", "vcenter_id", "vcd_vcenter.test", "id"), + resource.TestCheckResourceAttrPair("data.vcd_tm_supervisor_zone.test", "vcenter_id", "vcd_tm_vcenter.test", "id"), resource.TestCheckResourceAttrSet("data.vcd_tm_supervisor_zone.test", "cpu_capacity_mhz"), resource.TestCheckResourceAttrSet("data.vcd_tm_supervisor_zone.test", "cpu_used_mhz"), resource.TestCheckResourceAttrSet("data.vcd_tm_supervisor_zone.test", "memory_capacity_mib"), @@ -89,7 +89,7 @@ func TestAccVcdTmRegion(t *testing.T) { Config: configText2, Check: resource.ComposeTestCheckFunc( resource.TestMatchResourceAttr("vcd_tm_nsxt_manager.test", "id", regexp.MustCompile(`^urn:vcloud:nsxtmanager:`)), - resource.TestCheckResourceAttrSet("vcd_vcenter.test", "id"), + resource.TestCheckResourceAttrSet("vcd_tm_vcenter.test", "id"), resource.TestCheckResourceAttrSet("vcd_tm_region.test", "id"), cachedRegionId.testCheckCachedResourceFieldValueChanged("vcd_tm_region.test", "id"), resource.TestCheckResourceAttr("vcd_tm_region.test", "is_enabled", "true"), @@ -103,10 +103,10 @@ func TestAccVcdTmRegion(t *testing.T) { resource.TestCheckTypeSetElemAttr("vcd_tm_region.test", "storage_policy_names.*", testConfig.Tm.VcenterStorageProfile), resource.TestCheckResourceAttrSet("data.vcd_tm_supervisor.test", "id"), - resource.TestCheckResourceAttrPair("data.vcd_tm_supervisor.test", "vcenter_id", "vcd_vcenter.test", "id"), + resource.TestCheckResourceAttrPair("data.vcd_tm_supervisor.test", "vcenter_id", "vcd_tm_vcenter.test", "id"), resource.TestCheckResourceAttrSet("data.vcd_tm_supervisor_zone.test", "id"), - resource.TestCheckResourceAttrPair("data.vcd_tm_supervisor_zone.test", "vcenter_id", "vcd_vcenter.test", "id"), + resource.TestCheckResourceAttrPair("data.vcd_tm_supervisor_zone.test", "vcenter_id", "vcd_tm_vcenter.test", "id"), resource.TestCheckResourceAttrSet("data.vcd_tm_supervisor_zone.test", "cpu_capacity_mhz"), resource.TestCheckResourceAttrSet("data.vcd_tm_supervisor_zone.test", "cpu_used_mhz"), resource.TestCheckResourceAttrSet("data.vcd_tm_supervisor_zone.test", "memory_capacity_mib"), @@ -147,7 +147,7 @@ resource "vcd_tm_nsxt_manager" "test" { auto_trust_certificate = true } -resource "vcd_vcenter" "test" { +resource "vcd_tm_vcenter" "test" { name = "{{.Testname}}" url = "{{.VcenterUrl}}" auto_trust_certificate = true @@ -160,9 +160,9 @@ resource "vcd_vcenter" "test" { data "vcd_tm_supervisor" "test" { name = "{{.VcenterSupervisor}}" - vcenter_id = vcd_vcenter.test.id + vcenter_id = vcd_tm_vcenter.test.id - depends_on = [vcd_vcenter.test] + depends_on = [vcd_tm_vcenter.test] } data "vcd_tm_supervisor_zone" "test" { From 210eb8e7a2ce905c940048e6ac6a5a5ecb61ef86 Mon Sep 17 00:00:00 2001 From: Dainius Serplis Date: Thu, 28 Nov 2024 13:38:33 +0200 Subject: [PATCH 23/23] Address comment Signed-off-by: Dainius Serplis --- website/docs/r/tm_vcenter.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/r/tm_vcenter.html.markdown b/website/docs/r/tm_vcenter.html.markdown index 6b1d71d23..bb611d13c 100644 --- a/website/docs/r/tm_vcenter.html.markdown +++ b/website/docs/r/tm_vcenter.html.markdown @@ -66,7 +66,7 @@ The following attributes are exported on this resource: * `cluster_health_status` - Cluster health status. One of `GRAY` , `RED` , `YELLOW` , `GREEN` * `version` - vCenter version * `uuid` - UUID of vCenter -* `vcenter_host` - Host of Vcenter server +* `vcenter_host` - Host of vCenter server * `status` - Status can be `READY` or `NOT_READY`. It is a derivative field of `is_connected` and `connection_status` so relying on those fields could be more precise.