From 9ac2a3eba9d1b93c83a75c6aa878b24f6bef1ff2 Mon Sep 17 00:00:00 2001 From: Dan Petersen Date: Thu, 2 Jan 2020 00:19:17 +0100 Subject: [PATCH] Add entries attribute to hosts data source --- README.md | 1 + .../data_source_virtual_environment_hosts.tf | 4 ++ .../data_source_virtual_environment_hosts.go | 38 +++++++++++++++++-- ...a_source_virtual_environment_hosts_test.go | 18 +++++++++ 4 files changed, 57 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ddb0fa2c..61da7c8b 100644 --- a/README.md +++ b/README.md @@ -155,6 +155,7 @@ This data source doesn't accept arguments. ###### Attributes * `addresses` - The IP addresses * `digest` - The SHA1 digest +* `entries` - The entries (conversion of `addresses` and `hostnames` into objects) * `hostnames` - The hostnames associated with each of the IP addresses ##### Nodes (proxmox_virtual_environment_nodes) diff --git a/example/data_source_virtual_environment_hosts.tf b/example/data_source_virtual_environment_hosts.tf index 1f901a6a..3f16d12d 100644 --- a/example/data_source_virtual_environment_hosts.tf +++ b/example/data_source_virtual_environment_hosts.tf @@ -10,6 +10,10 @@ output "data_proxmox_virtual_environment_hosts_example_digest" { value = "${data.proxmox_virtual_environment_hosts.example.digest}" } +output "data_proxmox_virtual_environment_hosts_example_entries" { + value = "${data.proxmox_virtual_environment_hosts.example.entries}" +} + output "data_proxmox_virtual_environment_hosts_example_hostnames" { value = "${data.proxmox_virtual_environment_hosts.example.hostnames}" } diff --git a/proxmoxtf/data_source_virtual_environment_hosts.go b/proxmoxtf/data_source_virtual_environment_hosts.go index bd94c9c5..efb5e98b 100644 --- a/proxmoxtf/data_source_virtual_environment_hosts.go +++ b/proxmoxtf/data_source_virtual_environment_hosts.go @@ -12,10 +12,13 @@ import ( ) const ( - mkDataSourceVirtualEnvironmentHostsAddresses = "addresses" - mkDataSourceVirtualEnvironmentHostsDigest = "digest" - mkDataSourceVirtualEnvironmentHostsHostnames = "hostnames" - mkDataSourceVirtualEnvironmentHostsNodeName = "node_name" + mkDataSourceVirtualEnvironmentHostsAddresses = "addresses" + mkDataSourceVirtualEnvironmentHostsDigest = "digest" + mkDataSourceVirtualEnvironmentHostsEntries = "entries" + mkDataSourceVirtualEnvironmentHostsEntriesAddress = "address" + mkDataSourceVirtualEnvironmentHostsEntriesHostnames = "hostnames" + mkDataSourceVirtualEnvironmentHostsHostnames = "hostnames" + mkDataSourceVirtualEnvironmentHostsNodeName = "node_name" ) func dataSourceVirtualEnvironmentHosts() *schema.Resource { @@ -32,6 +35,26 @@ func dataSourceVirtualEnvironmentHosts() *schema.Resource { Description: "The SHA1 digest", Computed: true, }, + mkDataSourceVirtualEnvironmentHostsEntries: &schema.Schema{ + Type: schema.TypeList, + Description: "The entries", + Computed: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + mkDataSourceVirtualEnvironmentHostsEntriesAddress: { + Type: schema.TypeString, + Description: "The address", + Computed: true, + }, + mkDataSourceVirtualEnvironmentHostsEntriesHostnames: &schema.Schema{ + Type: schema.TypeList, + Description: "The hostnames", + Computed: true, + Elem: &schema.Schema{Type: schema.TypeString}, + }, + }, + }, + }, mkDataSourceVirtualEnvironmentHostsHostnames: &schema.Schema{ Type: schema.TypeList, Description: "The hostnames", @@ -70,6 +93,7 @@ func dataSourceVirtualEnvironmentHostsRead(d *schema.ResourceData, m interface{} // Parse the entries in the hosts file. addresses := []interface{}{} + entries := []interface{}{} hostnames := []interface{}{} lines := strings.Split(hosts.Data, "\n") @@ -86,6 +110,7 @@ func dataSourceVirtualEnvironmentHostsRead(d *schema.ResourceData, m interface{} } addresses = append(addresses, values[0]) + entry := map[string]interface{}{} hostnamesForAddress := []interface{}{} for _, hostname := range values[1:] { @@ -94,6 +119,10 @@ func dataSourceVirtualEnvironmentHostsRead(d *schema.ResourceData, m interface{} } } + entry[mkDataSourceVirtualEnvironmentHostsEntriesAddress] = values[0] + entry[mkDataSourceVirtualEnvironmentHostsEntriesHostnames] = hostnamesForAddress + + entries = append(entries, entry) hostnames = append(hostnames, hostnamesForAddress) } @@ -105,6 +134,7 @@ func dataSourceVirtualEnvironmentHostsRead(d *schema.ResourceData, m interface{} d.Set(mkDataSourceVirtualEnvironmentHostsDigest, "") } + d.Set(mkDataSourceVirtualEnvironmentHostsEntries, entries) d.Set(mkDataSourceVirtualEnvironmentHostsHostnames, hostnames) return nil diff --git a/proxmoxtf/data_source_virtual_environment_hosts_test.go b/proxmoxtf/data_source_virtual_environment_hosts_test.go index 26842c15..75674db3 100644 --- a/proxmoxtf/data_source_virtual_environment_hosts_test.go +++ b/proxmoxtf/data_source_virtual_environment_hosts_test.go @@ -29,18 +29,36 @@ func TestDataSourceVirtualEnvironmentHostsSchema(t *testing.T) { testComputedAttributes(t, s, []string{ mkDataSourceVirtualEnvironmentHostsAddresses, mkDataSourceVirtualEnvironmentHostsDigest, + mkDataSourceVirtualEnvironmentHostsEntries, mkDataSourceVirtualEnvironmentHostsHostnames, }) testSchemaValueTypes(t, s, []string{ mkDataSourceVirtualEnvironmentHostsAddresses, mkDataSourceVirtualEnvironmentHostsDigest, + mkDataSourceVirtualEnvironmentHostsEntries, mkDataSourceVirtualEnvironmentHostsHostnames, mkDataSourceVirtualEnvironmentHostsNodeName, }, []schema.ValueType{ schema.TypeList, schema.TypeString, schema.TypeList, + schema.TypeList, schema.TypeString, }) + + entriesSchema := testNestedSchemaExistence(t, s, mkDataSourceVirtualEnvironmentHostsEntries) + + testComputedAttributes(t, entriesSchema, []string{ + mkDataSourceVirtualEnvironmentHostsEntriesAddress, + mkDataSourceVirtualEnvironmentHostsEntriesHostnames, + }) + + testSchemaValueTypes(t, entriesSchema, []string{ + mkDataSourceVirtualEnvironmentHostsEntriesAddress, + mkDataSourceVirtualEnvironmentHostsEntriesHostnames, + }, []schema.ValueType{ + schema.TypeString, + schema.TypeList, + }) }