diff --git a/docs/data-sources/host.md b/docs/data-sources/host.md deleted file mode 100644 index 15f89b0..0000000 --- a/docs/data-sources/host.md +++ /dev/null @@ -1,141 +0,0 @@ ---- -# generated by https://github.com/hashicorp/terraform-plugin-docs -page_title: "vcf_host Data Source - terraform-provider-vcf" -subcategory: "" -description: |- - ---- - -# vcf_host (Data Source) - -The `vcf_host` data source provides information about an ESXi host in a VMware Cloud Foundation environment. - - -## Schema - -### Required - -- `fqdn` (String) The fully qualified domain name of the ESXi host. - -### Read-Only - -- `cluster` (List of Object) The cluster information of the ESXi host. (see [below for nested schema](#nestedatt--cluster)) -- `cpu` (List of Object) The CPU information of the ESXi host. (see [below for nested schema](#nestedatt--cpu)) -- `domain` (List of Object) The workload domain information of the ESXi host. (see [below for nested schema](#nestedatt--domain)) -- `hardware` (List of Object) The hardware information of the ESXi host. (see [below for nested schema](#nestedatt--hardware)) -- `id` (String) The ID of the ESXi host. -- `ip_addresses` (List of Object) The IP addresses information of the ESXi host. (see [below for nested schema](#nestedatt--ip_addresses)) -- `memory` (List of Object) The memory information of the ESXi host. (see [below for nested schema](#nestedatt--memory)) -- `network_pool` (List of Object) The network pool associated with the ESXi host. (see [below for nested schema](#nestedatt--network_pool)) -- `physical_nics` (List of Object) The physical NICs information of the ESXi host. (see [below for nested schema](#nestedatt--physical_nics)) -- `status` (String) The status of the ESXi host. -- `storage` (List of Object) The storage information of the ESXi host. (see [below for nested schema](#nestedatt--storage)) -- `storage_type` (String) The storage type of the ESXi host. -- `version` (String) The version of the ESXi running on the host. - - - -### Nested Schema for `cluster` - -Read-Only: - -- `id` (String) - - - -### Nested Schema for `cpu` - -Read-Only: - -- `cores` (Number) -- `cpu_cores` (List of Object) (see [below for nested schema](#nestedobjatt--cpu--cpu_cores)) -- `frequency_mhz` (Number) -- `used_frequency_mhz` (Number) - - - -### Nested Schema for `cpu.cpu_cores` - -Read-Only: - -- `frequency_mhz` (Number) -- `manufacturer` (String) -- `model` (String) - - - -### Nested Schema for `domain` - -Read-Only: - -- `id` (String) -- `name` (String) - - - -### Nested Schema for `hardware` - -Read-Only: - -- `hybrid` (Boolean) -- `model` (String) -- `vendor` (String) - - - -### Nested Schema for `ip_addresses` - -Read-Only: - -- `ip_address` (String) -- `type` (String) - - - -### Nested Schema for `memory` - -Read-Only: - -- `total_capacity_mb` (Number) -- `used_capacity_mb` (Number) - - - -### Nested Schema for `network_pool` - -Read-Only: - -- `id` (String) -- `name` (String) - - - -### Nested Schema for `physical_nics` - -Read-Only: - -- `device_name` (String) -- `mac_address` (String) -- `speed` (Number) -- `unit` (String) - - - -### Nested Schema for `storage` - -Read-Only: - -- `disks` (List of Object) (see [below for nested schema](#nestedobjatt--storage--disks)) -- `total_capacity_mb` (Number) -- `used_capacity_mb` (Number) - - - -### Nested Schema for `storage.disks` - -Read-Only: - -- `capacity_mb` (Number) -- `disk_type` (String) -- `manufacturer` (String) -- `model` (String) diff --git a/examples/data-sources/host/variables.tf b/examples/data-sources/host/variables.tf deleted file mode 100644 index 9e69411..0000000 --- a/examples/data-sources/host/variables.tf +++ /dev/null @@ -1,22 +0,0 @@ -variable "sddc_manager_host" { - type = string - description = "The fully qualified domain name of the SDDC Manager instance." -} - -variable "sddc_manager_username" { - type = string - description = "The username to authenticate to the SDDC Manager instance." - sensitive = true -} - -variable "sddc_manager_password" { - type = string - description = "The password to authenticate to the SDDC Manager instance." - sensitive = true -} - -variable "host_fqdn" { - type = string - description = "The fully qualified domain name of the ESXi host." - default = "sfo-w01-esx01.sfo.rainpole.io" -} diff --git a/examples/data-sources/host/vcf_host.tf b/examples/data-sources/host/vcf_host.tf deleted file mode 100644 index b8f3132..0000000 --- a/examples/data-sources/host/vcf_host.tf +++ /dev/null @@ -1,131 +0,0 @@ -terraform { - required_providers { - vcf = { - source = "vmware/vcf" - } - } -} - -provider "vcf" { - sddc_manager_username = var.sddc_manager_username - sddc_manager_password = var.sddc_manager_password - sddc_manager_host = var.sddc_manager_host -} - -data "vcf_host" "example" { - fqdn = var.host_fqdn -} - -output "host_id" { - value = data.vcf_host.example.id -} - -output "host_fqdn" { - value = data.vcf_host.example.fqdn -} - -output "host_hardware" { - value = [ - for hw in data.vcf_host.example.hardware : { - hybrid = hw.hybrid - model = hw.model - vendor = hw.vendor - } - ] -} - -output "host_version" { - value = data.vcf_host.example.version -} - -output "host_status" { - value = data.vcf_host.example.status -} - -output "host_domain" { - value = [ - for domain in data.vcf_host.example.domain : { - id = domain.id - } - ] -} - -output "host_cluster" { - value = [ - for cluster in data.vcf_host.example.cluster : { - id = cluster.id - } - ] -} - -output "host_network_pool" { - value = [ - for pool in data.vcf_host.example.network_pool : { - id = pool.id - name = pool.name - } - ] -} - -output "host_cpu" { - value = [ - for cpu in coalesce(tolist(data.vcf_host.example.cpu), []) : { - cores = cpu.cores - frequency_mhz = cpu.frequency_mhz - used_frequency_mhz = cpu.used_frequency_mhz - cpu_cores = [ - for core in coalesce(tolist(cpu.cpu_cores), []) : { - frequency_mhz = core.frequency_mhz - manufacturer = core.manufacturer - model = core.model - } - ] - } - ] -} - -output "host_memory" { - value = [ - for mem in data.vcf_host.example.memory : { - total_capacity_mb = mem.total_capacity_mb - used_capacity_mb = mem.used_capacity_mb - } - ] -} - -output "host_storage" { - value = [ - for storage in coalesce(tolist(data.vcf_host.example.storage), []) : { - total_capacity_mb = storage.total_capacity_mb - used_capacity_mb = storage.used_capacity_mb - disks = [ - for disk in coalesce(tolist(storage.disks), []) : { - capacity_mb = disk.capacity_mb - disk_type = disk.disk_type - manufacturer = disk.manufacturer - model = disk.model - } - ] - } - ] -} - -output "host_physical_nics" { - value = [ - for nic in data.vcf_host.example.physical_nics : { - device_name = nic.device_name - mac_address = nic.mac_address - speed = nic.speed - unit = nic.unit - } - ] -} - -output "host_ip_addresses" { - value = [ - for ip in data.vcf_host.example.ip_addresses : { - ip_address = ip.ip_address - type = ip.type - } - ] -} diff --git a/internal/provider/data_host.go b/internal/provider/data_host.go deleted file mode 100644 index 933dfc6..0000000 --- a/internal/provider/data_host.go +++ /dev/null @@ -1,455 +0,0 @@ -// © Broadcom. All Rights Reserved. -// The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. -// SPDX-License-Identifier: MPL-2.0 - -package provider - -import ( - "context" - "errors" - - "github.com/hashicorp/terraform-plugin-sdk/v2/diag" - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" - "github.com/vmware/vcf-sdk-go/client" - "github.com/vmware/vcf-sdk-go/client/hosts" - "github.com/vmware/vcf-sdk-go/models" - - "github.com/vmware/terraform-provider-vcf/internal/api_client" - "github.com/vmware/terraform-provider-vcf/internal/constants" -) - -func DataSourceHost() *schema.Resource { - return &schema.Resource{ - ReadContext: dataSourceHostRead, - Schema: map[string]*schema.Schema{ - "id": { - Type: schema.TypeString, - Computed: true, - Description: "The ID of the ESXi host.", - }, - "fqdn": { - Type: schema.TypeString, - Required: true, - Description: "The fully qualified domain name of the ESXi host.", - }, - "hardware": { - Type: schema.TypeList, - Computed: true, - Description: "The hardware information of the ESXi host.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "model": { - Type: schema.TypeString, - Computed: true, - Description: "The hardware model of the ESXi host.", - }, - "vendor": { - Type: schema.TypeString, - Computed: true, - Description: "The hardware vendor of the ESXi host.", - }, - "hybrid": { - Type: schema.TypeBool, - Computed: true, - Description: "Indicates if the ESXi host is hybrid.", - }, - }, - }, - }, - "version": { - Type: schema.TypeString, - Computed: true, - Description: "The version of the ESXi running on the host.", - }, - "status": { - Type: schema.TypeString, - Computed: true, - Description: "The status of the ESXi host.", - }, - "domain": { - Type: schema.TypeList, - Computed: true, - Description: "The workload domain information of the ESXi host.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "id": { - Type: schema.TypeString, - Computed: true, - Description: "The ID of the workload domain.", - }, - "name": { - Type: schema.TypeString, - Computed: true, - Description: "The name of the workload domain.", - }, - }, - }, - }, - "cluster": { - Type: schema.TypeList, - Computed: true, - Description: "The cluster information of the ESXi host.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "id": { - Type: schema.TypeString, - Computed: true, - Description: "The ID of the cluster.", - }, - }, - }, - }, - "network_pool": { - Type: schema.TypeList, - Computed: true, - Description: "The network pool associated with the ESXi host.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "name": { - Type: schema.TypeString, - Computed: true, - Description: "The name of the network pool.", - }, - "id": { - Type: schema.TypeString, - Computed: true, - Description: "The ID of the network pool.", - }, - }, - }, - }, - "cpu": { - Type: schema.TypeList, - Computed: true, - Description: "The CPU information of the ESXi host.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "cores": { - Type: schema.TypeInt, - Computed: true, - Description: "Number of CPU cores.", - }, - "cpu_cores": { - Type: schema.TypeList, - Computed: true, - Description: "Information about each of the CPU cores.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "frequency_mhz": { - Type: schema.TypeFloat, - Computed: true, - Description: "The frequency of the CPU core in MHz.", - }, - "manufacturer": { - Type: schema.TypeString, - Computed: true, - Description: "The manufacturer of the CPU.", - }, - "model": { - Type: schema.TypeString, - Computed: true, - Description: "The model of the CPU.", - }, - }, - }, - }, - "frequency_mhz": { - Type: schema.TypeFloat, - Computed: true, - Description: "Total CPU frequency in MHz.", - }, - "used_frequency_mhz": { - Type: schema.TypeFloat, - Computed: true, - Description: "Used CPU frequency in MHz.", - }, - }, - }, - }, - "memory": { - Type: schema.TypeList, - Computed: true, - Description: "The memory information of the ESXi host.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "total_capacity_mb": { - Type: schema.TypeFloat, - Computed: true, - Description: "The total memory capacity in MB.", - }, - "used_capacity_mb": { - Type: schema.TypeFloat, - Computed: true, - Description: "The used memory capacity in MB.", - }, - }, - }, - }, - "storage_type": { - Type: schema.TypeString, - Computed: true, - Description: "The storage type of the ESXi host.", - }, - "storage": { - Type: schema.TypeList, - Computed: true, - Description: "The storage information of the ESXi host.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "total_capacity_mb": { - Type: schema.TypeFloat, - Computed: true, - Description: "The total storage capacity in MB.", - }, - "used_capacity_mb": { - Type: schema.TypeFloat, - Computed: true, - Description: "The used storage capacity in MB.", - }, - "disks": { - Type: schema.TypeList, - Computed: true, - Description: "The disks information of the ESXi host.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "capacity_mb": { - Type: schema.TypeFloat, - Computed: true, - Description: "The capacity of the disk in MB.", - }, - "disk_type": { - Type: schema.TypeString, - Computed: true, - Description: "The type of the disk.", - }, - "manufacturer": { - Type: schema.TypeString, - Computed: true, - Description: "The manufacturer of the disk.", - }, - "model": { - Type: schema.TypeString, - Computed: true, - Description: "The model of the disk.", - }, - }, - }, - }, - }, - }, - }, - "physical_nics": { - Type: schema.TypeList, - Computed: true, - Description: "The physical NICs information of the ESXi host.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "device_name": { - Type: schema.TypeString, - Computed: true, - Description: "The device name of the NIC.", - }, - "mac_address": { - Type: schema.TypeString, - Computed: true, - Description: "The MAC address of the NIC.", - }, - "speed": { - Type: schema.TypeFloat, - Computed: true, - Description: "The speed of the NIC.", - }, - "unit": { - Type: schema.TypeString, - Computed: true, - Description: "The unit of the NIC speed.", - }, - }, - }, - }, - "ip_addresses": { - Type: schema.TypeList, - Computed: true, - Description: "The IP addresses information of the ESXi host.", - Elem: &schema.Resource{ - Schema: map[string]*schema.Schema{ - "ip_address": { - Type: schema.TypeString, - Computed: true, - Description: "The IP address.", - }, - "type": { - Type: schema.TypeString, - Computed: true, - Description: "The type of the IP address.", - }, - }, - }, - }, - }, - } -} - -func dataSourceHostRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics { - apiClient := meta.(*api_client.SddcManagerClient).ApiClient - - fqdn := d.Get("fqdn").(string) - host, err := getHostByFqdn(ctx, apiClient, fqdn) - if err != nil { - return diag.FromErr(err) - } - - d.SetId(host.ID) - - // Fully qualified domain name information. - _ = d.Set("fqdn", host.Fqdn) - - // Hardware information. - hardware := []map[string]interface{}{ - { - "model": host.HardwareModel, - "vendor": host.HardwareVendor, - "hybrid": host.Hybrid, - }, - } - _ = d.Set("hardware", hardware) - - // ESXi version information. - _ = d.Set("version", host.EsxiVersion) - - // Status information. - _ = d.Set("status", host.Status) - - // Domain information. - domain := []map[string]interface{}{ - { - "id": host.Domain.ID, - "name": host.Domain.Name, - }, - } - _ = d.Set("domain", domain) - - // Cluster information. - cluster := []map[string]interface{}{ - { - "id": host.Cluster.ID, - }, - } - _ = d.Set("cluster", cluster) - - // Network pool information. - networkPool := []map[string]interface{}{ - { - "id": host.Networkpool.ID, - "name": host.Networkpool.Name, - }, - } - _ = d.Set("network_pool", networkPool) - - // CPU information. - cpuCores := []map[string]interface{}{} - for _, core := range host.CPU.CPUCores { - cpuCore := map[string]interface{}{ - "frequency_mhz": core.FrequencyMHz, - "manufacturer": core.Manufacturer, - "model": core.Model, - } - cpuCores = append(cpuCores, cpuCore) - } - - cpu := map[string]interface{}{ - "cores": host.CPU.Cores, - "cpu_cores": cpuCores, - "frequency_mhz": host.CPU.FrequencyMHz, - "used_frequency_mhz": host.CPU.UsedFrequencyMHz, - } - - if err := d.Set("cpu", []interface{}{cpu}); err != nil { - return diag.FromErr(err) - } - - // Memory information. - memory := []map[string]interface{}{ - { - "total_capacity_mb": host.Memory.TotalCapacityMB, - "used_capacity_mb": host.Memory.UsedCapacityMB, - }, - } - _ = d.Set("memory", memory) - - // Compatible storage type information. - _ = d.Set("compatible_storage_type", host.CompatibleStorageType) - - // Storage information. - disks := []map[string]interface{}{} - for _, disk := range host.Storage.Disks { - diskInfo := map[string]interface{}{ - "capacity_mb": disk.CapacityMB, - "disk_type": disk.DiskType, - "manufacturer": disk.Manufacturer, - "model": disk.Model, - } - disks = append(disks, diskInfo) - } - - storage := []map[string]interface{}{ - { - "total_capacity_mb": host.Storage.TotalCapacityMB, - "used_capacity_mb": host.Storage.UsedCapacityMB, - "disks": disks, - }, - } - _ = d.Set("storage", storage) - - // Physical NICs information. - physicalNics := []map[string]interface{}{} - for _, nic := range host.PhysicalNics { - physicalNic := map[string]interface{}{ - "device_name": nic.DeviceName, - "mac_address": nic.MacAddress, - "speed": nic.Speed, - "unit": nic.Unit, - } - physicalNics = append(physicalNics, physicalNic) - } - _ = d.Set("physical_nics", physicalNics) - - // IP addresses information. - ipAddresses := []map[string]interface{}{} - for _, ip := range host.IPAddresses { - ipAddress := map[string]interface{}{ - "ip_address": ip.IPAddress, - "type": ip.Type, - } - ipAddresses = append(ipAddresses, ipAddress) - } - _ = d.Set("ip_addresses", ipAddresses) - - return nil -} - -func getHostByFqdn(ctx context.Context, apiClient *client.VcfClient, fqdn string) (*models.Host, error) { - params := hosts.NewGetHostsParamsWithContext(ctx). - WithTimeout(constants.DefaultVcfApiCallTimeout) - - hostPayload, err := apiClient.Hosts.GetHosts(params) - if err != nil { - return nil, err - } - - if hostPayload.Payload == nil || len(hostPayload.Payload.Elements) == 0 { - return nil, errors.New("no hosts found") - } - - for _, element := range hostPayload.Payload.Elements { - if element == nil { - continue - } - - if element.Fqdn == fqdn { - return element, nil - } - } - - return nil, errors.New("host not found") -} diff --git a/internal/provider/data_host_test.go b/internal/provider/data_host_test.go deleted file mode 100644 index 97bf334..0000000 --- a/internal/provider/data_host_test.go +++ /dev/null @@ -1,56 +0,0 @@ -// © Broadcom. All Rights Reserved. -// The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. -// SPDX-License-Identifier: MPL-2.0 - -package provider - -import ( - "fmt" - "testing" - - "github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource" - - "github.com/vmware/terraform-provider-vcf/internal/constants" -) - -func TestAccDataSourceVcfHost(t *testing.T) { - hosts := []string{ - constants.VcfTestHost1Fqdn, - constants.VcfTestHost2Fqdn, - constants.VcfTestHost3Fqdn, - constants.VcfTestHost4Fqdn, - } - - var steps []resource.TestStep - for _, fqdn := range hosts { - steps = append(steps, resource.TestStep{ - Config: testAccDataSourceVcfHostConfig(fqdn), - Check: resource.ComposeTestCheckFunc( - resource.TestCheckResourceAttrSet("data.vcf_host.test_host", "id"), - resource.TestCheckResourceAttr("data.vcf_host.test_host", "fqdn", fqdn), - ), - }) - } - - resource.ParallelTest(t, resource.TestCase{ - PreCheck: func() { testAccPreCheck(t) }, - ProtoV6ProviderFactories: muxedFactories(), - Steps: steps, - }) -} - -func testAccDataSourceVcfHostConfig(hostFqdn string) string { - return fmt.Sprintf(` - resource "vcf_host" "test_host" { - fqdn = %q - username = "root" - password = "password" - network_pool_id = "test_network_pool_id" - storage_type = "VSAN" - } - - data "vcf_host" "test_host" { - fqdn = vcf_host.test_host.fqdn - } - `, hostFqdn) -} diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 2967085..2633b4f 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -76,9 +76,8 @@ func Provider() *schema.Provider { DataSourcesMap: map[string]*schema.Resource{ "vcf_cluster": DataSourceCluster(), - "vcf_credentials": DataSourceCredentials(), "vcf_domain": DataSourceDomain(), - "vcf_host": DataSourceHost(), + "vcf_credentials": DataSourceCredentials(), "vcf_network_pool": DataSourceNetworkPool(), "vcf_certificate": DataSourceCertificate(), },