From ecaf622f556ceb4c84fccfabe124c31f88038de3 Mon Sep 17 00:00:00 2001 From: Vicente Pinto Date: Mon, 27 May 2024 09:18:10 +0100 Subject: [PATCH] Fix cluster network mapping (#375) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Make cluster network computed * Replace computed with better mapping * Fix comment * Update unit test§ --- stackit/internal/services/ske/cluster/resource.go | 11 +++++++++++ .../internal/services/ske/cluster/resource_test.go | 12 +++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/stackit/internal/services/ske/cluster/resource.go b/stackit/internal/services/ske/cluster/resource.go index 80797b85..95b57d6c 100644 --- a/stackit/internal/services/ske/cluster/resource.go +++ b/stackit/internal/services/ske/cluster/resource.go @@ -1486,6 +1486,17 @@ func mapNetwork(cl *ske.Cluster, m *Model) error { return nil } + // If the network field is not provided, the SKE API returns an empty object. + // If we parse that object into the terraform model, it will produce an inconsistent result after apply error + + emptyNetwork := &ske.V1Network{} + if *cl.Network == *emptyNetwork && m.Network.IsNull() { + if m.Network.Attributes() == nil { + m.Network = types.ObjectNull(networkTypes) + } + return nil + } + id := types.StringNull() if cl.Network.Id != nil { id = types.StringValue(*cl.Network.Id) diff --git a/stackit/internal/services/ske/cluster/resource_test.go b/stackit/internal/services/ske/cluster/resource_test.go index c33849fa..0ce83f86 100644 --- a/stackit/internal/services/ske/cluster/resource_test.go +++ b/stackit/internal/services/ske/cluster/resource_test.go @@ -231,7 +231,7 @@ func TestMapFields(t *testing.T) { true, }, { - "nil_network_id", + "empty_network", types.ObjectNull(extensionsTypes), &ske.Cluster{ Name: utils.Ptr("name"), @@ -245,12 +245,10 @@ func TestMapFields(t *testing.T) { AllowPrivilegedContainers: types.BoolNull(), NodePools: types.ListNull(types.ObjectType{AttrTypes: nodePoolTypes}), Maintenance: types.ObjectNull(maintenanceTypes), - Network: types.ObjectValueMust(networkTypes, map[string]attr.Value{ - "id": types.StringNull(), - }), - Hibernations: types.ListNull(types.ObjectType{AttrTypes: hibernationTypes}), - Extensions: types.ObjectNull(extensionsTypes), - KubeConfig: types.StringNull(), + Network: types.ObjectNull(networkTypes), + Hibernations: types.ListNull(types.ObjectType{AttrTypes: hibernationTypes}), + Extensions: types.ObjectNull(extensionsTypes), + KubeConfig: types.StringNull(), }, true, },