def ip_addresses(self): debug("In asgroup.py ip_addresses") instances = self.conn.describe_auto_scaling_groups( AutoScalingGroupNames = [self.name()] )['AutoScalingGroups'][0]['Instances'] ids = [i['InstanceId'] for i in instances] ec2_conn = util.ec2_conn() ec2_instances = ec2_conn.describe_instances( InstanceIds = ids )['Reservations'] ips = [ instance['Instances'][0]['PublicIpAddress'] for instance in ec2_instances ] return ips
def get_subnet_ids_by_cidrs(self, cidrs): debug("In asgroup.y get_subnet_ids_by_cidrs") ret = [] _ec2 = util.ec2_conn() subnets = _ec2.describe_subnets()['Subnets'] for cidr in cidrs: for subnet in subnets: if subnet['CidrBlock'] == cidr: ret.append(subnet['SubnetId']) return ret
def ip_addresses(self): debug("In asgroup.py ip_addresses") instances = self.conn.describe_auto_scaling_groups( AutoScalingGroupNames=[self.name() ])['AutoScalingGroups'][0]['Instances'] ids = [i['InstanceId'] for i in instances] ec2_conn = util.ec2_conn() ec2_instances = ec2_conn.describe_instances( InstanceIds=ids)['Reservations'] ips = [ instance['Instances'][0]['PublicIpAddress'] for instance in ec2_instances ] return ips
def deactivate(self): # a.k.a asg destroy # NOTE # deleting asg logic should be in its own function # * delete ASG by reducing capacities of asg to 0 # * delete launchconfig # # reducing ASG capacities to 0 triggers eventual instance # termination debug("In asgroup.py deactivate") asg_name = self.name() ag = util.as_conn() ec2 = util.ec2_conn() asg_info = ag.describe_auto_scaling_groups( AutoScalingGroupNames = [ asg_name ] ) if not asg_info['AutoScalingGroups']: print("ASG does not exist. Maybe it was already deleted?") else: # delete the ASG num_instances = len(asg_info['AutoScalingGroups'][0]['Instances']) if self.get_num_instances() == 0: pprint("There are no instances in asg: " + asg_name) print("Deleting asg: " + asg_name) response = ag.delete_auto_scaling_group( AutoScalingGroupName=asg_name ) util.message_integrations("Deleted ASgroup {}".format(asg_name)) else: debug("There are " + str(num_instances) + " instances that need to be removed from asg: " + asg_name) debug("terminating instances in asg: " + asg_name) debug("by setting to 0 MinSize, MaxSize, DesiredCapacity") response = ag.update_auto_scaling_group(AutoScalingGroupName = asg_name, MinSize=0, MaxSize=0, DesiredCapacity=0) debug("Waiting 30 seconds to give AWS time to terminate the instances") if self.get_num_instances() != 0: util.retry(lambda: ag.delete_auto_scaling_group(AutoScalingGroupName=asg_name), 300) if self.get_num_instances() != 0 or self.get_num_instances(): print("unable to delete instances in asg.") return False util.message_integrations("Deleted ASgroup {}".format(asg_name)) # if launch config exists, delete it lc = self.lc() if not lc.exists(): print("launchconfig does not exist. Maybe you deleted it already?") else: lc.deactivate() return True
def deactivate(self): # a.k.a asg destroy # NOTE # deleting asg logic should be in its own function # * delete ASG by reducing capacities of asg to 0 # * delete launchconfig # # reducing ASG capacities to 0 triggers eventual instance # termination debug("In asgroup.py deactivate") asg_name = self.name() ag = util.as_conn() ec2 = util.ec2_conn() asg_info = ag.describe_auto_scaling_groups( AutoScalingGroupNames=[asg_name]) if not asg_info['AutoScalingGroups']: print("ASG does not exist. Maybe it was already deleted?") else: # delete the ASG num_instances = len(asg_info['AutoScalingGroups'][0]['Instances']) if self.get_num_instances() == 0: pprint("There are no instances in asg: " + asg_name) print("Deleting asg: " + asg_name) response = ag.delete_auto_scaling_group( AutoScalingGroupName=asg_name) util.message_integrations( "Deleted ASgroup {}".format(asg_name)) else: debug("There are " + str(num_instances) + " instances that need to be removed from asg: " + asg_name) debug("terminating instances in asg: " + asg_name) debug("by setting to 0 MinSize, MaxSize, DesiredCapacity") response = ag.update_auto_scaling_group( AutoScalingGroupName=asg_name, MinSize=0, MaxSize=0, DesiredCapacity=0) debug( "Waiting 30 seconds to give AWS time to terminate the instances" ) if self.get_num_instances() != 0: util.retry( lambda: ag.delete_auto_scaling_group( AutoScalingGroupName=asg_name), 300) if self.get_num_instances() != 0 or self.get_num_instances(): print("unable to delete instances in asg.") return False util.message_integrations( "Deleted ASgroup {}".format(asg_name)) # if launch config exists, delete it lc = self.lc() if not lc.exists(): print( "launchconfig does not exist. Maybe you deleted it already?") else: lc.deactivate() return True
def deactivate(self): # a.k.a asg destroy # NOTE # deleting asg logic should be in its own function # * delete ASG by reducing capacities of asg to 0 # * delete launchconfig # # reducing ASG capacities to 0 triggers eventual instance # termination debug("In asgroup.py deactivate") asg_name = self.name() ag = util.as_conn() ec2 = util.ec2_conn() asg_info = ag.describe_auto_scaling_groups( AutoScalingGroupNames = [ asg_name ] ) if not asg_info['AutoScalingGroups']: print("ASG does not exist. Maybe it was already deleted? ") else: # delete the ASG num_instances = len(asg_info['AutoScalingGroups'][0]['Instances']) if self.get_num_instances() == 0: pprint("There are no instances in asg: " + asg_name) pprint("Deleting asg: " + asg_name) response = ag.delete_auto_scaling_group( AutoScalingGroupName=asg_name ) util.message_integrations("Deleted ASgroup {}".format(asg_name)) else: debug("There are " + str(num_instances) + " instances that need to be removed from asg: " + asg_name) debug("terminating instances in asg: " + asg_name) debug("by setting to 0 MinSize, MaxSize, DesiredCapacity") response = ag.update_auto_scaling_group(AutoScalingGroupName = asg_name, MinSize=0, MaxSize=0, DesiredCapacity=0) debug("Waiting 30 seconds to give AWS time to terminate the instances") try: sleep(30) except KeyboardInterrupt: pprint("Got impatient.") sys.exit(1) interval = 10 tries = 20 for x in range(0,tries): try: if self.get_num_instances() != 0: raise ValueError("there are still instances in the ASG") break else: # if num instances in asg is 0, # we are clear to delete break except KeyboardInterrupt: pprint("Got impatient") sys.exit(1) except ValueError as e: pprint(e) pass try: if e: pprint("pausing " + str(interval) + " seconds") sleep(interval) else: break except KeyboardInterrupt: pprint("Got impatient") if self.get_num_instances() == 0 or not self.get_num_instances(): pprint("instances in asg deleted.") response = ag.delete_auto_scaling_group( AutoScalingGroupName=asg_name ) util.message_integrations("Deleted ASgroup {}".format(asg_name)) else: pprint("unable to delete instances in asg.") # if launch config exists, delete it lc = self.lc() if not lc.exists(): print("launchconfig does not exist. Maybe you deleted it already?") else: lc.deactivate()