Skip to content

Commit 76b505f

Browse files
authored
Merge pull request #1102 from RafaySystems/RC-43860
RC-43860: Fix user identity diff
2 parents 690e13e + 3c657a3 commit 76b505f

File tree

1 file changed

+56
-13
lines changed

1 file changed

+56
-13
lines changed

rafay/resource_aks_cluster_v3.go

Lines changed: 56 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"log"
99
"net/http"
1010
"os"
11+
"sort"
1112
"strings"
1213
"time"
1314

@@ -920,18 +921,38 @@ func expandAKSManagedClusterV3Identity(p []interface{}) *infrapb.Identity {
920921
if len(p) == 0 || p[0] == nil {
921922
return obj
922923
}
924+
923925
in := p[0].(map[string]interface{})
924926

925-
if v, ok := in["type"].(string); ok && len(v) > 0 {
927+
if v, ok := in["type"].(string); ok && v != "" {
926928
obj.Type = v
927929
}
928-
if v, ok := in["user_assigned_identities"].(map[string]interface{}); ok {
929-
obj.UserAssignedIdentities = make(map[string]*structpb.Struct)
930-
for identity := range v {
931-
x, _ := structpb.NewStruct(map[string]interface{}{})
932-
obj.UserAssignedIdentities[identity] = x
930+
931+
raw, ok := in["user_assigned_identities"].(map[string]interface{})
932+
if !ok {
933+
return obj
934+
}
935+
936+
obj.UserAssignedIdentities = make(map[string]*structpb.Struct, len(raw))
937+
938+
for id, v := range raw {
939+
val := strings.TrimSpace(fmt.Sprintf("%v", v))
940+
941+
if val == "" || val == "{}" {
942+
obj.UserAssignedIdentities[id] = &structpb.Struct{}
943+
continue
944+
}
945+
946+
var m map[string]interface{}
947+
if err := json.Unmarshal([]byte(val), &m); err != nil || len(m) == 0 {
948+
obj.UserAssignedIdentities[id] = &structpb.Struct{}
949+
continue
933950
}
951+
952+
st, _ := structpb.NewStruct(m)
953+
obj.UserAssignedIdentities[id] = st
934954
}
955+
935956
return obj
936957
}
937958

@@ -2919,25 +2940,47 @@ func flattenAKSV3ManagedClusterIdentity(in *infrapb.Identity, p []interface{}) [
29192940
if in == nil {
29202941
return nil
29212942
}
2943+
29222944
obj := map[string]interface{}{}
29232945
if len(p) != 0 && p[0] != nil {
29242946
obj = p[0].(map[string]interface{})
29252947
}
29262948

2927-
if len(in.Type) > 0 {
2949+
if in.Type != "" {
29282950
obj["type"] = in.Type
29292951
}
29302952

2931-
if in.UserAssignedIdentities != nil && len(in.UserAssignedIdentities) > 0 {
2932-
identity := map[string]string{}
2933-
for k := range in.UserAssignedIdentities {
2934-
identity[k] = ""
2953+
if len(in.UserAssignedIdentities) == 0 {
2954+
return []interface{}{obj}
2955+
}
2956+
2957+
keys := make([]string, 0, len(in.UserAssignedIdentities))
2958+
for k := range in.UserAssignedIdentities {
2959+
keys = append(keys, k)
2960+
}
2961+
sort.Strings(keys)
2962+
2963+
out := make(map[string]string, len(keys))
2964+
2965+
for _, k := range keys {
2966+
st := in.UserAssignedIdentities[k]
2967+
2968+
if st == nil || len(st.Fields) == 0 {
2969+
out[k] = "{}"
2970+
continue
2971+
}
2972+
2973+
b, err := json.Marshal(st.AsMap())
2974+
if err != nil {
2975+
out[k] = "{}"
2976+
continue
29352977
}
2936-
obj["user_assigned_identities"] = identity
2978+
2979+
out[k] = string(b)
29372980
}
29382981

2982+
obj["user_assigned_identities"] = out
29392983
return []interface{}{obj}
2940-
29412984
}
29422985

29432986
func flattenAKSV3ManagedClusterProperties(in *infrapb.ManagedClusterProperties, p []interface{}) []interface{} {

0 commit comments

Comments
 (0)