def test_60_finalize(self, get_driver): auth = Authentication([{ 'id': 'libcloud', 'type': 'LibCloud', 'username': '******', 'password': '******', 'driver': 'EC2' }]) lib_cloud = self.get_lib_cloud() radl_data = """ system test ( cpu.count>=2 and memory.size>=2048m )""" radl = radl_parse.parse_radl(radl_data) inf = MagicMock() inf.get_next_vm_id.return_value = 1 vm = VirtualMachine(inf, "1", lib_cloud.cloud, radl, radl, lib_cloud) vm.keypair = "" driver = MagicMock() driver.name = "Amazon EC2" get_driver.return_value = driver node = MagicMock() node.id = "1" node.state = "running" node.driver = driver node.destroy.return_value = True driver.list_nodes.return_value = [node] sg = MagicMock() sg.id = sg.name = "sg1" driver.ex_get_node_security_groups.return_value = [sg] keypair = MagicMock() driver.get_key_pair.return_value = keypair vm.keypair = keypair volume = MagicMock() volume.id = "id" vm.volumes = [volume] driver.delete_key_pair.return_value = True driver.ex_describe_addresses_for_node.return_value = ["ip"] driver.ex_disassociate_address.return_value = True success, _ = lib_cloud.finalize(vm, auth) self.assertTrue(success, msg="ERROR: finalizing VM info.") self.assertNotIn("ERROR", self.log.getvalue(), msg="ERROR found in log: %s" % self.log.getvalue()) self.clean_log()
def test_60_finalize(self, get_driver): auth = Authentication([{'id': 'libcloud', 'type': 'LibCloud', 'username': '******', 'password': '******', 'driver': 'EC2'}]) lib_cloud = self.get_lib_cloud() radl_data = """ system test ( cpu.count>=2 and memory.size>=2048m )""" radl = radl_parse.parse_radl(radl_data) inf = MagicMock() inf.get_next_vm_id.return_value = 1 vm = VirtualMachine(inf, "1", lib_cloud.cloud, radl, radl, lib_cloud) vm.keypair = "" driver = MagicMock() driver.name = "Amazon EC2" get_driver.return_value = driver node = MagicMock() node.id = "1" node.state = "running" node.driver = driver node.destroy.return_value = True driver.list_nodes.return_value = [node] sg = MagicMock() sg.id = sg.name = "sg1" driver.ex_get_node_security_groups.return_value = [sg] keypair = MagicMock() driver.get_key_pair.return_value = keypair vm.keypair = keypair volume = MagicMock() volume.id = "id" vm.volumes = [volume] driver.delete_key_pair.return_value = True driver.ex_describe_addresses_for_node.return_value = ["ip"] driver.ex_disassociate_address.return_value = True success, _ = lib_cloud.finalize(vm, auth) self.assertTrue(success, msg="ERROR: finalizing VM info.") self.assertNotIn("ERROR", self.log.getvalue(), msg="ERROR found in log: %s" % self.log.getvalue()) self.clean_log()
def test_60_finalize(self, sleep, get_driver): auth = Authentication([{ 'id': 'ost', 'type': 'OpenStack', 'username': '******', 'password': '******', 'tenant': 'tenant', 'host': 'https://server.com:5000' }]) ost_cloud = self.get_ost_cloud() radl_data = """ system test ( cpu.count>=2 and memory.size>=2048m )""" radl = radl_parse.parse_radl(radl_data) inf = MagicMock() inf.get_next_vm_id.return_value = 1 vm = VirtualMachine(inf, "1", ost_cloud.cloud, radl, radl, ost_cloud) driver = MagicMock() driver.name = "OpenStack" get_driver.return_value = driver node = MagicMock() node.id = "1" node.state = "running" node.extra = {'flavorId': 'small'} node.public_ips = ['158.42.1.1'] node.private_ips = ['10.0.0.1'] node.driver = driver node.destroy.return_value = True driver.list_nodes.return_value = [node] sg = MagicMock() sg.id = sg.name = "sg1" driver.ex_get_node_security_groups.return_value = [sg] keypair = MagicMock() driver.get_key_pair.return_value = keypair vm.keypair = keypair driver.delete_key_pair.return_value = True driver.delete_security_group.return_value = True driver.ex_list_floating_ips.return_value = [] success, _ = ost_cloud.finalize(vm, auth) self.assertTrue(success, msg="ERROR: finalizing VM info.") self.assertNotIn("ERROR", self.log.getvalue(), msg="ERROR found in log: %s" % self.log.getvalue()) self.clean_log()
def test_60_finalize(self, sleep, get_driver): auth = Authentication([{'id': 'ost', 'type': 'OpenStack', 'username': '******', 'password': '******', 'tenant': 'tenant', 'host': 'https://server.com:5000'}]) ost_cloud = self.get_ost_cloud() radl_data = """ system test ( cpu.count>=2 and memory.size>=2048m )""" radl = radl_parse.parse_radl(radl_data) inf = MagicMock() inf.get_next_vm_id.return_value = 1 vm = VirtualMachine(inf, "1", ost_cloud.cloud, radl, radl, ost_cloud) driver = MagicMock() driver.name = "OpenStack" get_driver.return_value = driver node = MagicMock() node.id = "1" node.state = "running" node.extra = {'flavorId': 'small'} node.public_ips = ['158.42.1.1'] node.private_ips = ['10.0.0.1'] node.driver = driver node.destroy.return_value = True driver.list_nodes.return_value = [node] sg = MagicMock() sg.id = sg.name = "sg1" driver.ex_get_node_security_groups.return_value = [sg] keypair = MagicMock() driver.get_key_pair.return_value = keypair vm.keypair = keypair driver.delete_key_pair.return_value = True driver.delete_security_group.return_value = True driver.ex_list_floating_ips.return_value = [] success, _ = ost_cloud.finalize(vm, auth) self.assertTrue(success, msg="ERROR: finalizing VM info.") self.assertNotIn("ERROR", self.log.getvalue(), msg="ERROR found in log: %s" % self.log.getvalue()) self.clean_log()
def launch(self, inf, radl, requested_radl, num_vm, auth_data): driver = self.get_driver(auth_data) system = radl.systems[0] image_id = self.get_image_id(system.getValue("disk.0.image.url")) image = NodeImage(id=image_id, name=None, driver=driver) instance_type = self.get_instance_type(driver.list_sizes(), system) name = system.getValue("instance_name") if not name: name = system.getValue("disk.0.image.name") if not name: name = "userimage" args = { 'size': instance_type, 'image': image, 'name': "%s-%s" % (name, str(uuid.uuid1())) } keypair = None public_key = system.getValue("disk.0.os.credentials.public_key") if self.driver_uses_keypair(driver): if public_key: keypair = driver.get_key_pair(public_key) if keypair: system.setUserKeyCredentials( system.getCredentials().username, None, keypair.private_key) else: if "ssh_key" in driver.features.get("create_node", []): args["auth"] = NodeAuthSSHKey(public_key) else: args["ex_keyname"] = keypair.name elif not system.getValue("disk.0.os.credentials.password"): keypair_name = "im-%s" % str(uuid.uuid1()) keypair = driver.create_key_pair(keypair_name) system.setUserKeyCredentials(system.getCredentials().username, None, keypair.private_key) if keypair.public_key and "ssh_key" in driver.features.get( "create_node", []): args["auth"] = NodeAuthSSHKey(keypair.public_key) else: args["ex_keyname"] = keypair_name res = [] i = 0 while i < num_vm: self.log_debug("Creating node") node = driver.create_node(**args) if node: vm = VirtualMachine(inf, node.id, self.cloud, radl, requested_radl, self.cloud.getCloudConnector(inf)) vm.info.systems[0].setValue('instance_id', str(node.id)) vm.info.systems[0].setValue('instance_name', str(node.name)) # Add the keypair name to remove it later vm.keypair = keypair_name self.log_debug("Node successfully created.") inf.add_vm(vm) res.append((True, vm)) else: res.append((False, "Error creating the node")) i += 1 return res
def launch(self, inf, radl, requested_radl, num_vm, auth_data): driver = self.get_driver(auth_data) system = radl.systems[0] image_id = self.get_image_id(system.getValue("disk.0.image.url")) image = NodeImage(id=image_id, name=None, driver=driver) instance_type = self.get_instance_type(driver.list_sizes(), system) name = system.getValue("instance_name") if not name: name = system.getValue("disk.0.image.name") if not name: name = "userimage" nets = self.get_networks(driver, radl) sgs = self.create_security_group(driver, inf, radl) args = { 'size': instance_type, 'image': image, 'networks': nets, 'ex_security_groups': sgs, 'name': "%s-%s" % (name, int(time.time() * 100)) } cloud_init = self.get_cloud_init_data(radl) if cloud_init: args['ex_userdata'] = cloud_init keypair = None public_key = system.getValue("disk.0.os.credentials.public_key") if public_key: keypair = driver.get_key_pair(public_key) if keypair: system.setUserKeyCredentials(system.getCredentials().username, None, keypair.private_key) else: if "ssh_key" in driver.features.get("create_node", []): args["auth"] = NodeAuthSSHKey(public_key) else: args["ex_keyname"] = keypair.name elif not system.getValue("disk.0.os.credentials.password"): keypair_name = "im-%d" % int(time.time() * 100.0) keypair = driver.create_key_pair(keypair_name) system.setUserKeyCredentials(system.getCredentials().username, None, keypair.private_key) if keypair.public_key and "ssh_key" in driver.features.get( "create_node", []): args["auth"] = NodeAuthSSHKey(keypair.public_key) else: args["ex_keyname"] = keypair_name res = [] i = 0 all_failed = True while i < num_vm: self.logger.debug("Creating node") node = driver.create_node(**args) if node: vm = VirtualMachine(inf, node.id, self.cloud, radl, requested_radl, self.cloud.getCloudConnector()) vm.info.systems[0].setValue('instance_id', str(node.id)) vm.info.systems[0].setValue('instance_name', str(node.name)) # Add the keypair name to remove it later vm.keypair = keypair_name self.logger.debug("Node successfully created.") all_failed = False res.append((True, vm)) else: res.append((False, "Error creating the node")) i += 1 # if all the VMs have failed, remove the sg and keypair if all_failed: if (public_key is None or len(public_key) == 0 or (len(public_key) >= 1 and public_key.find('-----BEGIN CERTIFICATE-----') != -1)): # only delete in case of the user do not specify the keypair # name driver.delete_key_pair(keypair) if sgs: driver.ex_delete_security_group(sgs[0]) return res
def launch(self, inf, radl, requested_radl, num_vm, auth_data): driver = self.get_driver(auth_data) system = radl.systems[0] image_id = self.get_image_id(system.getValue("disk.0.image.url")) image = NodeImage(id=image_id, name=None, driver=driver) instance_type = self.get_instance_type(driver.list_sizes(), system) if not instance_type: raise Exception( "No flavor found for the specified VM requirements.") name = system.getValue("instance_name") if not name: name = system.getValue("disk.0.image.name") if not name: name = "userimage" nets = self.get_networks(driver, radl) sgs = self.create_security_group(driver, inf, radl) args = { 'size': instance_type, 'image': image, 'networks': nets, 'ex_security_groups': sgs, 'name': "%s-%s" % (name, int(time.time() * 100)) } keypair = None keypair_name = None keypair_created = False public_key = system.getValue("disk.0.os.credentials.public_key") if public_key: keypair = driver.get_key_pair(public_key) if keypair: system.setUserKeyCredentials(system.getCredentials().username, None, keypair.private_key) else: if "ssh_key" in driver.features.get("create_node", []): args["auth"] = NodeAuthSSHKey(public_key) elif not system.getValue("disk.0.os.credentials.password"): keypair_name = "im-%d" % int(time.time() * 100.0) self.log_debug("Create keypair: %s" % keypair_name) keypair = driver.create_key_pair(keypair_name) keypair_created = True public_key = keypair.public_key system.setUserKeyCredentials(system.getCredentials().username, None, keypair.private_key) if keypair.public_key and "ssh_key" in driver.features.get( "create_node", []): args["auth"] = NodeAuthSSHKey(keypair.public_key) else: args["ex_keyname"] = keypair_name user = system.getValue('disk.0.os.credentials.username') if not user: user = self.DEFAULT_USER system.setValue('disk.0.os.credentials.username', user) cloud_init = self.get_cloud_init_data(radl) if public_key: cloud_init = self.gen_cloud_config(public_key, user, cloud_init) if cloud_init: args['ex_userdata'] = cloud_init res = [] i = 0 all_failed = True while i < num_vm: self.log_debug("Creating node") node = None msg = "Error creating the node. " try: node = driver.create_node(**args) except Exception as ex: msg += str(ex) if node: vm = VirtualMachine(inf, node.id, self.cloud, radl, requested_radl, self.cloud.getCloudConnector(inf)) vm.info.systems[0].setValue('instance_id', str(node.id)) vm.info.systems[0].setValue('instance_name', str(node.name)) # Add the keypair name to remove it later if keypair_name: vm.keypair = keypair_name self.log_debug("Node successfully created.") all_failed = False res.append((True, vm)) else: res.append((False, msg)) i += 1 # if all the VMs have failed, remove the sg and keypair if all_failed: if keypair_created: # only delete in case of the user do not specify the keypair # name self.log_debug("Deleting keypair: %s." % keypair_name) driver.delete_key_pair(keypair) if sgs: self.log_debug("Deleting security group: %s." % sgs[0].id) driver.ex_delete_security_group(sgs[0]) return res
def launch(self, inf, radl, requested_radl, num_vm, auth_data): driver = self.get_driver(auth_data) system = radl.systems[0] image_id = self.get_image_id(system.getValue("disk.0.image.url")) image = NodeImage(id=image_id, name=None, driver=driver) instance_type = self.get_instance_type(driver.list_sizes(), system) name = system.getValue("instance_name") if not name: name = system.getValue("disk.0.image.name") if not name: name = "userimage" args = {'size': instance_type, 'image': image, 'name': "%s-%s" % (name, int(time.time() * 100))} keypair = None public_key = system.getValue("disk.0.os.credentials.public_key") if self.driver_uses_keypair(driver): if public_key: keypair = driver.get_key_pair(public_key) if keypair: system.setUserKeyCredentials( system.getCredentials().username, None, keypair.private_key) else: if "ssh_key" in driver.features.get("create_node", []): args["auth"] = NodeAuthSSHKey(public_key) else: args["ex_keyname"] = keypair.name elif not system.getValue("disk.0.os.credentials.password"): keypair_name = "im-%d" % int(time.time() * 100.0) keypair = driver.create_key_pair(keypair_name) system.setUserKeyCredentials( system.getCredentials().username, None, keypair.private_key) if keypair.public_key and "ssh_key" in driver.features.get("create_node", []): args["auth"] = NodeAuthSSHKey(keypair.public_key) else: args["ex_keyname"] = keypair_name res = [] i = 0 while i < num_vm: self.logger.debug("Creating node") node = driver.create_node(**args) if node: vm = VirtualMachine( inf, node.id, self.cloud, radl, requested_radl, self.cloud.getCloudConnector()) vm.info.systems[0].setValue('instance_id', str(node.id)) vm.info.systems[0].setValue('instance_name', str(node.name)) # Add the keypair name to remove it later vm.keypair = keypair_name self.logger.debug("Node successfully created.") res.append((True, vm)) else: res.append((False, "Error creating the node")) i += 1 return res
def launch(self, inf, radl, requested_radl, num_vm, auth_data): driver = self.get_driver(auth_data) system = radl.systems[0] image_id = self.get_image_id(system.getValue("disk.0.image.url")) image = NodeImage(id=image_id, name=None, driver=driver) instance_type = self.get_instance_type(driver.list_sizes(), system) if not instance_type: raise Exception("No flavor found for the specified VM requirements.") name = system.getValue("instance_name") if not name: name = system.getValue("disk.0.image.name") if not name: name = "userimage" nets = self.get_networks(driver, radl) sgs = self.create_security_group(driver, inf, radl) args = {'size': instance_type, 'image': image, 'networks': nets, 'ex_security_groups': sgs, 'name': "%s-%s" % (name, int(time.time() * 100))} keypair = None keypair_name = None keypair_created = False public_key = system.getValue("disk.0.os.credentials.public_key") if public_key: keypair = driver.get_key_pair(public_key) if keypair: system.setUserKeyCredentials( system.getCredentials().username, None, keypair.private_key) else: if "ssh_key" in driver.features.get("create_node", []): args["auth"] = NodeAuthSSHKey(public_key) elif not system.getValue("disk.0.os.credentials.password"): keypair_name = "im-%d" % int(time.time() * 100.0) self.logger.debug("Create keypair: %s" % keypair_name) keypair = driver.create_key_pair(keypair_name) keypair_created = True public_key = keypair.public_key system.setUserKeyCredentials( system.getCredentials().username, None, keypair.private_key) if keypair.public_key and "ssh_key" in driver.features.get("create_node", []): args["auth"] = NodeAuthSSHKey(keypair.public_key) else: args["ex_keyname"] = keypair_name user = system.getValue('disk.0.os.credentials.username') if not user: user = self.DEFAULT_USER system.setValue('disk.0.os.credentials.username', user) cloud_init = self.get_cloud_init_data(radl) if public_key: cloud_init = self.gen_cloud_config(public_key, user, cloud_init) if cloud_init: args['ex_userdata'] = cloud_init res = [] i = 0 all_failed = True while i < num_vm: self.logger.debug("Creating node") node = None msg = "Error creating the node. " try: node = driver.create_node(**args) except Exception, ex: msg += str(ex) if node: vm = VirtualMachine(inf, node.id, self.cloud, radl, requested_radl, self.cloud.getCloudConnector()) vm.info.systems[0].setValue('instance_id', str(node.id)) vm.info.systems[0].setValue('instance_name', str(node.name)) # Add the keypair name to remove it later if keypair_name: vm.keypair = keypair_name self.logger.debug("Node successfully created.") all_failed = False res.append((True, vm)) else: res.append((False, msg)) i += 1
def launch(self, inf, radl, requested_radl, num_vm, auth_data): driver = self.get_driver(auth_data) system = radl.systems[0] image_id = self.get_image_id(system.getValue("disk.0.image.url")) image = NodeImage(id=image_id, name=None, driver=driver) instance_type = self.get_instance_type(driver.list_sizes(), system) name = system.getValue("instance_name") if not name: name = system.getValue("disk.0.image.name") if not name: name = "userimage" nets = self.get_networks(driver, radl) sgs = self.create_security_group(driver, inf, radl) args = {'size': instance_type, 'image': image, 'networks': nets, 'ex_security_groups': sgs, 'name': "%s-%s" % (name, int(time.time() * 100))} cloud_init = self.get_cloud_init_data(radl) if cloud_init: args['ex_userdata'] = cloud_init keypair = None public_key = system.getValue("disk.0.os.credentials.public_key") if public_key: keypair = driver.get_key_pair(public_key) if keypair: system.setUserKeyCredentials( system.getCredentials().username, None, keypair.private_key) else: if "ssh_key" in driver.features.get("create_node", []): args["auth"] = NodeAuthSSHKey(public_key) else: args["ex_keyname"] = keypair.name elif not system.getValue("disk.0.os.credentials.password"): keypair_name = "im-%d" % int(time.time() * 100.0) keypair = driver.create_key_pair(keypair_name) system.setUserKeyCredentials( system.getCredentials().username, None, keypair.private_key) if keypair.public_key and "ssh_key" in driver.features.get("create_node", []): args["auth"] = NodeAuthSSHKey(keypair.public_key) else: args["ex_keyname"] = keypair_name res = [] i = 0 all_failed = True while i < num_vm: self.logger.debug("Creating node") node = driver.create_node(**args) if node: vm = VirtualMachine( inf, node.id, self.cloud, radl, requested_radl, self.cloud.getCloudConnector()) vm.info.systems[0].setValue('instance_id', str(node.id)) vm.info.systems[0].setValue('instance_name', str(node.name)) # Add the keypair name to remove it later vm.keypair = keypair_name self.logger.debug("Node successfully created.") all_failed = False res.append((True, vm)) else: res.append((False, "Error creating the node")) i += 1 # if all the VMs have failed, remove the sg and keypair if all_failed: if (public_key is None or len(public_key) == 0 or (len(public_key) >= 1 and public_key.find('-----BEGIN CERTIFICATE-----') != -1)): # only delete in case of the user do not specify the keypair # name driver.delete_key_pair(keypair) if sgs: driver.ex_delete_security_group(sgs[0]) return res