mirror of https://github.com/apache/cloudstack.git
Test script to verify vm deployment with two networks in SG enabled advanced zone
Test data to deploy new data center and execute test using the deployed zone Signed-off-by: sanjeev <sanjeev@apache.org> Incorporated review comments provided in RR 25097 Fixed review comments mentioned in RR25293 Conflicts: tools/marvin/marvin/config/test_data.py
This commit is contained in:
parent
e5efa702bb
commit
9e5da759b3
|
|
@ -29,26 +29,35 @@ from marvin.lib.base import (Zone,
|
|||
VpcOffering,
|
||||
VPC,
|
||||
SecurityGroup,
|
||||
Host)
|
||||
Host,
|
||||
)
|
||||
|
||||
from marvin.lib.common import (get_domain,
|
||||
get_zone,
|
||||
get_template,
|
||||
get_free_vlan,
|
||||
list_virtual_machines,
|
||||
wait_for_cleanup)
|
||||
wait_for_cleanup,
|
||||
)
|
||||
|
||||
from marvin.lib.utils import (cleanup_resources,
|
||||
random_gen,
|
||||
validateList)
|
||||
validateList,)
|
||||
from marvin.cloudstackAPI import (authorizeSecurityGroupIngress,
|
||||
revokeSecurityGroupIngress,
|
||||
deleteSecurityGroup)
|
||||
deleteSecurityGroup,
|
||||
listCapacity)
|
||||
from marvin import deployDataCenter
|
||||
from nose.plugins.attrib import attr
|
||||
from marvin.codes import PASS
|
||||
from marvin.codes import PASS,FAIL,FAILED
|
||||
from netaddr import iter_iprange
|
||||
import time
|
||||
import sys
|
||||
import random
|
||||
import json
|
||||
import os
|
||||
from platform import system
|
||||
|
||||
|
||||
class TestCreateZoneSG(cloudstackTestCase):
|
||||
|
||||
|
|
@ -1251,6 +1260,59 @@ class TestNetworksInAdvancedSG_VmOperations(cloudstackTestCase):
|
|||
|
||||
return
|
||||
|
||||
def dump_config_deploy_DC(self):
|
||||
configLines = []
|
||||
#Read zone and ip range information from config file
|
||||
file = self.services["test_34_DeployVM_in_SecondSGNetwork"]["config"]
|
||||
with open(file, 'r') as fp:
|
||||
for line in fp:
|
||||
ws = line.strip()
|
||||
if not ws.startswith("#"):
|
||||
configLines.append(ws)
|
||||
config = json.loads("\n".join(configLines))
|
||||
config['zones'][0]['name'] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["zone"]
|
||||
config['zones'][0]['ipranges'][0]['startip'] = \
|
||||
self.services["test_34_DeployVM_in_SecondSGNetwork"]["ipranges"][0]["startip"]
|
||||
config['zones'][0]['ipranges'][0]['endip'] = \
|
||||
self.services["test_34_DeployVM_in_SecondSGNetwork"]["ipranges"][0]["endip"]
|
||||
config['zones'][0]['ipranges'][0]['vlan'] = \
|
||||
self.services["test_34_DeployVM_in_SecondSGNetwork"]["ipranges"][0]["vlan"]
|
||||
config['zones'][0]['ipranges'][0]['gateway'] = \
|
||||
self.services["test_34_DeployVM_in_SecondSGNetwork"]["ipranges"][0]["gateway"]
|
||||
config["dbSvr"]["dbSvr"] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["dbSvr"]["dbSvr"]
|
||||
config["dbSvr"]["passwd"] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["dbSvr"]["passwd"]
|
||||
config["dbSvr"]["db"] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["dbSvr"]["db"]
|
||||
config["dbSvr"]["port"] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["dbSvr"]["port"]
|
||||
config["dbSvr"]["user"] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["dbSvr"]["user"]
|
||||
config['mgtSvr'][0]['mgtSvrIp'] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["mgtSvr"][0]["mgtSvrIp"]
|
||||
config['mgtSvr'][0]["passwd"] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["mgtSvr"][0]["passwd"]
|
||||
config['mgtSvr'][0]["user"] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["mgtSvr"][0]["user"]
|
||||
config['mgtSvr'][0]["port"] = self.services["test_34_DeployVM_in_SecondSGNetwork"]["mgtSvr"][0]["port"]
|
||||
config['zones'][0]['pods'][0]['clusters'][0]['primaryStorages'][0]['url'] = \
|
||||
"nfs://10.147.28.6:/export/home/sandbox/primary_"+str(random.randrange(0,1000,3))
|
||||
config['zones'][0]['pods'][0]['clusters'][0]['primaryStorages'][0]['name'] = \
|
||||
"PS_"+str(random.randrange(0,1000,3))
|
||||
config['zones'][0]['secondaryStorages'][0]['url'] = \
|
||||
"nfs://10.147.28.6:/export/home/sandbox/sstor_"+str(random.randrange(0,1000,3))
|
||||
if system().lower() != 'windows':
|
||||
config_file = "/tmp/advsg.cfg"
|
||||
with open(config_file, 'w+') as fp:
|
||||
fp.write(json.dump(config, indent=4))
|
||||
cfg_file = file.split('/')[-1]
|
||||
file2 = file.replace("/setup/dev/advanced/"+cfg_file, "")
|
||||
file2 = file2+"/tools/marvin/marvin/deployDataCenter.py"
|
||||
else :
|
||||
config_file = "D:\\advsg.cfg"
|
||||
with open(config_file, 'w+') as fp:
|
||||
fp.write(json.dumps(config, indent=4))
|
||||
cfg_file = file.split('\\')[-1]
|
||||
file2 = file.replace("\setup\dev\\"+cfg_file, "")
|
||||
file2 = file2+"\\tools\marvin\marvin\deployDataCenter.py"
|
||||
#Run deployDataCenter with new config file stored in \tmp
|
||||
self.debug("Executing deployAndRun")
|
||||
status = os.system("%s -i %s" %(file2, config_file))
|
||||
return status
|
||||
|
||||
@attr(tags = ["advancedsg"])
|
||||
def test__16_AccountSpecificNwAccess(self):
|
||||
""" Test account specific network access of users"""
|
||||
|
|
@ -2078,6 +2140,131 @@ class TestNetworksInAdvancedSG_VmOperations(cloudstackTestCase):
|
|||
self.assertEqual(vm_list[0].hostid, hosts_to_migrate[0].id, "VM host id does not reflect the migration")
|
||||
return
|
||||
|
||||
@attr(tags=["advancedsg"], required_hardware="false")
|
||||
def test_34_DeployVM_in_SecondSGNetwork(self):
|
||||
"""
|
||||
@Desc: VM Cannot deploy to second network in advanced SG network
|
||||
@step1:Create shared SG network1
|
||||
@step2: Consume all ip addresses in network1
|
||||
@step3: Create shared SG network2
|
||||
@step4: Deploy vm without specifying the network id
|
||||
@step5: Verify that vm deployment should pick network2 and should not fail by picking network1
|
||||
"""
|
||||
#Deploy data center with custom data
|
||||
status = self.dump_config_deploy_DC()
|
||||
if status == 1:
|
||||
self.fail("Deploy DataCenter failed.")
|
||||
zone_list = Zone.list(
|
||||
self.api_client,
|
||||
name=self.services["test_34_DeployVM_in_SecondSGNetwork"]["zone"]
|
||||
)
|
||||
status = validateList(zone_list)
|
||||
self.assertEquals(status[0],PASS,"Failed to list the zones")
|
||||
count = 0
|
||||
"""
|
||||
In simulator environment default guest os template should be in ready state immediately after the ssvm is up.
|
||||
In worst case test would wait for 100sec for the template to get ready else it would fail.
|
||||
"""
|
||||
while (count < 10):
|
||||
time.sleep(10)
|
||||
template = get_template(
|
||||
self.api_client,
|
||||
zone_list[0].id
|
||||
)
|
||||
if template != FAILED and str(template.isready).lower() == 'true':
|
||||
break
|
||||
else:
|
||||
count=count+1
|
||||
if count == 10:
|
||||
self.fail("Template is not in ready state even after 100sec. something wrong with the SSVM")
|
||||
self.debug("Creating virtual machine in default shared network to consume all IPs")
|
||||
vm_1 = VirtualMachine.create(
|
||||
self.api_client,
|
||||
self.services["virtual_machine"],
|
||||
templateid=template.id,
|
||||
zoneid=zone_list[0].id,
|
||||
serviceofferingid=self.service_offering.id
|
||||
)
|
||||
self.assertIsNotNone(vm_1,"Failed to deploy vm in default shared network")
|
||||
self.cleanup_vms.append(vm_1)
|
||||
#verify that all the IPs are consumed in the default shared network
|
||||
cmd = listCapacity.listCapacityCmd()
|
||||
cmd.type=8
|
||||
cmd.zoneid = zone_list[0].id
|
||||
cmd.fetchlatest='true'
|
||||
count = 0
|
||||
"""
|
||||
Created zone with only 4 guest IP addresses so limiting the loop count to 4
|
||||
"""
|
||||
while count < 5:
|
||||
listCapacityRes = self.api_client.listCapacity(cmd)
|
||||
self.assertEqual(validateList(listCapacityRes)[0],PASS,"listCapacity returned invalid list")
|
||||
percentused = listCapacityRes[0].percentused
|
||||
if percentused == '100':
|
||||
break
|
||||
self.debug("Creating virtual machine in default shared network to consume all IPs")
|
||||
vm = VirtualMachine.create(
|
||||
self.api_client,
|
||||
self.services["virtual_machine"],
|
||||
templateid=template.id,
|
||||
zoneid=zone_list[0].id,
|
||||
serviceofferingid=self.service_offering.id
|
||||
)
|
||||
self.assertIsNotNone(vm,"Failed to deploy vm in default shared network")
|
||||
self.cleanup_vms.append(vm)
|
||||
count = count+1
|
||||
if count == 5:
|
||||
self.fail("IPs are not getting consumed. Please check the setup")
|
||||
#Create another SG enabled shared network after consuming all IPs
|
||||
self.services["shared_network_sg"]["acltype"] = "domain"
|
||||
self.services["shared_network_sg"]["networkofferingid"] = self.shared_network_offering_sg.id
|
||||
physical_network, vlan = get_free_vlan(self.api_client, zone_list[0].id)
|
||||
#create network using the shared network offering created
|
||||
self.services["shared_network_sg"]["vlan"] = vlan
|
||||
self.services["shared_network_sg"]["physicalnetworkid"] = physical_network.id
|
||||
nwIPs = 3
|
||||
self.setSharedNetworkParams("shared_network_sg", range=nwIPs)
|
||||
self.debug("Creating shared sg network1 with vlan %s" % vlan)
|
||||
shared_network = Network.create(
|
||||
self.api_client,
|
||||
self.services["shared_network_sg"],
|
||||
networkofferingid=self.shared_network_offering_sg.id,
|
||||
zoneid=zone_list[0].id
|
||||
)
|
||||
self.assertIsNotNone(shared_network,"shared SG network1 creation failed")
|
||||
self.cleanup_networks.append(shared_network)
|
||||
# Deploying 1 VM will exhaust the IP range because we are passing range as 2, and one of the IPs
|
||||
# already gets consumed by the virtual router of the shared network
|
||||
self.debug("Deploying vm2 without passing network id after consuming all IPs from default shared nw")
|
||||
try:
|
||||
vm_2 = VirtualMachine.create(
|
||||
self.api_client,
|
||||
self.services["virtual_machine"],
|
||||
templateid=template.id,
|
||||
zoneid=zone_list[0].id,
|
||||
serviceofferingid=self.service_offering.id
|
||||
)
|
||||
vm2_res = VirtualMachine.list(
|
||||
self.api_client,
|
||||
id=vm_2.id
|
||||
)
|
||||
self.assertEqual(validateList(vm2_res)[0],PASS,"Failed to list vms in new network")
|
||||
vm_ip = vm2_res[0].nic[0].ipaddress
|
||||
ips_in_new_network = []
|
||||
ip_gen = iter_iprange(
|
||||
self.services["shared_network_sg"]["startip"],
|
||||
self.services["shared_network_sg"]["endip"]
|
||||
)
|
||||
#construct ip list using start and end ips in the network
|
||||
for i in range(0,nwIPs):
|
||||
ips_in_new_network.append(str(ip_gen.next()))
|
||||
if vm_ip not in ips_in_new_network:
|
||||
self.fail("vm did not get the ip from new SG enabled shared network")
|
||||
self.cleanup_vms.append(vm_2)
|
||||
except Exception as e:
|
||||
self.fail("Failed to deploy vm with two advanced sg networks %s" % e)
|
||||
return
|
||||
|
||||
class TestSecurityGroups_BasicSanity(cloudstackTestCase):
|
||||
|
||||
@classmethod
|
||||
|
|
|
|||
|
|
@ -940,7 +940,7 @@ test_data = {
|
|||
"name": "hostantiaffinity",
|
||||
"type": "host anti-affinity",
|
||||
},
|
||||
"vgpu":{
|
||||
"vgpu":{
|
||||
"disk_offering":{
|
||||
"displaytext": "Small",
|
||||
"name": "Small",
|
||||
|
|
@ -1180,8 +1180,6 @@ test_data = {
|
|||
"username": "testD12B",
|
||||
"password": "password",
|
||||
},
|
||||
|
||||
|
||||
"domain2": {
|
||||
"name": "D2",
|
||||
},
|
||||
|
|
@ -1200,7 +1198,6 @@ test_data = {
|
|||
"username": "testD2A",
|
||||
"password": "password",
|
||||
},
|
||||
|
||||
"accountROOTA": {
|
||||
"email": "testROOTA@test.com",
|
||||
"firstname": "testROOTA",
|
||||
|
|
@ -1346,8 +1343,7 @@ test_data = {
|
|||
"username": "rmurphy",
|
||||
"password": "internalcloudstackpassword",
|
||||
},
|
||||
"ldapConfiguration_1":
|
||||
{
|
||||
"ldapConfiguration_1": {
|
||||
"basedn": "dc=cloudstack,dc=org",
|
||||
"emailAttribute": "mail",
|
||||
"userObject": "inetOrgPerson",
|
||||
|
|
@ -1356,5 +1352,36 @@ test_data = {
|
|||
"port": "10389",
|
||||
"ldapUsername": "rmurphy",
|
||||
"ldapPassword": "password"
|
||||
}
|
||||
},
|
||||
|
||||
"test_34_DeployVM_in_SecondSGNetwork": {
|
||||
"zone": "advsg",
|
||||
"config": "D:\ACS-Repo\setup\dev\\advancedsg.cfg",#Absolute path to cfg file
|
||||
#For sample configuration please refer to <ACS repo>/setup/dev/advancedsg.cfg
|
||||
"template": "CentOS 5.3(64-bit) no GUI (Simulator)",
|
||||
"dbSvr": {
|
||||
"dbSvr": "10.146.0.133",
|
||||
"passwd": "cloud",
|
||||
"db": "cloud",
|
||||
"port": 3306,
|
||||
"user": "cloud"
|
||||
},
|
||||
"mgtSvr": [
|
||||
{
|
||||
"mgtSvrIp": "10.146.0.133",
|
||||
"passwd": "password",
|
||||
"user": "root",
|
||||
"port": 8096
|
||||
}
|
||||
],
|
||||
"ipranges": [
|
||||
{
|
||||
"startip": "10.147.32.150",
|
||||
"endip": "10.147.32.153",
|
||||
"netmask": "255.255.255.0",
|
||||
"vlan": "32",
|
||||
"gateway": "10.147.32.1"
|
||||
}
|
||||
]
|
||||
},
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue