def test_run(self): # build ami AAA via ami_packer result_queue = Queue.Queue() config = ConfigParser.SafeConfigParser() config.read(os.path.join(os.getcwd(), 'config', 'config.ini')) try: packer_path = config.get('Packer_Config', 'path') packer_bin = os.path.join(packer_path, 'packer') except: packer_bin = 'packer' timestamp = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d') amipacker = AMIPacker(os.path.join(os.getcwd(), 'tests', 'template', 'test_template.json'), 'ubuntu/images/ebs/ubuntu-trusty-14.04-amd64-server-20140416.1', '123456', timestamp, self.region, result_queue, self.aws_key.get_aws_access_key(), self.aws_key.get_aws_secret_key(), packer_bin) self._clean_previous_ami('test_omelet_ami') amipacker.run() if not result_queue.empty(): (region, result, message, existence) = result_queue.get() print message self.ami = message # launching instance B for check ami = AMI(self.region, self.aws_key.get_aws_access_key(), self.aws_key.get_aws_secret_key()) assert ami.check_image(message, 'available') self.instance_id = self.helper.launch_instance(message, self.name, self.name) # check modules are in instance B std_out = self.helper.run_command(self.instance_id, 'dpkg -l | grep newrelic', self.name, 'ubuntu') print std_out assert 'newrelic-sysmond' in std_out
class AMIPackerTest(unittest.TestCase): def setUp(self): queue = Queue.Queue() self.packer = AMIPacker(os.path.join(os.getcwd(), "tests", "template", "test_template.json"), "ami", "sha1", "2014-06-30", "eu-west-1", queue, "12345", "67890", "packer", "TEST") def test_check_result(self): # check Chef error self.assertEqual((False, "Error executing Chef: Non-zero exit status: 1"), self.packer.check_result("eu-west-1", chef_error)) # check normal situation self.assertEqual((True, "ami-8b8c44fc"), self.packer.check_result("eu-west-1", no_error)) # check source AMI not found error (result, message) = self.packer.check_result("eu-west-1", ami_error) self.assertTrue("could not be found." in message) def test_retry(self): self.assertTrue(self.packer._retry("sg-12345 does not exist in VPC")) self.assertTrue(self.packer._retry("Timeout waiting for SSH..."))
def _run_amipacker(self, template, src_ami, ami, sha1, timestamp=None, var_list=None): """ Run AMIPacker in each region :param template: target template :param src_ami: source AMI name :param ami: ami name :param sha1: github commit sha1 :param var_list: custom var list :return: None """ result_queue = Queue.Queue() thread_pool = list() regions = self._configs.get_packer_regions() timestamp = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d') if not timestamp else timestamp packer = os.path.join(self._configs.get_packer_path(), 'packer') # fork thread for region in regions: thread = AMIPacker(template, src_ami, sha1, timestamp, region, result_queue, self._aws_key.get_aws_access_key(), self._aws_key.get_aws_secret_key(), packer, ami, var_list) thread.start() thread_pool.append(thread) # result preparation output = prettytable.PrettyTable(['Region', 'Success', 'Message', 'Existence']) for thread in thread_pool: thread.join() if not result_queue.empty(): (region, success, message, existence) = result_queue.get() output.add_row(list((region, success, message, existence))) if not existence: self._validate_existence = False # print table # output = output.get_html_string() return output.get_string()
def setUp(self): queue = Queue.Queue() self.packer = AMIPacker(os.path.join(os.getcwd(), "tests", "template", "test_template.json"), "ami", "sha1", "2014-06-30", "eu-west-1", queue, "12345", "67890", "packer", "TEST")