Skip to content

Commit 3fe87b5

Browse files
authored
Fix groupType and projectId idempotency (#30)
- 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
1 parent 1d3fe16 commit 3fe87b5

File tree

1 file changed

+32
-5
lines changed

1 file changed

+32
-5
lines changed

harbor/resource_project_member.go

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ func resourceProjectMemberCreate(d *schema.ResourceData, m interface{}) error {
9999
)
100100

101101
if err != nil {
102-
return fmt.Errorf("Project member creation failed")
102+
return fmt.Errorf("project member creation failed")
103103
}
104104

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

111111
if err != nil {
112-
return fmt.Errorf("Project member loading failed")
112+
return fmt.Errorf("project member loading failed")
113113
}
114114

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

127-
if err := resourceProjectMemberRefresh(d, foundMember); err != nil {
127+
groupRef, err := apiClient.Products.GetUsergroupsGroupID(
128+
products.NewGetUsergroupsGroupIDParams().
129+
WithGroupID(foundMember.EntityID),
130+
nil,
131+
)
132+
133+
if err != nil {
134+
return fmt.Errorf("could not find member %s reference, error %v", groupName, err)
135+
}
136+
137+
if err := resourceProjectMemberRefresh(d, foundMember, groupRef.Payload.GroupType); err != nil {
128138
return err
129139
}
130140

131141
return nil
132142
}
133143

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

137147
roleName := roleId2Name[r.RoleID]
138148
if err := d.Set("role", roleName); err != nil {
139149
return err
140150
}
151+
usergroupTypeName := groupTypeNum2Name[groupType]
152+
if err := d.Set("group_type", usergroupTypeName); err != nil {
153+
return err
154+
}
141155
if err := d.Set("group_name", r.EntityName); err != nil {
142156
return err
143157
}
158+
if err := d.Set("project_id", r.ProjectID); err != nil {
159+
return err
160+
}
144161

145162
return nil
146163
}
@@ -183,7 +200,17 @@ func resourceProjectMemberRead(d *schema.ResourceData, m interface{}) error {
183200
return err
184201
}
185202

186-
if err := resourceProjectMemberRefresh(d, resp.Payload); err != nil {
203+
groupRef, err := apiClient.Products.GetUsergroupsGroupID(
204+
products.NewGetUsergroupsGroupIDParams().
205+
WithGroupID(resp.Payload.EntityID),
206+
nil,
207+
)
208+
209+
if err != nil {
210+
return fmt.Errorf("could not find member reference for ID %d, error %v", memberID, err)
211+
}
212+
213+
if err := resourceProjectMemberRefresh(d, resp.Payload, groupRef.Payload.GroupType); err != nil {
187214
return err
188215
}
189216

0 commit comments

Comments
 (0)