Esempio n. 1
0
class ResourceGeneration(EutesterTestCase):
    
    def __init__(self, credpath):
        self.tester = Eucaops(credpath=credpath)


    def CreateResources(self):
        users = self.tester.get_all_users() 
        testers = []
        for user in users:
            keys = self.tester.create_access_key(user_name=user['user_name'], delegate_account=user['account_name'])
            testers.append(Eucaops(aws_access_key_id=keys['access_key_id'], aws_secret_access_key=keys['secret_access_key'], ec2_ip=self.tester.ec2.host, s3_ip=self.tester.s3.host))
            
        for tester in testers:
            import random
            zone = random.choice(tester.get_zones())
            volume = self.tester.create_volume(size=1, azone=zone)
            snapshot = self.tester.create_snapshot(volume_id=volume.id)
            volume_from_snap = self.tester.create_volume(snapshot=snapshot, azone=zone)
            bucket = self.tester.create_bucket(self.tester.id_generator(12, string.ascii_lowercase  + string.digits))
            key = self.tester.upload_object(bucket_name= bucket.name, key_name= self.tester.id_generator(12, string.ascii_lowercase  + string.digits), contents= self.tester.id_generator(200))
            keypair = self.tester.add_keypair(self.tester.id_generator())
            group = self.tester.add_group(self.tester.id_generator())
    
    def run_suite(self):  
        self.testlist = [] 
        testlist = self.testlist
        testlist.append(self.create_testcase_from_method(self.CreateResources))
        self.run_test_case_list(testlist)  
Esempio n. 2
0
class ResourceGeneration(EutesterTestCase):
    def __init__(self, credpath):
        self.tester = Eucaops(credpath=credpath)

    def CreateResources(self):
        users = self.tester.get_all_users()
        testers = []
        for user in users:
            keys = self.tester.create_access_key(
                user_name=user['user_name'],
                delegate_account=user['account_name'])
            testers.append(
                Eucaops(aws_access_key_id=keys['access_key_id'],
                        aws_secret_access_key=keys['secret_access_key'],
                        ec2_ip=self.tester.ec2.host,
                        s3_ip=self.tester.s3.host))

        for tester in testers:
            import random
            zone = random.choice(tester.get_zones())
            volume = self.tester.create_volume(size=1, azone=zone)
            snapshot = self.tester.create_snapshot(volume_id=volume.id)
            volume_from_snap = self.tester.create_volume(snapshot=snapshot,
                                                         azone=zone)
            bucket = self.tester.create_bucket(
                self.tester.id_generator(
                    12, string.ascii_lowercase + string.digits))
            key = self.tester.upload_object(
                bucket_name=bucket.name,
                key_name=self.tester.id_generator(
                    12, string.ascii_lowercase + string.digits),
                contents=self.tester.id_generator(200))
            keypair = self.tester.add_keypair(self.tester.id_generator())
            group = self.tester.add_group(self.tester.id_generator())

    def run_suite(self):
        self.testlist = []
        testlist = self.testlist
        testlist.append(self.create_testcase_from_method(self.CreateResources))
        self.run_test_case_list(testlist)
Esempio n. 3
0
        #Get the md5sum of the volume to compare to our previous md5
        cmd = "head -c " + str(
            fbytes) + " " + attached_block_dev + " | md5sum "
        md5sum2 = instance.sys(cmd, timeout=timeout)[0]
        md5sum2 = md5sum2.split(' ')[0]
        if (md5sum != md5sum2):
            pmsg("md5sum failed ms5sum1:" + md5sum + " vs md5sum2:" + md5sum2)
            raise Exception("md5 sums did not match")
        else:
            pmsg("Md5sum is good. Done splatting image, detaching volume...")
        time.sleep(5)
        tester.detach_volume(volume, timeout=timeout)

        pmsg("Creating snapshot from our splatted volume...")
        snapshot = tester.create_snapshot(volume.id,
                                          waitOnProgress=15,
                                          timeout=timeout)

        pmsg("Snapshot complete, register it as an emi with name:" + name +
             "...")
        bfebs_emi = tester.register_snapshot(snapshot,
                                             windows=windows,
                                             name=name,
                                             dot=dot)
        pmsg("Done. Image registered as:" + str(bfebs_emi))

    except Exception, e:
        print "\n\n\n\n\nscript failed\n\n\n\n\n"
        print "-------------ERROR---------------"
        print str(e)
        print "---------------------------------"
         raise Exception("Our write to volume failed:"+str(result))
   
     #Get the md5sum of the volume to compare to our previous md5         
     cmd="head -c "+str(fbytes)+" "+attached_block_dev+" | md5sum "
     md5sum2=instance.sys(cmd ,  timeout=timeout)[0]
     md5sum2 = md5sum2.split(' ')[0]
     if ( md5sum != md5sum2  ):
         pmsg ("md5sum failed ms5sum1:"+md5sum+" vs md5sum2:"+md5sum2)
         raise Exception ("md5 sums did not match")
     else:
         pmsg("Md5sum is good. Done splatting image, detaching volume...")
     time.sleep(5)
     tester.detach_volume(volume, timeout=timeout)
     
     pmsg("Creating snapshot from our splatted volume...")
     snapshot = tester.create_snapshot(volume.id, waitOnProgress=15, timeout=timeout)
     
     pmsg("Snapshot complete, register it as an emi with name:"+name+"...")
     bfebs_emi = tester.register_snapshot(snapshot, windows=windows, name=name, dot=dot)
     pmsg("Done. Image registered as:"+str(bfebs_emi))
 
 except Exception, e:
     print "\n\n\n\n\nscript failed\n\n\n\n\n"
     print "-------------ERROR---------------"
     print str(e)
     print "---------------------------------"
 except KeyboardInterrupt:
     pmsg("Caught keyboard interrupt...")
 finally:
     #If clean flag is set, terminate instances and delete volumes
     if (options.clean):
Esempio n. 5
0
class ImageCreator(EutesterTestCase):
    def __init__(self):
        extra_args = ['--size', '--repo-url', '--packages', '--user-data']
        self.setuptestcase()
        self.setup_parser()
        if extra_args:
            for arg in extra_args:
                self.parser.add_argument(arg)
        self.get_args()
        # Setup basic eutester object
        if self.args.region:
            self.tester = EC2ops(credpath=self.args.credpath,
                                 region=self.args.region)
        else:
            self.tester = Eucaops(config_file=self.args.config,
                                  password=self.args.password,
                                  credpath=self.args.credpath)
        self.tester.poll_count = 120

        ### Add and authorize a group for the instance
        self.group = self.tester.add_group(group_name="group-" +
                                           str(time.time()))
        self.tester.authorize_group_by_name(group_name=self.group.name)
        self.tester.authorize_group_by_name(group_name=self.group.name,
                                            port=-1,
                                            protocol="icmp")
        ### Generate a keypair for the instance
        self.keypair = self.tester.add_keypair("keypair-" + str(time.time()))
        self.keypath = '%s/%s.pem' % (os.curdir, self.keypair.name)
        if not self.args.emi:
            raise Exception(
                "Must pass base image id to use as parameter --emi")
        self.image = self.tester.get_emi(self.args.emi)
        self.address = None
        self.volume = None
        self.private_addressing = False
        zones = self.tester.ec2.get_all_zones()
        self.zone = random.choice(zones).name
        self.reservation = None

    def clean_method(self):
        if self.reservation:
            self.tester.terminate_instances(self.reservation)
            self.reservation = None
        if self.volume:
            self.tester.delete_volume(self.volume)

    def CreateImage(self, zone=None):
        '''Register a BFEBS snapshot'''
        if zone is None:
            zone = self.zone
        user_data = open(self.args.user_data, mode="r").read()
        self.reservation = self.tester.run_instance(image=self.args.emi,
                                                    keypair=self.keypair.name,
                                                    group=self.group.name,
                                                    zone=zone,
                                                    user_data=user_data)
        for instance in self.reservation.instances:
            if instance.root_device_type == "ebs":
                self.CreateEBS(instance)
            else:
                self.CreateInstanceStore(instance)
        self.tester.terminate_instances(self.reservation)
        self.reservation = None

    def get_machine(self, instance):
        assert isinstance(instance, EuInstance)
        distro = instance.sys('head -1 /etc/issue')[0]
        if re.search("CentOS", distro):
            return Machine(instance.ip_address,
                           keypath=self.keypath,
                           distro="CENTOS",
                           distro_ver="6")
        elif re.search("Ubuntu", distro):
            return Machine(instance.ip_address,
                           keypath=self.keypath,
                           distro="UBUNTU",
                           distro_ver="PRECISE")
        raise Exception("Unable to find supported distro on image")

    def CreateEBS(self, instance):
        machine = self.get_machine(instance)
        if hasattr(self.args, 'repo'):
            machine.package_manager.add_repo(self.args.repo_url)
        if hasattr(self.args, 'packages'):
            machine.package_manager.install(self.args.packages)
        volume = self.tester.get_volumes(attached_instance=instance.id)[0]
        snapshot = self.tester.create_snapshot(volume.id)
        self.tester.register_snapshot(snapshot)

    def CreateInstanceStore(self, instance):
        machine = self.get_machine(instance)
        if hasattr(self.args, 'repo'):
            machine.package_manager.add_repo(self.args.repo_url)
        if hasattr(self.args, 'packages'):
            machine.package_manager.install(self.args.packages)
        mount_point = "/mnt"
        instance.sys("mfks.ext3 -F /dev/" + instance.rootfs_device + "2")
        instance.sys("mount " + "/dev/" + instance.rootfs_device + "2 " +
                     mount_point)

        image_file_name = "server.img"
        remote_image_file = mount_point + "/" + image_file_name
        instance.sys("dd bs=1M if=/dev/" + instance.rootfs_device + "1 of=" +
                     remote_image_file,
                     timeout=600)
        machine.sftp.get(remote_image_file, image_file_name)

    def find_filesystem(self, machine, block_device):
        for device in machine.sys('ls -1 ' + block_device + "*"):
            if machine.found('file -s ' + device, "filesystem"):
                return device
        raise Exception("Unable to find a filesystem on block device:" +
                        block_device)
Esempio n. 6
0
        cmd = "head -c " + str(
            fbytes) + " " + attached_block_dev + " | md5sum "
        md5sum2 = instance.sys(cmd, timeout=timeout)[0]
        md5sum2 = md5sum2.split(' ')[0]
        if (md5sum != md5sum2):
            pmsg("md5sum failed ms5sum1:" + md5sum + " vs md5sum2:" + md5sum2)
            raise Exception("md5 sums did not match")
        else:
            pmsg("Md5sum is good. Done splatting image, detaching volume...")
        time.sleep(5)
        tester.detach_volume(volume, timeout=timeout)

        pmsg("Creating snapshot from our splatted volume...")
        wait_on_progress = volume.size * 20
        snapshot = tester.create_snapshot(volume.id,
                                          wait_on_progress=wait_on_progress,
                                          timeout=timeout)

        pmsg("Snapshot complete, register it as an emi with name:" + name +
             "...")
        bfebs_emi = tester.register_snapshot(snapshot,
                                             windows=windows,
                                             name=name,
                                             dot=dot)
        pmsg("Done. Image registered as:" + str(bfebs_emi))

    except Exception, e:
        print "\n\n\n\n\nscript failed\n\n\n\n\n"
        print "-------------ERROR---------------"
        print str(e)
        print "---------------------------------"
Esempio n. 7
0
class Euca4229(unittest.TestCase):
    def setUp(self):
        self.conf = "cloud.conf"
        self.cond = 0
        self.tester = Eucaops(config_file=self.conf, password="******")
        self.doAuth()
        self.sbin = self.tester.eucapath + "/usr/sbin/"
        self.source = "source " + self.tester.credpath + "/eucarc && "

    def tearDown(self):
        self.tester.sys(
            self.source + self.sbin +
            "euca-modify-property -p walrus.storagemaxtotalsnapshotsizeingb=50"
        )
        self.tester.cleanup_artifacts()
        self.tester.delete_keypair(self.keypair)
        self.tester.local("rm " + self.keypair.name + ".pem")
        shutil.rmtree(self.tester.credpath)

    def runInstances(self, numMax):
        #Start instance
        self.reservation = self.tester.run_instance(keypair=self.keypair.name,
                                                    group=self.group,
                                                    min=1,
                                                    max=numMax,
                                                    is_reachable=False)
        # Make sure the instance is running
        for instance in self.reservation.instances:
            if instance.state == "running":
                self.ip = instance.public_dns_name
                self.instanceid = instance.id

    def doAuth(self):
        self.keypair = self.tester.add_keypair()
        self.group = self.tester.add_group()
        self.tester.authorize_group(self.group)

    def testEuca4229(self):
        # Get availibility zone
        self.zone = self.tester.get_zones().pop()
        # Get number of already existing snapshots:
        self.num_snaps_before = str(
            self.tester.sys(self.source +
                            "euca-describe-snapshots")).count("SNAPSHOT")
        # Set storagemaxtotalsnapshotsizeingb
        self.tester.sys(
            self.source + self.sbin +
            "euca-modify-property -p walrus.storagemaxtotalsnapshotsizeingb=1")
        # create volume larger than storagemaxtotalsnapshotsizeingb = 1GB
        self.volume = self.tester.create_volume(self.zone, 2, timeout=100)
        # make sure the exception is thrown
        try:
            self.snap = self.tester.create_snapshot(self.volume.id,
                                                    description="snap-4229")
        except Exception as detail:
            self.cond = str(detail).count('maximum allowed object size')
        # Get the current number of snapshots
        self.num_snaps_after = str(
            self.tester.sys(self.source +
                            "euca-describe-snapshots")).count("SNAPSHOT")
        # Check to see if the the error was thrown and make sure no new snapshot-matadata was created
        if self.cond >= 1 and self.num_snaps_after == self.num_snaps_before:
            self.tester.debug("SUCCESS no new snapshot-metadata")
            pass
        else:
            self.fail("FAIL new snapshot-metadata")
Esempio n. 8
0
class ImageCreator(EutesterTestCase):
    def __init__(self):
        extra_args = ['--size', '--repo-url', '--packages', '--user-data']
        self.setuptestcase()
        self.setup_parser()
        if extra_args:
            for arg in extra_args:
                self.parser.add_argument(arg)
        self.get_args()
        # Setup basic eutester object
        if self.args.region:
            self.tester = EC2ops( credpath=self.args.credpath, region=self.args.region)
        else:
            self.tester = Eucaops(config_file=self.args.config, password=self.args.password, credpath=self.args.credpath)
        self.tester.poll_count = 120

        ### Add and authorize a group for the instance
        self.group = self.tester.add_group(group_name="group-" + str(time.time()))
        self.tester.authorize_group_by_name(group_name=self.group.name )
        self.tester.authorize_group_by_name(group_name=self.group.name, port=-1, protocol="icmp" )
        ### Generate a keypair for the instance
        self.keypair = self.tester.add_keypair( "keypair-" + str(time.time()))
        self.keypath = '%s/%s.pem' % (os.curdir, self.keypair.name)
        if not self.args.emi:
            raise Exception("Must pass base image id to use as parameter --emi")
        self.image =  self.tester.get_emi(self.args.emi)
        self.address = None
        self.volume = None
        self.private_addressing = False
        zones = self.tester.ec2.get_all_zones()
        self.zone = random.choice(zones).name
        self.reservation = None

    def clean_method(self):
        if self.reservation:
            self.tester.terminate_instances(self.reservation)
            self.reservation = None
        if self.volume:
            self.tester.delete_volume(self.volume)

    def CreateImage(self, zone= None):
        '''Register a BFEBS snapshot'''
        if zone is None:
            zone = self.zone
        user_data = open(self.args.user_data, mode="r").read()
        self.reservation = self.tester.run_instance(image=self.args.emi,keypair=self.keypair.name, group=self.group.name,
                                                    zone=zone, user_data=user_data)
        for instance in self.reservation.instances:
            if instance.root_device_type == "ebs":
                self.CreateEBS(instance)
            else:
                self.CreateInstanceStore(instance)
        self.tester.terminate_instances(self.reservation)
        self.reservation = None

    def get_machine(self, instance):
        assert isinstance(instance, EuInstance)
        distro = instance.sys('head -1 /etc/issue')[0]
        if re.search("CentOS", distro):
            return Machine(instance.ip_address, keypath=self.keypath, distro="CENTOS", distro_ver="6")
        elif re.search("Ubuntu", distro):
            return Machine(instance.ip_address, keypath=self.keypath, distro="UBUNTU", distro_ver="PRECISE")
        raise Exception("Unable to find supported distro on image")

    def CreateEBS(self, instance):
        machine = self.get_machine(instance)
        if hasattr(self.args, 'repo'):
            machine.package_manager.add_repo(self.args.repo_url)
        if hasattr(self.args, 'packages'):
            machine.package_manager.install(self.args.packages)
        volume = self.tester.get_volumes(attached_instance=instance.id)[0]
        snapshot = self.tester.create_snapshot(volume.id)
        self.tester.register_snapshot(snapshot)

    def CreateInstanceStore(self, instance):
        machine = self.get_machine(instance)
        if hasattr(self.args, 'repo'):
            machine.package_manager.add_repo(self.args.repo_url)
        if hasattr(self.args, 'packages'):
            machine.package_manager.install(self.args.packages)
        mount_point = "/mnt"
        instance.sys("mfks.ext3 -F /dev/" + instance.rootfs_device + "2" )
        instance.sys("mount " + "/dev/" + instance.rootfs_device + "2 " + mount_point )

        image_file_name = "server.img"
        remote_image_file = mount_point + "/" + image_file_name
        instance.sys("dd bs=1M if=/dev/" + instance.rootfs_device + "1 of=" + remote_image_file, timeout=600)
        machine.sftp.get(remote_image_file, image_file_name)

    def find_filesystem(self, machine, block_device):
        for device in machine.sys('ls -1 ' + block_device + "*"):
            if machine.found('file -s ' + device, "filesystem"):
                return device
        raise Exception("Unable to find a filesystem on block device:" + block_device)
Esempio n. 9
0
     
     #Get the md5sum of the volume to compare to our previous md5         
     cmd="head -c "+str(fbytes)+" "+attached_block_dev+" | md5sum "
     md5sum2=instance.sys(cmd ,  timeout=timeout)[0]
     md5sum2 = md5sum2.split(' ')[0]
     if ( md5sum != md5sum2  ):
         pmsg ("md5sum failed ms5sum1:"+md5sum+" vs md5sum2:"+md5sum2)
         raise Exception ("md5 sums did not match")
     else:
         pmsg("Md5sum is good. Done splatting image, detaching volume...")
     time.sleep(5)
     tester.detach_volume(volume, timeout=timeout)
     
     pmsg("Creating snapshot from our splatted volume...")
     wait_on_progress = volume.size*20
     snapshot = tester.create_snapshot(volume.id, wait_on_progress=wait_on_progress, timeout=timeout)
     
     pmsg("Snapshot complete, register it as an emi with name:"+name+"...")
     bfebs_emi = tester.register_snapshot(snapshot, windows=windows, name=name, dot=dot)
     pmsg("Done. Image registered as:"+str(bfebs_emi))
 
 except Exception, e:
     print "\n\n\n\n\nscript failed\n\n\n\n\n"
     print "-------------ERROR---------------"
     print str(e)
     print "---------------------------------"
 except KeyboardInterrupt:
     pmsg("Caught keyboard interrupt...")
 finally:
     #If clean flag is set, terminate instances and delete volumes
     if (options.clean):