vCenter tests with OpenStack actions for cinder and nova
Change-Id: If98635479026b4df60354904e543b18d3abc81d4
Closes-bug: #1570048
(cherry picked from commit 0811713cc7
)
This commit is contained in:
parent
58b037531c
commit
4fe37b2a66
@ -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)
|
||||
|
||||
|
@ -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')
|
||||
|
@ -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):
|
||||
|
@ -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'])
|
||||
|
@ -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
|
Loading…
Reference in New Issue
Block a user