Skip to content

Commit

Permalink
Fix groupType and projectId idempotency (#30)
Browse files Browse the repository at this point in the history
- retrieve projectId from ProjectMemberEntity
- retrieve groupType from Usergroup associated to the user id got from
  ProjectMemberEntity

Add error details if get usergroup fails

Fix member ID should be entity ID
  • Loading branch information
clook authored Jul 17, 2020
1 parent 1d3fe16 commit 3fe87b5
Showing 1 changed file with 32 additions and 5 deletions.
37 changes: 32 additions & 5 deletions harbor/resource_project_member.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ func resourceProjectMemberCreate(d *schema.ResourceData, m interface{}) error {
)

if err != nil {
return fmt.Errorf("Project member creation failed")
return fmt.Errorf("project member creation failed")
}

listResp, err := apiClient.Products.GetProjectsProjectIDMembers(
Expand All @@ -109,7 +109,7 @@ func resourceProjectMemberCreate(d *schema.ResourceData, m interface{}) error {
)

if err != nil {
return fmt.Errorf("Project member loading failed")
return fmt.Errorf("project member loading failed")
}

var foundMember *models.ProjectMemberEntity
Expand All @@ -124,23 +124,40 @@ func resourceProjectMemberCreate(d *schema.ResourceData, m interface{}) error {
return fmt.Errorf("could not find member %s", groupName)
}

if err := resourceProjectMemberRefresh(d, foundMember); err != nil {
groupRef, err := apiClient.Products.GetUsergroupsGroupID(
products.NewGetUsergroupsGroupIDParams().
WithGroupID(foundMember.EntityID),
nil,
)

if err != nil {
return fmt.Errorf("could not find member %s reference, error %v", groupName, err)
}

if err := resourceProjectMemberRefresh(d, foundMember, groupRef.Payload.GroupType); err != nil {
return err
}

return nil
}

func resourceProjectMemberRefresh(d *schema.ResourceData, r *models.ProjectMemberEntity) error {
func resourceProjectMemberRefresh(d *schema.ResourceData, r *models.ProjectMemberEntity, groupType int64) error {
d.SetId(fmt.Sprintf("%d/%d", r.ProjectID, r.ID))

roleName := roleId2Name[r.RoleID]
if err := d.Set("role", roleName); err != nil {
return err
}
usergroupTypeName := groupTypeNum2Name[groupType]
if err := d.Set("group_type", usergroupTypeName); err != nil {
return err
}
if err := d.Set("group_name", r.EntityName); err != nil {
return err
}
if err := d.Set("project_id", r.ProjectID); err != nil {
return err
}

return nil
}
Expand Down Expand Up @@ -183,7 +200,17 @@ func resourceProjectMemberRead(d *schema.ResourceData, m interface{}) error {
return err
}

if err := resourceProjectMemberRefresh(d, resp.Payload); err != nil {
groupRef, err := apiClient.Products.GetUsergroupsGroupID(
products.NewGetUsergroupsGroupIDParams().
WithGroupID(resp.Payload.EntityID),
nil,
)

if err != nil {
return fmt.Errorf("could not find member reference for ID %d, error %v", memberID, err)
}

if err := resourceProjectMemberRefresh(d, resp.Payload, groupRef.Payload.GroupType); err != nil {
return err
}

Expand Down

0 comments on commit 3fe87b5

Please sign in to comment.