@@ -165,7 +165,15 @@ def detach_policy(self, role_name: str, policy_arn: str) -> EmptyResponseMetadat
165165 Empty response metadata
166166 """
167167 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
169177
170178 def delete_policy (self , policy_arn : str ) -> EmptyResponseMetadataTypeDef :
171179 """Delete IAM Policy.
@@ -184,10 +192,25 @@ def delete_policy(self, policy_arn: str) -> EmptyResponseMetadataTypeDef:
184192 for version in page ["Versions" ]:
185193 if not version ["IsDefaultVersion" ]:
186194 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
191214
192215 def delete_role (self , role_name : str ) -> EmptyResponseMetadataTypeDef :
193216 """Delete IAM role.
0 commit comments