Ejemplo n.º 1
0
 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
Ejemplo n.º 2
0
 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
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
    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
Ejemplo n.º 6
0
    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
Ejemplo n.º 7
0
    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()