示例#1
0
    def run(self):
        """
        Launching Packer
        :return: put the result to the queue
        """
        ami_obj = AMI(self.region, self.aws_access_key_id, self.aws_secret_access_key)
        # target ami name
        if self.target_name:
            self.var_list.append('ami_name=%s' % self.target_name)

        # source ami get
        template_obj = Template(self.template)
        if not self.ami:
            self.ami = template_obj.get_source_ami_name()
        image_id = ami_obj.get_ami_id(self.ami) or ami_obj.get_amzn_ami_id(self.ami)
        if not image_id:
            self.queue.put((self.region, False, "Source image not found: %s" % self.ami, False))
            raise ValueError("Source image not found: %s" % self.ami)

        #setup VPC
        vpc = VPC(self.region, self.aws_access_key_id, self.aws_secret_access_key)
        vpc_id = vpc.create_vpc('10.0.0.0/16')
        subnet_id = vpc.create_public_subnet('10.0.1.0/24')


        # do packer stuff
        retry_cnt = 0
        result = False
        while not result and retry_cnt < (OmeletConfigParser()).get_packer_retry_cnt():
            output = self.launch(self.template, self._get_packer_vars(image_id, vpc_id, subnet_id))
            (result, message) = self.check_result(self.region, output)
            retry_cnt += 1
            if not self._retry(message):
                break
            else:
                print "Retry due to: %s" % message

        # tag target ami
        if result:
            for tag in self._get_ami_tags(image_id, template_obj):
                ami_obj.tag_ami(tag, message)

        # clean up VPC
        vpc.delete_vpc()

        # validate
        valid = True if ami_obj.get_ami_id(self.target_name) else False

        # push result
        self.queue.put((self.region, result, message, valid))
def get_ami_id_by_image(logger, region, base_image_name):
    db = _get_db_accessor()
    
    logger.info("get image latest ver")
    latest_ver = db.get_version(base_image_name)
    
    image_name = "%s-%s" % (base_image_name, latest_ver)
    logger.debug("determine latest image name : %s" % image_name)

    #query EC2 to get ami-id
    logger.info("query to EC2 to get ami-id for %s" % image_name)
    aws_key = Credential()
    ami = AMI(region, aws_key.aws_access_key_id, aws_key.aws_secret_access_key)
    ami_id = ami.get_ami_id(image_name)
    
    logger.info("got ami-id : %s" % ami_id)
    if not ami_id:
        logger.error("couldn't get ami-id, please check DynamoDB table, give up :-(")
        raise

    return ami_id
示例#3
0
 def _clean_previous_ami(self, name):
     ami = AMI(self.region, self.aws_key.get_aws_access_key(), self.aws_key.get_aws_secret_key())
     image_id = ami.get_ami_id(name)
     if image_id:
         ami.deregister_ami(image_id)