in cli/aws_orbit/cleanup.py [0:0]
def _network_interface(vpc_id: str) -> None:
client = boto3_client("ec2")
ec2 = boto3_resource("ec2")
for i in client.describe_network_interfaces(Filters=[{"Name": "vpc-id", "Values": [vpc_id]}])["NetworkInterfaces"]:
try:
network_interface = ec2.NetworkInterface(i["NetworkInterfaceId"])
if "Interface for NAT Gateway" not in network_interface.description:
_logger.debug(f"Forgotten NetworkInterface: {i['NetworkInterfaceId']}.")
if network_interface.attachment is not None and network_interface.attachment["Status"] == "attached":
attempts: int = 0
while network_interface.attachment is None or network_interface.attachment["Status"] != "detached":
if attempts >= 10:
_logger.debug(
f"Ignoring NetworkInterface: {i['NetworkInterfaceId']} after 10 detach attempts."
)
break
_detach_network_interface(i["NetworkInterfaceId"], network_interface)
attempts += 1
time.sleep(3)
else:
network_interface.delete()
_logger.debug(f"NetWorkInterface {i['NetworkInterfaceId']} deleted.")
except botocore.exceptions.ClientError as ex:
error: Dict[str, Any] = ex.response["Error"]
if "is currently in use" in error["Message"]:
_logger.warning(f"Ignoring NetWorkInterface {i['NetworkInterfaceId']} because it stills in use.")
elif "does not exist" in error["Message"]:
_logger.warning(
f"Ignoring NetWorkInterface {i['NetworkInterfaceId']} because it does not exist anymore."
)
elif "You are not allowed to manage" in error["Message"]:
_logger.warning(
f"Ignoring NetWorkInterface {i['NetworkInterfaceId']} because you are not allowed to manage."
)
elif "You do not have permission to access the specified resource" in error["Message"]:
_logger.warning(
f"Ignoring NetWorkInterface {i['NetworkInterfaceId']} "
"because you do not have permission to access the specified resource."
)
else:
raise