Skip to content

Commit

Permalink
provider/aws: Query all pages of group membership
Browse files Browse the repository at this point in the history
By default, group membership queries return pages of 100 users at a
time. Because of this, if there are more than 100 users in an
aws_iam_group_membership resource, the resource always reports as
needing to be changed (because it only sees 100 of the users as
existing in the group).

The group membership now queries all pages.

Fixes #6722
  • Loading branch information
miquella committed May 17, 2016
1 parent d3b0a30 commit 0315d51
Showing 1 changed file with 26 additions and 16 deletions.
42 changes: 26 additions & 16 deletions builtin/providers/aws/resource_aws_iam_group_membership.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,25 +56,35 @@ func resourceAwsIamGroupMembershipCreate(d *schema.ResourceData, meta interface{
func resourceAwsIamGroupMembershipRead(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).iamconn
group := d.Get("group").(string)
resp, err := conn.GetGroup(&iam.GetGroupInput{
GroupName: aws.String(group),
})

if err != nil {
if awsErr, ok := err.(awserr.Error); ok {
// aws specific error
if awsErr.Code() == "NoSuchEntity" {
// group not found
d.SetId("")
return nil

var ul []string
var marker *string
for {
resp, err := conn.GetGroup(&iam.GetGroupInput{
GroupName: aws.String(group),
Marker: marker,
})

if err != nil {
if awsErr, ok := err.(awserr.Error); ok {
// aws specific error
if awsErr.Code() == "NoSuchEntity" {
// group not found
d.SetId("")
return nil
}
}
return err
}
return err
}

ul := make([]string, 0, len(resp.Users))
for _, u := range resp.Users {
ul = append(ul, *u.UserName)
for _, u := range resp.Users {
ul = append(ul, *u.UserName)
}

if !*resp.IsTruncated {
break
}
marker = resp.Marker
}

if err := d.Set("users", ul); err != nil {
Expand Down

0 comments on commit 0315d51

Please sign in to comment.