@@ -165,7 +165,15 @@ def detach_policy(self, role_name: str, policy_arn: str) -> EmptyResponseMetadat
165
165
Empty response metadata
166
166
"""
167
167
self .LOGGER .info ("Detaching policy from %s." , role_name )
168
- return self .IAM_CLIENT .detach_role_policy (RoleName = role_name , PolicyArn = policy_arn )
168
+ try :
169
+ response = self .IAM_CLIENT .detach_role_policy (RoleName = role_name , PolicyArn = policy_arn )
170
+ except ClientError as error :
171
+ if error .response ["Error" ]["Code" ] == "NoSuchEntity" :
172
+ self .LOGGER .info (f"Policy '{ policy_arn } ' is not attached to role '{ role_name } '." )
173
+ else :
174
+ self .LOGGER .error (f"Error detaching policy '{ policy_arn } ' from role '{ role_name } ': { error } " )
175
+ raise ValueError (f"Error detaching policy '{ policy_arn } ' from role '{ role_name } ': { error } " ) from None
176
+ return response
169
177
170
178
def delete_policy (self , policy_arn : str ) -> EmptyResponseMetadataTypeDef :
171
179
"""Delete IAM Policy.
@@ -184,10 +192,25 @@ def delete_policy(self, policy_arn: str) -> EmptyResponseMetadataTypeDef:
184
192
for version in page ["Versions" ]:
185
193
if not version ["IsDefaultVersion" ]:
186
194
self .LOGGER .info (f"Deleting policy version { version ['VersionId' ]} " )
187
- self .IAM_CLIENT .delete_policy_version (PolicyArn = policy_arn , VersionId = version ["VersionId" ])
188
- sleep (1 )
189
- self .LOGGER .info ("Policy version deleted." )
190
- return self .IAM_CLIENT .delete_policy (PolicyArn = policy_arn )
195
+ try :
196
+ self .IAM_CLIENT .delete_policy_version (PolicyArn = policy_arn , VersionId = version ["VersionId" ])
197
+ sleep (1 )
198
+ self .LOGGER .info ("Policy version deleted." )
199
+ except ClientError as error :
200
+ if error .response ["Error" ]["Code" ] == "NoSuchEntity" :
201
+ self .LOGGER .info (f"Policy version { version ['VersionId' ]} not found." )
202
+ else :
203
+ self .LOGGER .error (f"Error deleting policy version { version ['VersionId' ]} : { error } " )
204
+ raise ValueError (f"Error deleting policy version { version ['VersionId' ]} : { error } " ) from None
205
+ try :
206
+ response = self .IAM_CLIENT .delete_policy (PolicyArn = policy_arn )
207
+ except ClientError as error :
208
+ if error .response ["Error" ]["Code" ] == "NoSuchEntity" :
209
+ self .LOGGER .info (f"Policy { policy_arn } not found." )
210
+ else :
211
+ self .LOGGER .error (f"Error deleting policy { policy_arn } : { error } " )
212
+ raise ValueError (f"Error deleting policy { policy_arn } : { error } " ) from None
213
+ return response
191
214
192
215
def delete_role (self , role_name : str ) -> EmptyResponseMetadataTypeDef :
193
216
"""Delete IAM role.
0 commit comments