From 43e3d6b9c5cc3516b06817cd8a94f5122bc63aee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Kubica?= Date: Thu, 1 Sep 2022 12:47:36 +0200 Subject: [PATCH] Fix skipping not overriden labels --- openstack/containerinfra_shared_v1.go | 8 +++++++- openstack/resource_openstack_containerinfra_cluster_v1.go | 6 +++++- .../resource_openstack_containerinfra_nodegroup_v1.go | 6 +++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/openstack/containerinfra_shared_v1.go b/openstack/containerinfra_shared_v1.go index 080ccb133..dcd5a11f1 100644 --- a/openstack/containerinfra_shared_v1.go +++ b/openstack/containerinfra_shared_v1.go @@ -59,7 +59,7 @@ func expandContainerInfraV1LabelsString(v map[string]interface{}) (string, error return formattedLabels, nil } -func containerInfraV1GetLabelsMerged(labelsAdded map[string]string, labelsSkipped map[string]string, labelsOverridden map[string]string, labels map[string]string) map[string]string { +func containerInfraV1GetLabelsMerged(labelsAdded map[string]string, labelsSkipped map[string]string, labelsOverridden map[string]string, labels map[string]string, resourceDataLabels map[string]string) map[string]string { m := make(map[string]string) for key, val := range labelsAdded { m[key] = val @@ -71,6 +71,12 @@ func containerInfraV1GetLabelsMerged(labelsAdded map[string]string, labelsSkippe // We have to get the actual value here, not the one overridden m[key] = labels[key] } + // If defined resource's labels don't override label (are the same) + for key, val := range resourceDataLabels { + if _, exist := m[key]; !exist { + m[key] = val + } + } return m } diff --git a/openstack/resource_openstack_containerinfra_cluster_v1.go b/openstack/resource_openstack_containerinfra_cluster_v1.go index 153f1af3c..9aa25601f 100644 --- a/openstack/resource_openstack_containerinfra_cluster_v1.go +++ b/openstack/resource_openstack_containerinfra_cluster_v1.go @@ -355,7 +355,11 @@ func resourceContainerInfraClusterV1Read(_ context.Context, d *schema.ResourceDa labels := s.Labels if d.Get("merge_labels").(bool) { - labels = containerInfraV1GetLabelsMerged(s.LabelsAdded, s.LabelsSkipped, s.LabelsOverridden, s.Labels) + resourceDataLabels, err := expandContainerInfraV1LabelsMap(d.Get("labels").(map[string]interface{})) + if err != nil { + return diag.FromErr(err) + } + labels = containerInfraV1GetLabelsMerged(s.LabelsAdded, s.LabelsSkipped, s.LabelsOverridden, s.Labels, resourceDataLabels) } if err := d.Set("labels", labels); err != nil { return diag.Errorf("Unable to set openstack_containerinfra_cluster_v1 labels: %s", err) diff --git a/openstack/resource_openstack_containerinfra_nodegroup_v1.go b/openstack/resource_openstack_containerinfra_nodegroup_v1.go index cff5cf1ef..ba27a37b8 100644 --- a/openstack/resource_openstack_containerinfra_nodegroup_v1.go +++ b/openstack/resource_openstack_containerinfra_nodegroup_v1.go @@ -232,7 +232,11 @@ func resourceContainerInfraNodeGroupV1Read(_ context.Context, d *schema.Resource labels := nodeGroup.Labels if d.Get("merge_labels").(bool) { - labels = containerInfraV1GetLabelsMerged(nodeGroup.LabelsAdded, nodeGroup.LabelsSkipped, nodeGroup.LabelsOverridden, nodeGroup.Labels) + resourceDataLabels, err := expandContainerInfraV1LabelsMap(d.Get("labels").(map[string]interface{})) + if err != nil { + return diag.FromErr(err) + } + labels = containerInfraV1GetLabelsMerged(nodeGroup.LabelsAdded, nodeGroup.LabelsSkipped, nodeGroup.LabelsOverridden, nodeGroup.Labels, resourceDataLabels) } if err := d.Set("labels", labels); err != nil { return diag.Errorf("Unable to set openstack_containerinfra_nodegroup_v1 labels: %s", err)