Example #1
0
    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
Example #2
0
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()
Example #4
0
 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")