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
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)