@@ -54,8 +54,7 @@ func resourceGoogleProjectIamCustomRole() *schema.Resource {
54
54
},
55
55
"deleted" : {
56
56
Type : schema .TypeBool ,
57
- Optional : true ,
58
- Default : false ,
57
+ Computed : true ,
59
58
},
60
59
},
61
60
}
@@ -69,10 +68,6 @@ func resourceGoogleProjectIamCustomRoleCreate(d *schema.ResourceData, meta inter
69
68
return err
70
69
}
71
70
72
- if d .Get ("deleted" ).(bool ) {
73
- return fmt .Errorf ("Cannot create a custom project role with a deleted state. `deleted` field should be false." )
74
- }
75
-
76
71
roleId := fmt .Sprintf ("projects/%s/roles/%s" , project , d .Get ("role_id" ).(string ))
77
72
r , err := config .clientIAM .Projects .Roles .Get (roleId ).Do ()
78
73
if err == nil {
@@ -140,50 +135,20 @@ func resourceGoogleProjectIamCustomRoleUpdate(d *schema.ResourceData, meta inter
140
135
141
136
d .Partial (true )
142
137
143
- if d .Get ("deleted" ).(bool ) {
144
- if d .HasChange ("deleted" ) {
145
- // If other fields were changed, we need to update those first and then delete.
146
- // If we don't update, we will get diffs from re-apply
147
- // If we delete and then try to update, we will get an error.
148
- if err := resourceGoogleProjectIamCustomRoleUpdateNonDeletedFields (d , meta ); err != nil {
149
- return err
150
- }
151
- if err := resourceGoogleProjectIamCustomRoleDelete (d , meta ); err != nil {
152
- return err
153
- }
154
-
155
- d .SetPartial ("deleted" )
156
- d .Partial (false )
157
- return nil
158
- } else {
159
- return fmt .Errorf ("cannot make changes to deleted custom project role %s" , d .Id ())
160
- }
161
- }
162
-
163
138
// We want to update the role to some undeleted state.
164
139
// Make sure the role with given ID exists and is un-deleted before patching.
165
140
r , err := config .clientIAM .Projects .Roles .Get (d .Id ()).Do ()
166
141
if err != nil {
167
142
return fmt .Errorf ("unable to find custom project role %s to update: %v" , d .Id (), err )
168
143
}
169
144
if r .Deleted {
170
- // Undelete if deleted previously
171
- if err := resourceGoogleProjectIamCustomRoleUndelete ( d , meta ); err != nil {
172
- return err
145
+ _ , err := config . clientIAM . Projects . Roles . Undelete ( d . Id (), & iam. UndeleteRoleRequest {}). Do ()
146
+ if err != nil {
147
+ return fmt . Errorf ( "Error undeleting the custom project role %s: %s" , d . Get ( "title" ).( string ), err )
173
148
}
174
- d .SetPartial ("deleted" )
175
- }
176
149
177
- if err := resourceGoogleProjectIamCustomRoleUpdateNonDeletedFields (d , meta ); err != nil {
178
- return err
150
+ d .SetPartial ("deleted" )
179
151
}
180
- d .Partial (false )
181
-
182
- return nil
183
- }
184
-
185
- func resourceGoogleProjectIamCustomRoleUpdateNonDeletedFields (d * schema.ResourceData , meta interface {}) error {
186
- config := meta .(* Config )
187
152
188
153
if d .HasChange ("title" ) || d .HasChange ("description" ) || d .HasChange ("stage" ) || d .HasChange ("permissions" ) {
189
154
_ , err := config .clientIAM .Projects .Roles .Patch (d .Id (), & iam.Role {
@@ -201,6 +166,8 @@ func resourceGoogleProjectIamCustomRoleUpdateNonDeletedFields(d *schema.Resource
201
166
d .SetPartial ("stage" )
202
167
d .SetPartial ("permissions" )
203
168
}
169
+
170
+ d .Partial (false )
204
171
return nil
205
172
}
206
173
@@ -214,14 +181,3 @@ func resourceGoogleProjectIamCustomRoleDelete(d *schema.ResourceData, meta inter
214
181
215
182
return nil
216
183
}
217
-
218
- func resourceGoogleProjectIamCustomRoleUndelete (d * schema.ResourceData , meta interface {}) error {
219
- config := meta .(* Config )
220
-
221
- _ , err := config .clientIAM .Projects .Roles .Undelete (d .Id (), & iam.UndeleteRoleRequest {}).Do ()
222
- if err != nil {
223
- return fmt .Errorf ("Error undeleting the custom project role %s: %s" , d .Get ("title" ).(string ), err )
224
- }
225
-
226
- return nil
227
- }
0 commit comments