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)
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)
#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):
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)
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 "---------------------------------"
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")
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)
#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):