Skip to content

Commit

Permalink
handled the looping problem
Browse files Browse the repository at this point in the history
  • Loading branch information
shubhamsg199 committed Jul 19, 2022
1 parent 26d7ddb commit 5538692
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 60 deletions.
4 changes: 2 additions & 2 deletions cloudwash/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@


@contextmanager
def compute_client(compute_resource):
def compute_client(compute_resource, **kwargs):
"""The context manager for compute resource client to initiate and disconnect
:param str compute_resource: The compute resource name
Expand All @@ -33,7 +33,7 @@ def compute_client(compute_resource):
client = wrapanapi.EC2System(
username=settings.providers.ec2.username,
password=settings.providers.ec2.password,
region=settings.providers.ec2.region,
region=kwargs['Region'],
)
else:
raise ValueError(
Expand Down
122 changes: 64 additions & 58 deletions cloudwash/providers/ec2.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,67 +10,73 @@
def cleanup(**kwargs):

is_dry_run = kwargs["dry_run"]

with compute_client("ec2") as ec2_client:
# Dry Data Collection Defs
def dry_vms():
all_vms = ec2_client.list_vms()
for vm in all_vms:
if vm.name in settings.providers.ec2.except_vm_list:
dry_data["VMS"]["skip"].append(vm.name)
continue
elif total_running_time(vm).minutes >= settings.sla_minutes:
if vm.name in settings.providers.ec2.except_vm_stop_list:
dry_data["VMS"]["stop"].append(vm.name)
continue
elif vm.name.startswith(settings.delete_vm):
data = ['VMS', 'DISCS', 'PIPS', 'RESOURCES']
for region in settings.providers.ec2.region:
dry_data['VMS']['stop'] = []
for items in data:
dry_data[items]['delete'] = []
with compute_client("ec2", Region=region) as ec2_client:
# Dry Data Collection Defs
def dry_vms():
all_vms = ec2_client.list_vms()
for vm in all_vms:
if (
vm.name.startswith(settings.delete_vm)
and total_running_time(vm).minutes >= settings.sla_minutes
):
if vm.name in settings.providers.ec2.except_vm_stop_list:
dry_data["VMS"]["stop"].append(vm.name)
continue
dry_data["VMS"]["delete"].append(vm.name)
return dry_data["VMS"]
return dry_data["VMS"]

def dry_nics():
rnics = ec2_client.get_all_unused_network_interfaces()
[dry_data["NICS"]["delete"].append(dnic["NetworkInterfaceId"]) for dnic in rnics]
return dry_data["NICS"]["delete"]
def dry_nics():
rnics = ec2_client.get_all_unused_network_interfaces()
[dry_data["NICS"]["delete"].append(dnic["NetworkInterfaceId"]) for dnic in rnics]
return dry_data["NICS"]["delete"]

def dry_discs():
rdiscs = ec2_client.get_all_unattached_volumes()
[dry_data["DISCS"]["delete"].append(ddisc["VolumeId"]) for ddisc in rdiscs]
return dry_data["DISCS"]["delete"]
def dry_discs():
rdiscs = ec2_client.get_all_unattached_volumes()
[dry_data["DISCS"]["delete"].append(ddisc["VolumeId"]) for ddisc in rdiscs]
return dry_data["DISCS"]["delete"]

def dry_pips():
rpips = ec2_client.get_all_disassociated_addresses()
[dry_data["PIPS"]["delete"].append(dpip["AllocationId"]) for dpip in rpips]
return dry_data["PIPS"]["delete"]
def dry_pips():
rpips = ec2_client.get_all_disassociated_addresses()
[dry_data["PIPS"]["delete"].append(dpip["AllocationId"]) for dpip in rpips]
return dry_data["PIPS"]["delete"]

# Remove / Stop VMs
def remove_vms(avms):
# Remove VMs
[ec2_client.get_vm(vm_name).delete() for vm_name in avms["delete"]]
# Stop VMs
[ec2_client.get_vm(vm_name).stop() for vm_name in avms["stop"]]
# Remove / Stop VMs
def remove_vms(avms):
# Remove VMs
[ec2_client.get_vm(vm_name).delete() for vm_name in avms["delete"]]
# Stop VMs
[ec2_client.get_vm(vm_name).stop() for vm_name in avms["stop"]]

# Actual Cleaning and dry execution
if kwargs["vms"] or kwargs["_all"]:
avms = dry_vms()
if not is_dry_run:
remove_vms(avms=avms)
logger.info(f"Stopped VMs: \n{avms['stop']}")
logger.info(f"Removed VMs: \n{avms['delete']}")
logger.info(f"Skipped VMs: \n{avms['skip']}")
if kwargs["nics"] or kwargs["_all"]:
rnics = dry_nics()
if not is_dry_run:
ec2_client.remove_all_unused_nics()
logger.info(f"Removed NICs: \n{rnics}")
if kwargs["discs"] or kwargs["_all"]:
rdiscs = dry_discs()
if not is_dry_run:
ec2_client.remove_all_unused_volumes()
logger.info(f"Removed Discs: \n{rdiscs}")
if kwargs["pips"] or kwargs["_all"]:
rpips = dry_pips()
if not is_dry_run:
ec2_client.remove_all_unused_ips()
logger.info(f"Removed PIPs: \n{rpips}")
if is_dry_run:
echo_dry(dry_data)
# Actual Cleaning and dry execution
logger.info(f"\nResources from the region: {region}")
if kwargs["vms"] or kwargs["_all"]:
avms = dry_vms()
if not is_dry_run:
remove_vms(avms=avms)
logger.info(
f"Stopped {avms['stop']} and removed {avms['delete']} VMs from ec2 Cloud."
)
if kwargs["nics"] or kwargs["_all"]:
rnics = dry_nics()
if not is_dry_run:
ec2_client.remove_all_unused_nics()
logger.info(f"Removed following and all unused nics from ec2 Cloud. \n{rnics}")
if kwargs["discs"] or kwargs["_all"]:
rdiscs = dry_discs()
if not is_dry_run:
ec2_client.remove_all_unused_volumes()
logger.info(
f"Removed following and all unused discs from ec2 Cloud. \n{rdiscs}"
)
if kwargs["pips"] or kwargs["_all"]:
rpips = dry_pips()
if not is_dry_run:
ec2_client.remove_all_unused_ips()
logger.info(f"Removed following and all unused pips from ec2 Cloud. \n{rpips}")
if is_dry_run:
echo_dry(dry_data)

0 comments on commit 5538692

Please sign in to comment.