-
Notifications
You must be signed in to change notification settings - Fork 10
/
utils_group.go
93 lines (83 loc) · 2.58 KB
/
utils_group.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package athenz
import (
"fmt"
"github.com/AthenZ/athenz/clients/go/zms"
"github.com/AthenZ/terraform-provider-athenz/client"
)
func expandDeprecatedGroupMembers(configured []interface{}) []*zms.GroupMember {
groupMembers := make([]*zms.GroupMember, 0, len(configured))
for _, v := range configured {
val, ok := v.(string)
if ok && val != "" {
groupMember := zms.NewGroupMember()
groupMember.MemberName = zms.GroupMemberName(val)
groupMembers = append(groupMembers, groupMember)
}
}
return groupMembers
}
func flattenDeprecatedGroupMembers(list []*zms.GroupMember) []interface{} {
groupMember := make([]interface{}, 0, len(list))
for _, member := range list {
groupMember = append(groupMember, string(member.MemberName))
}
return groupMember
}
func expandGroupMembers(configured []interface{}) []*zms.GroupMember {
groupMembers := make([]*zms.GroupMember, 0, len(configured))
for _, v := range configured {
val, ok := v.(map[string]interface{})
if ok {
groupMember := zms.NewGroupMember()
groupMember.MemberName = zms.GroupMemberName(val["name"].(string))
groupMember.Expiration = stringToTimestamp(val["expiration"].(string))
groupMembers = append(groupMembers, groupMember)
}
}
return groupMembers
}
func flattenGroupMembers(list []*zms.GroupMember) []interface{} {
groupMembers := make([]interface{}, 0, len(list))
for _, m := range list {
name := string(m.MemberName)
expiration := timestampToString(m.Expiration)
member := map[string]interface{}{
"name": name,
"expiration": expiration,
}
groupMembers = append(groupMembers, member)
}
return groupMembers
}
func updateGroupMembers(dn string, gn string, remove []*zms.GroupMember, add []*zms.GroupMember, zmsClient client.ZmsClient, auditRef string) error {
// we don't want to delete a member that should be added right after
membersToNotDelete := stringSet{}
for _, member := range add {
membersToNotDelete.add(string(member.MemberName))
}
if len(remove) > 0 {
for _, member := range remove {
if !membersToNotDelete.contains(string(member.MemberName)) {
name := member.MemberName
err := zmsClient.DeleteGroupMembership(dn, gn, name, auditRef)
if err != nil {
return fmt.Errorf("Error removing membership: %s", err)
}
}
}
}
if len(add) > 0 {
for _, m := range add {
var member zms.GroupMembership
name := m.MemberName
member.MemberName = name
member.Expiration = m.Expiration
member.GroupName = zms.ResourceName(gn)
err := zmsClient.PutGroupMembership(dn, gn, name, auditRef, &member)
if err != nil {
return err
}
}
}
return nil
}