From 4fe37b2a6633bcc13b1fd4013505a98186ef16f8 Mon Sep 17 00:00:00 2001 From: Ilya Bumarskov Date: Wed, 13 Apr 2016 21:40:42 +0300 Subject: [PATCH] vCenter tests with OpenStack actions for cinder and nova Change-Id: If98635479026b4df60354904e543b18d3abc81d4 Closes-bug: #1570048 (cherry picked from commit 0811713cc75c810cefa37fa92a2a8ecb5f42f183) --- fuelweb_test/helpers/os_actions.py | 76 ++++- fuelweb_test/settings.py | 5 +- system_test/actions/vcenter_actions.py | 272 ++++++++++++++++++ system_test/tests/vcenter/test_vcenter_dvs.py | 259 +++++++++++++++++ .../vcenter_dvs/vmware_roles_local_ds.yaml | 45 +++ 5 files changed, 651 insertions(+), 6 deletions(-) create mode 100644 system_test/tests_templates/tests_configs/vcenter_dvs/vmware_roles_local_ds.yaml diff --git a/fuelweb_test/helpers/os_actions.py b/fuelweb_test/helpers/os_actions.py index 77bc3beab..4cba72432 100644 --- a/fuelweb_test/helpers/os_actions.py +++ b/fuelweb_test/helpers/os_actions.py @@ -64,13 +64,31 @@ class OpenStackActions(common.Common): if servers: return servers + def get_server_by_name(self, name): + servers = self.get_servers() + for srv in servers: + if srv.name == name: + return srv + logger.warning("Instance with name {} was not found".format(name)) + return None + + def get_flavor_by_name(self, name): + flavor_list = self.nova.flavors.list() + for flavor in flavor_list: + if flavor.name == name: + return flavor + logger.warning("Flavor with name {} was not found".format(name)) + return None + def create_server( self, name=None, security_groups=None, flavor_id=None, net_id=None, - timeout=100 + timeout=100, + image=None, + **kwargs ): """ Creates simple server, like in OSTF. @@ -79,6 +97,7 @@ class OpenStackActions(common.Common): :param flavor_id: micro_flavor if None :param net_id: network id, could be omitted. :param timeout: int=100 + :param image: TestVM if None. :return: Server, in started state """ def find_micro_flavor(): @@ -92,15 +111,18 @@ class OpenStackActions(common.Common): security_groups = [self.create_sec_group_for_ssh()] if not flavor_id: flavor_id = find_micro_flavor().id + if image is None: + image = self._get_cirros_image().id nics = [{'net-id': net_id}] if net_id else None srv = self.nova.servers.create( name=name, - image=self._get_cirros_image().id, + image=image, flavor=flavor_id, security_groups=[sec_group.name for sec_group in security_groups], - nics=nics) + nics=nics, + **kwargs) try: helpers.wait( @@ -281,8 +303,9 @@ class OpenStackActions(common.Common): server = self.get_instance_detail(server.id) return server - def create_volume(self, size=1, image_id=None): - volume = self.cinder.volumes.create(size=size, imageRef=image_id) + def create_volume(self, size=1, image_id=None, **kwargs): + volume = self.cinder.volumes.create(size=size, imageRef=image_id, + **kwargs) helpers.wait( lambda: self.cinder.volumes.get(volume.id).status == "available", timeout=100) @@ -312,6 +335,10 @@ class OpenStackActions(common.Common): self.cinder.volumes.extend(volume, newsize) return self.cinder.volumes.get(volume.id) + def get_volume_status(self, volume): + vol = self.cinder.volumes.get(volume.id) + return vol._info['status'] + def get_hosts_for_migr(self, srv_host_name): # Determine which host is available for live migration return [ @@ -452,6 +479,9 @@ class OpenStackActions(common.Common): def get_image_list(self): return self.glance.images.list() + def update_image(self, image, **kwargs): + self.glance.images.update(image, **kwargs) + def get_image(self, image_name): image_list = self.get_image_list() for img in image_list: @@ -462,9 +492,45 @@ class OpenStackActions(common.Common): def get_image_data(self, image_name): return self.glance.images.data(image_name) + def get_security_group_list(self): + return self.nova.security_groups.list() + + def get_security_group(self, sg_name): + sg_list = self.get_security_group_list() + for sg in sg_list: + if sg.name == sg_name: + return sg + return None + def get_nova_service_list(self): return self.nova.services.list() + def get_nova_service_status(self, service): + services = self.get_nova_service_list() + for s in services: + if s.host == service.host and s.binary == service.binary: + return s.status + + def enable_nova_service(self, service, timeout=30): + self.nova.services.enable(service.host, service.binary) + helpers.wait( + lambda: self.get_nova_service_status(service) == "enabled", + timeout=timeout, + timeout_msg="Service {0} on {1} does not reach enabled " + "state, current state " + "is {2}".format(service.binary, service.host, + service.status)) + + def disable_nova_service(self, service, timeout=30): + self.nova.services.disable(service.host, service.binary) + helpers.wait( + lambda: self.get_nova_service_status(service) == "disabled", + timeout=timeout, + timeout_msg="Service {0} on {1} does not reach disabled " + "state, current state " + "is {2}".format(service.binary, service.host, + service.status)) + def delete_nova_service(self, service_id): return self.nova.services.delete(service_id) diff --git a/fuelweb_test/settings.py b/fuelweb_test/settings.py index 6688b1fd4..1975a0976 100644 --- a/fuelweb_test/settings.py +++ b/fuelweb_test/settings.py @@ -336,7 +336,10 @@ VCENTER_USERNAME = os.environ.get('VCENTER_USERNAME') VCENTER_PASSWORD = os.environ.get('VCENTER_PASSWORD') VCENTER_DATACENTER = os.environ.get('VC_DATACENTER') VCENTER_DATASTORE = os.environ.get('VC_DATASTORE') - +VMWARE_IMG_URL = os.environ.get('VMWARE_IMG_URL') +VMWARE_IMG_NAME = os.environ.get('VMWARE_IMG_NAME') +VMWARE_IMG_LOGIN = os.environ.get('VMWARE_IMG_LOGIN') +VMWARE_IMG_PASSWORD = os.environ.get('VMWARE_IMG_PASSWORD') # Services tests SERVTEST_LOCAL_PATH = os.environ.get('SERVTEST_LOCAL_PATH', '/tmp') diff --git a/system_test/actions/vcenter_actions.py b/system_test/actions/vcenter_actions.py index c4c513313..27d0d6837 100644 --- a/system_test/actions/vcenter_actions.py +++ b/system_test/actions/vcenter_actions.py @@ -12,8 +12,10 @@ # License for the specific language governing permissions and limitations # under the License. +from time import sleep from random import randrange +from devops.helpers import helpers from proboscis import SkipTest from proboscis.asserts import assert_equal from proboscis.asserts import assert_not_equal @@ -33,6 +35,14 @@ class VMwareActions(object): """VMware vCenter/DVS related actions""" plugin_version = None + vcenter_az = 'vcenter' + cinder_az = 'vcenter-cinder' + vmware_image = 'TestVM-VMDK' + net_name = 'admin_internal_net' + sg_name = 'default' + image_name = None + image_url = None + image_creds = None @deferred_decorator([make_snapshot_if_step_fail]) @action @@ -254,6 +264,268 @@ class VMwareActions(object): self.fuel_web.deploy_cluster_wait(self.cluster_id, check_services=False) + @action + def create_and_attach_empty_volume(self): + """Create and attach to instance empty volume""" + + mount_point = '/dev/sdb' + + public_ip = self.fuel_web.get_public_vip(self.cluster_id) + os_conn = OpenStackActions(public_ip) + + vol = os_conn.create_volume(availability_zone=self.cinder_az) + image = os_conn.get_image(self.vmware_image) + net = os_conn.get_network(self.net_name) + sg = os_conn.get_security_group(self.sg_name) + vm = os_conn.create_server(image=image, + availability_zone=self.vcenter_az, + security_groups=[sg], + net_id=net['id']) + floating_ip = os_conn.assign_floating_ip(vm) + helpers.wait(lambda: helpers.tcp_ping(floating_ip.ip, 22), timeout=180, + timeout_msg="Node {ip} is not accessible by SSH.".format( + ip=floating_ip.ip)) + + logger.info("Attaching volume via cli") + ctrl_nodes = self.fuel_web.get_nailgun_cluster_nodes_by_roles( + self.cluster_id, ["controller"]) + cmd = '. openrc; nova volume-attach {srv_id} {volume_id} {mount}' \ + ''.format(srv_id=vm.id, volume_id=vol.id, mount=mount_point) + logger.debug('CMD: {}'.format(cmd)) + SSHManager().execute_on_remote(ctrl_nodes[0]['ip'], cmd) + + helpers.wait( + lambda: os_conn.get_volume_status(vol) == "in-use", + timeout=30, timeout_msg="Volume doesn't reach 'in-use' state") + + vm.reboot() + sleep(10) + helpers.wait(lambda: helpers.tcp_ping(floating_ip.ip, 22), timeout=180, + timeout_msg="Node {ip} is not accessible by SSH.".format( + ip=floating_ip.ip)) + + controller = self.fuel_web.get_nailgun_cluster_nodes_by_roles( + self.cluster_id, ["controller"])[0] + with self.fuel_web.get_ssh_for_nailgun_node(controller) as remote: + cmd = 'sudo /sbin/fdisk -l | grep {}'.format(mount_point) + res = os_conn.execute_through_host(remote, floating_ip.ip, cmd) + logger.debug('OUTPUT: {}'.format(res)) + assert_equal(res['exit_code'], 0, "Attached volume is not found") + + os_conn.delete_instance(vm) + os_conn.verify_srv_deleted(vm) + os_conn.delete_volume(vol) + + @action + def create_bootable_volume_and_run_instance(self): + """Create bootable volume and launch instance from it""" + + public_ip = self.fuel_web.get_public_vip(self.cluster_id) + os_conn = OpenStackActions(public_ip) + + image = os_conn.get_image(self.vmware_image) + vol = os_conn.create_volume(image_id=image.id, + availability_zone=self.cinder_az) + block_device_mapping = {'vda': vol.id} + + net = os_conn.get_network(self.net_name) + vm = os_conn.create_server(availability_zone=self.vcenter_az, + image=False, + net_id=net['id'], + block_device_mapping=block_device_mapping) + floating_ip = os_conn.assign_floating_ip(vm) + helpers.wait(lambda: helpers.tcp_ping(floating_ip.ip, 22), timeout=180, + timeout_msg="Node {ip} is not accessible by SSH.".format( + ip=floating_ip.ip)) + + os_conn.delete_instance(vm) + os_conn.verify_srv_deleted(vm) + os_conn.delete_volume_and_wait(vol) + + @action + def check_vmware_service_actions(self): + """Disable vmware host (cluster) and check instance creation + on enabled cluster""" + + public_ip = self.fuel_web.get_public_vip(self.cluster_id) + os_conn = OpenStackActions(public_ip) + + services = os_conn.get_nova_service_list() + vmware_services = [] + for service in services: + if service.binary == 'nova-compute' and \ + service.zone == self.vcenter_az: + vmware_services.append(service) + os_conn.disable_nova_service(service) + + image = os_conn.get_image(self.vmware_image) + sg = os_conn.get_security_group(self.sg_name) + net = os_conn.get_network(self.net_name) + + for service in vmware_services: + logger.info("Check {}".format(service.host)) + os_conn.enable_nova_service(service) + vm = os_conn.create_server(image=image, + availability_zone=self.vcenter_az, + net_id=net['id'], security_groups=[sg]) + vm_host = getattr(vm, 'OS-EXT-SRV-ATTR:host') + assert_true(service.host == vm_host, 'Instance was launched on a' + ' disabled vmware cluster') + os_conn.delete_instance(vm) + os_conn.verify_srv_deleted(vm) + os_conn.disable_nova_service(service) + + @action + def upload_image(self): + """Upload vmdk image""" + + controller = self.fuel_web.get_nailgun_cluster_nodes_by_roles( + self.cluster_id, ["controller"])[0] + + cmd_add_img = 'glance image-create --name {0!r} --disk-format vmdk ' \ + '--container-format bare --file {1!r} ' \ + '--property hypervisor_type=vmware ' \ + '--property vmware_adaptertype=lsiLogic ' \ + '--property vmware_disktype=sparse' \ + ''.format(self.image_name, self.image_name) + cmd = '. openrc; test -f {0} || (wget -q {1} && {2})'.format( + self.image_name, self.image_url, cmd_add_img) + SSHManager().execute_on_remote(controller['ip'], cmd) + + public_ip = self.fuel_web.get_public_vip(self.cluster_id) + os_conn = OpenStackActions(public_ip) + image = os_conn.get_image(self.image_name) + + helpers.wait(lambda: os_conn.get_image(image.name).status == 'active', + timeout=60 * 2, timeout_msg='Image is not active') + + @action + def check_instance_creation(self): + """Create instance and check connection""" + + public_ip = self.fuel_web.get_public_vip(self.cluster_id) + os_conn = OpenStackActions(public_ip) + + flavor = os_conn.get_flavor_by_name('m1.small') + if self.image_name: + image = os_conn.get_image(self.image_name) + else: + image = os_conn.get_image(self.vmware_image) + sg = os_conn.get_security_group(self.sg_name) + net = os_conn.get_network(self.net_name) + vm = os_conn.create_server(image=image, + availability_zone=self.vcenter_az, + net_id=net['id'], security_groups=[sg], + flavor_id=flavor.id, timeout=666) + floating_ip = os_conn.assign_floating_ip(vm) + helpers.wait(lambda: helpers.tcp_ping(floating_ip.ip, 22), timeout=180, + timeout_msg="Node {ip} is not accessible by SSH.".format( + ip=floating_ip.ip)) + + os_conn.delete_instance(vm) + os_conn.verify_srv_deleted(vm) + + @action + def create_instance_with_vmxnet3_adapter(self): + """Create instance with vmxnet3 adapter""" + + public_ip = self.fuel_web.get_public_vip(self.cluster_id) + os_conn = OpenStackActions(public_ip) + + image = os_conn.get_image(self.image_name) + os_conn.update_image(image, + properties={"hw_vif_model": "VirtualVmxnet3"}) + flavor = os_conn.get_flavor_by_name('m1.small') + sg = os_conn.get_security_group(self.sg_name) + net = os_conn.get_network(self.net_name) + vm = os_conn.create_server(image=image, + availability_zone=self.vcenter_az, + net_id=net['id'], security_groups=[sg], + flavor_id=flavor.id, timeout=666) + floating_ip = os_conn.assign_floating_ip(vm) + helpers.wait(lambda: helpers.tcp_ping(floating_ip.ip, 22), timeout=180, + timeout_msg="Node {ip} is not accessible by SSH.".format( + ip=floating_ip.ip)) + + controller = self.fuel_web.get_nailgun_cluster_nodes_by_roles( + self.cluster_id, ["controller"])[0] + with self.fuel_web.get_ssh_for_nailgun_node(controller) as remote: + cmd = '/usr/bin/lshw -class network | grep vmxnet3' + res = os_conn.execute_through_host(remote, floating_ip.ip, cmd, + creds=self.image_creds) + logger.debug('OUTPUT: {}'.format(res)) + assert_equal(res['exit_code'], 0, "VMxnet3 driver is not found") + + os_conn.delete_instance(vm) + os_conn.verify_srv_deleted(vm) + + @action + def check_batch_instance_creation(self): + """Create several instance simultaneously""" + + count = 10 + vm_name = 'vcenter_vm' + + public_ip = self.fuel_web.get_public_vip(self.cluster_id) + os_conn = OpenStackActions(public_ip) + + image = os_conn.get_image(self.vmware_image) + net = os_conn.get_network(self.net_name) + sg = os_conn.get_security_group(self.sg_name) + os_conn.create_server(name=vm_name, image=image, + availability_zone=self.vcenter_az, + net_id=net['id'], security_groups=[sg], + min_count=count) + + for i in range(1, count + 1): + vm = os_conn.get_server_by_name('{name}-{index}'.format( + name=vm_name, index=i)) + logger.info("Check state for {} instance".format(vm.name)) + helpers.wait( + lambda: os_conn.get_instance_detail(vm).status == "ACTIVE", + timeout=180, timeout_msg="Instance state is not active" + ) + + for i in range(1, count + 1): + vm = os_conn.get_server_by_name('{name}-{index}'.format( + name=vm_name, index=i)) + os_conn.delete_instance(vm) + os_conn.verify_srv_deleted(vm) + + @action + def create_instance_with_different_disktype(self): + """Create instances with different disk type""" + + public_ip = self.fuel_web.get_public_vip(self.cluster_id) + os_conn = OpenStackActions(public_ip) + + image = os_conn.get_image(self.vmware_image) + net = os_conn.get_network(self.net_name) + + os_conn.update_image(image, + properties={"vmware_disktype": "sparse"}) + vm = os_conn.create_server(image=image, + availability_zone=self.vcenter_az, + net_id=net['id']) + os_conn.delete_instance(vm) + os_conn.verify_srv_deleted(vm) + + os_conn.update_image(image, + properties={"vmware_disktype": "preallocated "}) + vm = os_conn.create_server(image=image, + availability_zone=self.vcenter_az, + net_id=net['id']) + os_conn.delete_instance(vm) + os_conn.verify_srv_deleted(vm) + + os_conn.update_image(image, + properties={"vmware_disktype": "thin "}) + vm = os_conn.create_server(image=image, + availability_zone=self.vcenter_az, + net_id=net['id']) + os_conn.delete_instance(vm) + os_conn.verify_srv_deleted(vm) + @deferred_decorator([make_snapshot_if_step_fail]) @action def check_neutron_public(self): diff --git a/system_test/tests/vcenter/test_vcenter_dvs.py b/system_test/tests/vcenter/test_vcenter_dvs.py index b922ae445..95c0a4775 100644 --- a/system_test/tests/vcenter/test_vcenter_dvs.py +++ b/system_test/tests/vcenter/test_vcenter_dvs.py @@ -14,6 +14,10 @@ from fuelweb_test.settings import DVS_PLUGIN_PATH from fuelweb_test.settings import DVS_PLUGIN_VERSION +from fuelweb_test.settings import VMWARE_IMG_NAME +from fuelweb_test.settings import VMWARE_IMG_URL +from fuelweb_test.settings import VMWARE_IMG_LOGIN +from fuelweb_test.settings import VMWARE_IMG_PASSWORD from system_test import testcase from system_test.tests import ActionTest @@ -288,6 +292,261 @@ class CheckCinderVmwareSrv(ActionTest, BaseActions, VMwareActions): ] +@testcase(groups=['system_test', + 'system_test.vcenter', + 'system_test.vcenter.attach_empty_volume']) +class AttachEmptyVol(ActionTest, BaseActions, VMwareActions): + """Deploy cluster with vCenter and dvs plugin + + Scenario: + 1. Upload plugin to the master node + 2. Install plugin + 3. Create cluster + 4. Configure dvs settings (depends on yaml config) + 5. Add nodes (depends on yaml config) + 6. Configure vmware settings (depends on yaml config) + 7. Deploy the cluster + 8. Create and attach to instance empty volume + + Duration 2h 00min + Snapshot deploy_vcenter_dvs + """ + + plugin_name = "fuel-plugin-vmware-dvs" + plugin_path = DVS_PLUGIN_PATH + plugin_version = DVS_PLUGIN_VERSION + + actions_order = [ + 'prepare_env_with_plugin', + 'create_env', + 'configure_dvs_plugin', + 'add_nodes', + 'configure_vcenter', + 'deploy_cluster', + 'create_and_attach_empty_volume' + ] + + +@testcase(groups=['system_test', + 'system_test.vcenter', + 'system_test.vcenter.bootable_vol']) +class BootableVol(ActionTest, BaseActions, VMwareActions): + """Deploy cluster with vCenter and dvs plugin + + Scenario: + 1. Upload plugin to the master node + 2. Install plugin + 3. Create cluster + 4. Configure dvs settings (depends on yaml config) + 5. Add nodes (depends on yaml config) + 6. Configure vmware settings (depends on yaml config) + 7. Deploy the cluster + 8. Create bootable volume and launch instance from it + + Duration 2h 00min + Snapshot deploy_vcenter_dvs + """ + + plugin_name = "fuel-plugin-vmware-dvs" + plugin_path = DVS_PLUGIN_PATH + plugin_version = DVS_PLUGIN_VERSION + + actions_order = [ + 'prepare_env_with_plugin', + 'create_env', + 'configure_dvs_plugin', + 'add_nodes', + 'configure_vcenter', + 'deploy_cluster', + 'create_bootable_volume_and_run_instance' + ] + + +@testcase(groups=['system_test', + 'system_test.vcenter', + 'system_test.vcenter.disable_enable_compute_service']) +class DisableEnableVMwareServices(ActionTest, BaseActions, VMwareActions): + """Deploy cluster with vCenter and dvs plugin + + Scenario: + 1. Upload plugin to the master node + 2. Install plugin + 3. Create cluster + 4. Configure dvs settings (depends on yaml config) + 5. Add nodes (depends on yaml config) + 6. Configure vmware settings (depends on yaml config) + 7. Deploy the cluster + 8. Disable/enable vmware compute hosts and run instance + + Duration 2h 00min + Snapshot deploy_vcenter_dvs + """ + + plugin_name = "fuel-plugin-vmware-dvs" + plugin_path = DVS_PLUGIN_PATH + plugin_version = DVS_PLUGIN_VERSION + + actions_order = [ + 'prepare_env_with_plugin', + 'create_env', + 'configure_dvs_plugin', + 'add_nodes', + 'configure_vcenter', + 'deploy_cluster', + 'check_vmware_service_actions' + ] + + +@testcase(groups=['system_test', + 'system_test.vcenter', + 'system_test.vcenter.upload_image']) +class UploadImage(ActionTest, BaseActions, VMwareActions): + """Deploy cluster with vCenter and dvs plugin + + Scenario: + 1. Upload plugin to the master node + 2. Install plugin + 3. Create cluster + 4. Configure dvs settings (depends on yaml config) + 5. Add nodes (depends on yaml config) + 6. Configure vmware settings (depends on yaml config) + 7. Deploy the cluster + 8. Upload ubuntu cloud image + 9. Launch instance + + Duration 2h 00min + Snapshot deploy_vcenter_dvs + """ + + plugin_name = "fuel-plugin-vmware-dvs" + plugin_path = DVS_PLUGIN_PATH + plugin_version = DVS_PLUGIN_VERSION + image_name = VMWARE_IMG_NAME + image_url = VMWARE_IMG_URL + image_creds = (VMWARE_IMG_LOGIN, VMWARE_IMG_PASSWORD) + + actions_order = [ + 'prepare_env_with_plugin', + 'create_env', + 'configure_dvs_plugin', + 'add_nodes', + 'configure_vcenter', + 'deploy_cluster', + 'upload_image', + 'check_instance_creation' + ] + + +@testcase(groups=['system_test', + 'system_test.vcenter', + 'system_test.vcenter.vmxnet3']) +class Vmxnet3(ActionTest, BaseActions, VMwareActions): + """Deploy cluster with vCenter and dvs plugin + + Scenario: + 1. Upload plugin to the master node + 2. Install plugin + 3. Create cluster + 4. Configure dvs settings (depends on yaml config) + 5. Add nodes (depends on yaml config) + 6. Configure vmware settings (depends on yaml config) + 7. Deploy the cluster + 8. Upload ubuntu cloud image + 9. Launch instance with vmware vmxnet3 adapter + + Duration 2h 00min + Snapshot deploy_vcenter_dvs + """ + + plugin_name = "fuel-plugin-vmware-dvs" + plugin_path = DVS_PLUGIN_PATH + plugin_version = DVS_PLUGIN_VERSION + image_name = VMWARE_IMG_NAME + image_url = VMWARE_IMG_URL + image_creds = (VMWARE_IMG_LOGIN, VMWARE_IMG_PASSWORD) + + actions_order = [ + 'prepare_env_with_plugin', + 'create_env', + 'configure_dvs_plugin', + 'add_nodes', + 'configure_vcenter', + 'deploy_cluster', + 'upload_image', + 'create_instance_with_vmxnet3_adapter' + ] + + +@testcase(groups=['system_test', + 'system_test.vcenter', + 'system_test.vcenter.create_batch_of_instances']) +class CreateBatchInstances(ActionTest, BaseActions, VMwareActions): + """Deploy cluster with vCenter and dvs plugin + + Scenario: + 1. Upload plugin to the master node + 2. Install plugin + 3. Create cluster + 4. Configure dvs settings (depends on yaml config) + 5. Add nodes (depends on yaml config) + 6. Configure vmware settings (depends on yaml config) + 7. Deploy the cluster + 8. Create several instances simultaneously + + Duration 2h 00min + Snapshot deploy_vcenter_dvs + """ + + plugin_name = "fuel-plugin-vmware-dvs" + plugin_path = DVS_PLUGIN_PATH + plugin_version = DVS_PLUGIN_VERSION + + actions_order = [ + 'prepare_env_with_plugin', + 'create_env', + 'configure_dvs_plugin', + 'add_nodes', + 'configure_vcenter', + 'deploy_cluster', + 'check_batch_instance_creation' + ] + + +@testcase(groups=['system_test', + 'system_test.vcenter', + 'system_test.vcenter.diff_disk_types']) +class DiffDiskTypes(ActionTest, BaseActions, VMwareActions): + """Deploy cluster with vCenter and dvs plugin + + Scenario: + 1. Upload plugin to the master node + 2. Install plugin + 3. Create cluster + 4. Configure dvs settings (depends on yaml config) + 5. Add nodes (depends on yaml config) + 6. Configure vmware settings (depends on yaml config) + 7. Deploy the cluster + 8. Create instances with different disk type + + Duration 2h 00min + Snapshot deploy_vcenter_dvs + """ + + plugin_name = "fuel-plugin-vmware-dvs" + plugin_path = DVS_PLUGIN_PATH + plugin_version = DVS_PLUGIN_VERSION + + actions_order = [ + 'prepare_env_with_plugin', + 'create_env', + 'configure_dvs_plugin', + 'add_nodes', + 'configure_vcenter', + 'deploy_cluster', + 'create_instance_with_different_disktype' + ] + + @testcase(groups=['system_test', 'system_test.vcenter', 'system_test.vcenter.neutron_public_net']) diff --git a/system_test/tests_templates/tests_configs/vcenter_dvs/vmware_roles_local_ds.yaml b/system_test/tests_templates/tests_configs/vcenter_dvs/vmware_roles_local_ds.yaml new file mode 100644 index 000000000..caf63cc05 --- /dev/null +++ b/system_test/tests_templates/tests_configs/vcenter_dvs/vmware_roles_local_ds.yaml @@ -0,0 +1,45 @@ +--- +template: + name: 1 controller, 1 cinder-vmware, 1 compute-vmware on Neutron/VLAN with DVS plugin + slaves: 3 + cluster_template: + name: vcenter_roles_local_ds + release: ubuntu + network: + !include cluster_configs/networks/neutron_vlan.yaml + settings: + components: + !include cluster_configs/settings/components/wo_components.yaml + storages: + !include cluster_configs/settings/storages/cinder_only.yaml + vmware_vcenter: + settings: + !include cluster_configs/settings/vmware/vcenter_main.yaml + nova-compute: + - cluster: Cluster1 + srv_name: srv_cluster1 + datastore: datastore1 + target_node: controllers + - cluster: Cluster2 + srv_name: srv_cluster2 + datastore: datastore1 + target_node: compute-vmware + glance: + enable: false + vmware_dvs: + !include cluster_configs/settings/vmware/dvs/dvs_main.yaml + nodes: + - roles: + - controller + iface: !include cluster_configs/settings/vmware/vcenter_ifaces.yaml + count: 1 + + - roles: + - cinder-vmware + iface: !include cluster_configs/settings/vmware/vcenter_ifaces.yaml + count: 1 + + - roles: + - compute-vmware + iface: !include cluster_configs/settings/vmware/vcenter_ifaces.yaml + count: 1