Add member_ids to boundary_group resource (#21)

* feat: add members to groups

* docs: update boundary_group docs with member_ids
This commit is contained in:
Jeff Malnick authored and GitHub committed 2020-08-17 11:50:18 -07:00
1 parent c1069f7303
commit 564378a84e
4 files changed
+196 -3

No files matched your search

+60 -1
View File
@@ -12,6 +12,7 @@ const (
groupNameKey = "name"
groupDescriptionKey = "description"
groupScopeIDKey = "scope_id"
groupMemberIDsKey = "member_ids"
)
func resourceGroup() *schema.Resource {
@@ -35,6 +36,11 @@ func resourceGroup() *schema.Resource {
ForceNew: true,
Computed: true,
},
groupMemberIDsKey: {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Schema{Type: schema.TypeString},
},
},
}
}
@@ -53,12 +59,23 @@ func convertGroupToResourceData(g *groups.Group, d *schema.ResourceData) error {
}
}
if g.Scope.Id != "" {
// TODO when calling SetMembers() on a group the API returns
// a nil ScopeInfo so we are checking here to ensure
// we catch it. This work around can possibly ignore
// an updated scope ID when updating members and scope
// of a group simultaniously.
if g.Scope != nil && g.Scope.Id != "" {
if err := d.Set(groupScopeIDKey, g.Scope.Id); err != nil {
return err
}
}
if g.MemberIds != nil {
if err := d.Set(groupMemberIDsKey, g.MemberIds); err != nil {
return err
}
}
d.SetId(g.Id)
return nil
@@ -80,6 +97,13 @@ func convertResourceDataToGroup(d *schema.ResourceData, meta *metaData) *groups.
g.Scope.Id = scopeIDVal.(string)
}
if val, ok := d.GetOk(groupMemberIDsKey); ok {
memberIds := val.(*schema.Set).List()
for _, i := range memberIds {
g.MemberIds = append(g.MemberIds, i.(string))
}
}
if d.Id() != "" {
g.Id = d.Id()
}
@@ -95,6 +119,8 @@ func resourceGroupCreate(d *schema.ResourceData, meta interface{}) error {
g := convertResourceDataToGroup(d, md)
grps := groups.NewGroupsClient(client)
memIDs := g.MemberIds
g, apiErr, err := grps.Create(
ctx,
groups.WithScopeId(g.Scope.Id),
@@ -107,6 +133,21 @@ func resourceGroupCreate(d *schema.ResourceData, meta interface{}) error {
return fmt.Errorf("error creating group: %s", apiErr.Message)
}
if len(memIDs) > 0 {
g, apiErr, err = grps.SetMembers(
ctx,
g.Id,
g.Version,
memIDs,
groups.WithScopeId(g.Scope.Id))
if apiErr != nil {
return fmt.Errorf("error setting principals on role: %s\n", apiErr.Message)
}
if err != nil {
return fmt.Errorf("error setting principals on role: %s\n", err)
}
}
return convertGroupToResourceData(g, d)
}
@@ -162,6 +203,24 @@ func resourceGroupUpdate(d *schema.ResourceData, meta interface{}) error {
return fmt.Errorf("%+v\n", apiErr.Message)
}
if d.HasChange(groupMemberIDsKey) {
memberIds := []string{}
members := d.Get(groupMemberIDsKey).(*schema.Set).List()
for _, member := range members {
memberIds = append(memberIds, member.(string))
}
g, apiErr, err = grps.SetMembers(
ctx,
g.Id,
g.Version,
memberIds,
groups.WithScopeId(g.Scope.Id))
if apiErr != nil || err != nil {
return fmt.Errorf("error updating members on group:\n API Err: %+v\n Err: %+v\n", *apiErr, err)
}
}
return convertGroupToResourceData(g, d)
}