def test_simple(self):
     import datetime
     from amitools.tools.ami_describe_ancestors import (
         get_args,
         main,
         CHAIN_SUCCESS,
         CHAIN_NO_AMI,
         )
     from amitools.util import (
         calc_tags,
         tag_image,
         )
     # Start by creating test AMIs
     from amitools.util import random_name
     from amitools.watch import EC2ImageWatcher
     self.log('Creating test AMIs')
     now = datetime.datetime.utcnow()
     # child AMI
     child_image_id = self.conn.create_image(self.instance.id, random_name(), no_reboot=True)
     self.log('Test child AMI id will be {} - setting up tags'.format(child_image_id))
     child_tags = calc_tags(
         self.instance.image_id,
         self.instance.id,
         'us-east-1',
         now - datetime.timedelta(seconds=5),
         )
     child_watcher = EC2ImageWatcher(child_image_id, self.conn)
     child_watcher.waiton_exists()
     tag_image(self.conn, child_image_id, child_tags)
     self.log('Waiting for child AMI {} to be available'.format(child_image_id))
     child_watcher.waiton('available')
     # grandchild AMI
     grandchild_image_id = self.conn.create_image(self.instance.id, random_name(), no_reboot=True)
     self.log('Grandchild AMI ID will be {} - setting up tags'.format(grandchild_image_id))
     grandchild_tags = calc_tags(
         child_image_id,
         'i-12345678',
         'us-east-1',
         now,
         )
     grandchild_watcher = EC2ImageWatcher(grandchild_image_id, self.conn)
     grandchild_watcher.waiton_exists()
     tag_image(self.conn, grandchild_image_id, grandchild_tags)
     self.log('Waiting for grandchild AMI {} to be available'.format(grandchild_image_id))
     grandchild_watcher.waiton('available')
     child_image = self.get_image(child_image_id)
     grandchild_image = self.get_image(grandchild_image_id)
     # now ready to run tests
     self.log('Test AMIs available, proceeding with test')
     args = get_args([
             grandchild_image_id,
             ])
     result = main(args)
     self.assertEqual(CHAIN_SUCCESS, result['exit_code'])
     expected_chain = [
         grandchild_image_id,
         child_image_id,
         self.instance.image_id,
         ]
     self.assertSequenceEqual(expected_chain, result['chain'])
Example #2
0
    def test_simple(self):
        # Start by creating our own AMI, which we'll do by imaging the dev instance
        from amitools.util import random_name
        from amitools.watch import EC2ImageWatcher
        self.log('Creating test AMI')
        image_id = self.conn.create_image(self.instance.id, random_name(), no_reboot=True)
        self.log('Test AMI id will be %s - waiting until it is available' % image_id)
        EC2ImageWatcher(image_id, self.conn).waiton('available')
        image = self.conn.get_all_images([image_id])[0]
        self.log('Test AMI %s available, proceeding with test ' % image_id)
        # now we have our own unique image with no tags
        self.assertEqual(0, len(image.tags), str(image.tags))
        from amitools.tools.ami_tag_image import (
            get_args,
            main,
            )
        args = get_args([
                '--source-image',
                'ami-12341234',
                '--source-instance',
                'i-12341234',
                '--source-region',
                'us-east-1',
                '--create-timestamp',
                '1369723137',
                image_id,
                ])
        result = main(args)

        # check result
        new_image = self.conn.get_all_images([image_id])[0]
        self.assertEqual('ami-12341234', new_image.tags['source_image'])
        self.assertEqual('i-12341234', new_image.tags['source_instance'])
        self.assertEqual('1369723137', new_image.tags['create_timestamp'])
        self.assertEqual('us-east-1', new_image.tags['source_region'])
Example #3
0
    def test_simple(self):
        # Start by creating our own AMI, which we'll do by imaging the dev instance
        from amitools.util import random_name
        from amitools.watch import EC2ImageWatcher
        self.log('Creating test AMI')
        image_id = self.conn.create_image(self.instance.id, random_name(), no_reboot=True)
        self.log('Test AMI id will be %s - waiting until it is available' % image_id)
        EC2ImageWatcher(image_id, self.conn).waiton('available')
        image = self.conn.get_all_images([image_id])[0]
        self.log('Test AMI %s available, proceeding with test ' % image_id)
        # now we have our own unique image with no tags
        self.assertEqual(0, len(image.tags), str(image.tags))
        from amitools.tools.ami_tag_image import (
            get_args,
            main,
            )
        args = get_args([
                '--source-image',
                'ami-12341234',
                '--source-instance',
                'i-12341234',
                '--create-timestamp',
                '1369723137',
                image_id,
                ])
        result = main(args)

        # check result
        new_image = self.conn.get_all_images([image_id])[0]
        self.assertEqual('ami-12341234', new_image.tags['source_image'])
        self.assertEqual('i-12341234', new_image.tags['source_instance'])
        self.assertEqual('1369723137', new_image.tags['create_timestamp'])
            
    def test_simple(self):
        import datetime
        from amitools.tools.ami_describe_ancestors import get_args, main, CHAIN_SUCCESS, CHAIN_NO_AMI
        from amitools.util import calc_tags, tag_image

        # Start by creating test AMIs
        from amitools.util import random_name
        from amitools.watch import EC2ImageWatcher

        self.log("Creating test AMIs")
        now = datetime.datetime.utcnow()
        # child AMI
        child_image_id = self.conn.create_image(self.instance.id, random_name(), no_reboot=True)
        self.log("Test child AMI id will be {} - setting up tags".format(child_image_id))
        child_tags = calc_tags(self.instance.image_id, self.instance.id, now - datetime.timedelta(seconds=5))
        child_watcher = EC2ImageWatcher(child_image_id, self.conn)
        child_watcher.waiton_exists()
        tag_image(self.conn, child_image_id, child_tags)
        self.log("Waiting for child AMI {} to be available".format(child_image_id))
        child_watcher.waiton("available")
        # grandchild AMI
        grandchild_image_id = self.conn.create_image(self.instance.id, random_name(), no_reboot=True)
        self.log("Grandchild AMI ID will be {} - setting up tags".format(grandchild_image_id))
        grandchild_tags = calc_tags(child_image_id, "i-12345678", now)
        grandchild_watcher = EC2ImageWatcher(grandchild_image_id, self.conn)
        grandchild_watcher.waiton_exists()
        tag_image(self.conn, grandchild_image_id, grandchild_tags)
        self.log("Waiting for grandchild AMI {} to be available".format(grandchild_image_id))
        grandchild_watcher.waiton("available")
        child_image = self.get_image(child_image_id)
        grandchild_image = self.get_image(grandchild_image_id)
        # now ready to run tests
        self.log("Test AMIs available, proceeding with test")
        args = get_args([grandchild_image_id])
        result = main(args)
        self.assertEqual(CHAIN_SUCCESS, result["exit_code"])
        expected_chain = [grandchild_image_id, child_image_id, self.instance.image_id]
        self.assertSequenceEqual(expected_chain, result["chain"])
Example #5
0
def main(args):
    import datetime
    import time
    from amitools.watch import EC2ImageWatcher
    from amitools.util import (
        get_instance,
        random_name,
        )
    from amitools import ec2connect
    from amitools.util import (
        calc_tags,
        tag_image,
        )
    
    if args.name is None:
        args.name = random_name(args.random_name_prefix)
        
    conn = ec2connect(args.region)
    
    image_id = conn.create_image(
        args.instance_id,
        args.name,
        description=args.description,
        no_reboot = args.no_reboot,
        )
    image_watcher = EC2ImageWatcher(image_id, conn)
    image_watcher.waiton_exists()
    # AMI image creation started. While that's cooking, set up tags
    image = image_watcher.resource
    source_instance = get_instance(conn, args.instance_id)
    source_region = source_instance.region.name
    tags = calc_tags(
        source_instance.image_id,
        args.instance_id,
        source_region,
        datetime.datetime.utcnow(),
        )        
    tag_image(
        conn,
        image.id,
        tags,
        )
    return {
        'image_id' : image_id,
        }
Example #6
0
def main(args):
    import datetime
    import time
    from amitools.watch import EC2ImageWatcher
    from amitools.util import (
        get_instance,
        random_name,
    )
    from amitools import ec2connect
    from amitools.util import (
        calc_tags,
        tag_image,
    )

    if args.name is None:
        args.name = random_name(args.random_name_prefix)

    conn = ec2connect(args.region)

    image_id = conn.create_image(
        args.instance_id,
        args.name,
        description=args.description,
        no_reboot=args.no_reboot,
    )
    image_watcher = EC2ImageWatcher(image_id, conn)
    image_watcher.waiton_exists()
    # AMI image creation started. While that's cooking, set up tags
    image = image_watcher.resource
    source_instance = get_instance(conn, args.instance_id)
    source_region = source_instance.region.name
    tags = calc_tags(
        source_instance.image_id,
        args.instance_id,
        source_region,
        datetime.datetime.utcnow(),
    )
    tag_image(
        conn,
        image.id,
        tags,
    )
    return {
        'image_id': image_id,
    }
Example #7
0
 def test_simple(self):
     import datetime
     from amitools.tools.ami_describe_ancestors import (
         get_args,
         main,
         CHAIN_SUCCESS,
         CHAIN_NO_AMI,
     )
     from amitools.util import (
         calc_tags,
         tag_image,
     )
     # Start by creating test AMIs
     from amitools.util import random_name
     from amitools.watch import EC2ImageWatcher
     self.log('Creating test AMIs')
     now = datetime.datetime.utcnow()
     # child AMI
     child_image_id = self.conn.create_image(self.instance.id,
                                             random_name(),
                                             no_reboot=True)
     self.log('Test child AMI id will be {} - setting up tags'.format(
         child_image_id))
     child_tags = calc_tags(
         self.instance.image_id,
         self.instance.id,
         now - datetime.timedelta(seconds=5),
     )
     child_watcher = EC2ImageWatcher(child_image_id, self.conn)
     child_watcher.waiton_exists()
     tag_image(self.conn, child_image_id, child_tags)
     self.log(
         'Waiting for child AMI {} to be available'.format(child_image_id))
     child_watcher.waiton('available')
     # grandchild AMI
     grandchild_image_id = self.conn.create_image(self.instance.id,
                                                  random_name(),
                                                  no_reboot=True)
     self.log('Grandchild AMI ID will be {} - setting up tags'.format(
         grandchild_image_id))
     grandchild_tags = calc_tags(
         child_image_id,
         'i-12345678',
         now,
     )
     grandchild_watcher = EC2ImageWatcher(grandchild_image_id, self.conn)
     grandchild_watcher.waiton_exists()
     tag_image(self.conn, grandchild_image_id, grandchild_tags)
     self.log('Waiting for grandchild AMI {} to be available'.format(
         grandchild_image_id))
     grandchild_watcher.waiton('available')
     child_image = self.get_image(child_image_id)
     grandchild_image = self.get_image(grandchild_image_id)
     # now ready to run tests
     self.log('Test AMIs available, proceeding with test')
     args = get_args([
         grandchild_image_id,
     ])
     result = main(args)
     self.assertEqual(CHAIN_SUCCESS, result['exit_code'])
     expected_chain = [
         grandchild_image_id,
         child_image_id,
         self.instance.image_id,
     ]
     self.assertSequenceEqual(expected_chain, result['chain'])