diff --git a/deps/install-non-oss.sh b/deps/install-non-oss.sh
index 2f5027cd4c0..ee7482d17ee 100755
--- a/deps/install-non-oss.sh
+++ b/deps/install-non-oss.sh
@@ -38,3 +38,6 @@ mvn install:install-file -Dfile=vim25_55.jar -DgroupId=com.cloud.com.vmwa
# From https://my.vmware.com VMware-vSphere-SDK-6.0.0-3634981.zip
mvn install:install-file -Dfile=vim25_60.jar -DgroupId=com.cloud.com.vmware -DartifactId=vmware-vim25 -Dversion=6.0 -Dpackaging=jar
+
+# From https://my.vmware.com/group/vmware/get-download?downloadGroup=VS-MGMT-SDK65
+mvn install:install-file -Dfile=vim25_65.jar -DgroupId=com.cloud.com.vmware -DartifactId=vmware-vim25 -Dversion=6.5 -Dpackaging=jar
diff --git a/plugins/network-elements/nuage-vsp/pom.xml b/plugins/network-elements/nuage-vsp/pom.xml
index 5a0a5317a1f..75ce01e9ec7 100644
--- a/plugins/network-elements/nuage-vsp/pom.xml
+++ b/plugins/network-elements/nuage-vsp/pom.xml
@@ -35,7 +35,7 @@
- 1.0.7
+ 1.0.8
diff --git a/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/guru/NuageVspGuestNetworkGuru.java b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/guru/NuageVspGuestNetworkGuru.java
index b17840c194d..9ecefe49087 100644
--- a/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/guru/NuageVspGuestNetworkGuru.java
+++ b/plugins/network-elements/nuage-vsp/src/main/java/com/cloud/network/guru/NuageVspGuestNetworkGuru.java
@@ -763,17 +763,17 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru implements Networ
s_logger.debug("Handling trash() call back to delete the network " + network.getName() + " with uuid " + network.getUuid() + " from VSP");
}
+ VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(network);
+
boolean networkMigrationCopy = network.getRelated() != network.getId();
- cleanUpNetworkCaching(network.getId());
if (networkMigrationCopy) {
if (s_logger.isDebugEnabled()) {
s_logger.debug("Network " + network.getName() + " is a copy of a migrated network. Cleaning up network details of related network.");
}
cleanUpNetworkCaching(network.getRelated());
}
-
- VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(network);
+ cleanUpNetworkCaching(network.getId());
//Clean up VSD managed subnet caching
if (vspNetwork.getNetworkRelatedVsdIds().isVsdManaged()) {
@@ -803,6 +803,7 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru implements Networ
_networkDetailsDao.removeDetail(id, NuageVspManager.NETWORK_METADATA_VSD_DOMAIN_ID);
_networkDetailsDao.removeDetail(id, NuageVspManager.NETWORK_METADATA_VSD_ZONE_ID);
_networkDetailsDao.removeDetail(id, NuageVspManager.NETWORK_METADATA_VSD_SUBNET_ID);
+ _networkDetailsDao.removeDetail(id, NuageVspManager.NETWORK_METADATA_VSD_MANAGED);
}
private boolean networkHasDns(Network network) {
diff --git a/pom.xml b/pom.xml
index b1ff1021af1..6c4f828bef9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -87,7 +87,7 @@
1.2
1.2.1
1.0-20081010.060147
- 6.0
+ 6.5
5.0.2.RELEASE
1.10.19
1.6.4
diff --git a/test/integration/plugins/nuagevsp/nuageTestCase.py b/test/integration/plugins/nuagevsp/nuageTestCase.py
index 5df0754a360..5300e6efa29 100644
--- a/test/integration/plugins/nuagevsp/nuageTestCase.py
+++ b/test/integration/plugins/nuagevsp/nuageTestCase.py
@@ -18,6 +18,7 @@
""" Custom base class for Nuage VSP SDN plugin specific Marvin tests
"""
# Import Local Modules
+from bambou.nurest_object import NURESTObject
from marvin.cloudstackTestCase import cloudstackTestCase, unittest
from marvin.lib.base import (Domain,
EgressFireWallRule,
@@ -313,6 +314,8 @@ class nuageTestCase(cloudstackTestCase):
try:
if isinstance(obj, VirtualMachine):
obj.delete(self.api_client, expunge=True)
+ elif isinstance(obj, NURESTObject):
+ obj.delete()
else:
obj.delete(self.api_client)
except Exception as e:
diff --git a/test/integration/plugins/nuagevsp/test_nuage_vsp_mngd_subnets.py b/test/integration/plugins/nuagevsp/test_nuage_vsp_mngd_subnets.py
index ebbcccb7fc0..de4a9f5722f 100644
--- a/test/integration/plugins/nuagevsp/test_nuage_vsp_mngd_subnets.py
+++ b/test/integration/plugins/nuagevsp/test_nuage_vsp_mngd_subnets.py
@@ -19,8 +19,9 @@
with Nuage VSP SDN plugin
"""
# Import Local Modules
-from nuageTestCase import nuageTestCase
+from nuageTestCase import nuageTestCase, needscleanup
from marvin.lib.base import (Account,
+ Domain,
VirtualMachine)
from marvin.cloudstackAPI import updateZone
@@ -125,27 +126,57 @@ class TestNuageManagedSubnets(nuageTestCase):
if not successfull_ping:
self.fail("FAILED TEST as excepted value not found in vm")
- def tearDown(self):
- super(TestNuageManagedSubnets, self).tearDown()
- # Cleanup resources used
- self.debug("Cleaning up the resources")
- for obj in reversed(self.cleanup):
- try:
- if isinstance(obj, VirtualMachine):
- obj.delete(self.api_client, expunge=True)
- else:
- obj.delete(self.api_client)
- except Exception as e:
- self.error("Failed to cleanup %s, got %s" % (obj, e))
- # cleanup_resources(self.api_client, self.cleanup)
- self.cleanup = []
- self.debug("Cloudstack Cleanup complete!")
- enterprise = self.fetch_by_externalID(self._session.user.enterprises,
- self.domain)
- domain_template = enterprise.domain_templates.get_first()
- domain_template.delete()
- self.debug("VSD Cleanup complete!")
- return
+ def verify_pingtovmhostname(self, ssh, pingtovmhostname):
+ """verify ping to hostname of the vm and retry 3 times"""
+ successfull_ping = False
+ nbr_retries = 0
+ max_retries = 5
+ cmd = 'ping -c 2 ' + pingtovmhostname
+
+ while not successfull_ping and nbr_retries < max_retries:
+ self.debug("ping vm by hostname with command: " + cmd)
+ outputlist = ssh.execute(cmd)
+ self.debug("command is executed properly " + cmd)
+ completeoutput = str(outputlist).strip('[]')
+ self.debug("complete output is " + completeoutput)
+ if '2 received' in completeoutput:
+ self.debug("PASS as vm is pingeable: " + completeoutput)
+ successfull_ping = True
+ else:
+ self.debug("FAIL as vm is not pingeable: " + completeoutput)
+ time.sleep(3)
+ nbr_retries = nbr_retries + 1
+
+ if not successfull_ping:
+ self.fail("FAILED TEST as excepted value not found in vm")
+
+ # verify_vsd_vm - Verifies the given CloudStack VM deployment and status in
+ # VSD
+ def verify_vsdmngd_vm(self, vm, vsdmngd_subnet, stopped=False):
+ self.debug("Verifying the deployment and state of VSD Managed VM "
+ "- %s in VSD" % vm.name)
+ vsd_vm = self.vsd.get_vm(filter=self.get_externalID_filter(vm.id))
+ self.assertNotEqual(vsd_vm, None,
+ "VM data format in VSD should not be of type None"
+ )
+ vm_info = VirtualMachine.list(self.api_client, id=vm.id)[0]
+ for nic in vm_info.nic:
+ vsd_subnet = vsdmngd_subnet
+ vsd_vport = self.vsd.get_vport(
+ subnet=vsd_subnet, filter=self.get_externalID_filter(nic.id))
+ vsd_vm_interface = self.vsd.get_vm_interface(
+ filter=self.get_externalID_filter(nic.id))
+ self.assertEqual(vsd_vport.active, True,
+ "VSD VM vport should be active"
+ )
+ self.assertEqual(vsd_vm_interface.ip_address, nic.ipaddress,
+ "VSD VM interface IP address should match VM's "
+ "NIC IP address in CloudStack"
+ )
+ if not self.isSimulator:
+ self.verify_vsd_object_status(vm, stopped)
+ self.debug("Successfully verified the deployment and state of VM - %s "
+ "in VSD" % vm.name)
@attr(tags=["advanced", "nuagevsp", "isonw"], required_hardware="false")
def test_01_nuage_mngd_subnets_isonw(self):
@@ -162,6 +193,7 @@ class TestNuageManagedSubnets(nuageTestCase):
# specifying the stored Subnet ID's of VSP
# 4. Verify ACL rules and connectivity via deploying VM's ,
# Enabling staticNAT, applying firewall and egress rules
+ # 5. Verify negative tests like uniqueness of vsd subnet
# Create all items on vsd required for this test
enterprise = self.fetch_by_externalID(self._session.user.enterprises,
@@ -175,6 +207,7 @@ class TestNuageManagedSubnets(nuageTestCase):
zone1 = self.create_vsd_zone(domain1, "ZoneToBeConsumedByACS")
subnet1 = self.create_vsd_subnet(zone1, "SubnetToBeConsumedByACS",
"10.0.0.1/24")
+ self.create_vsd_dhcp_option(subnet1, 15, ["nuagenetworks1.net"])
domain2 = self.create_vsd_domain(domain_template, enterprise,
"2ndL3DomainToBeConsumedByACS")
@@ -182,43 +215,433 @@ class TestNuageManagedSubnets(nuageTestCase):
subnet2 = self.create_vsd_subnet(zone2, "2ndSubnetToBeConsumedByACS",
"10.1.0.1/24")
+ self.create_vsd_dhcp_option(subnet2, 15, ["nuagenetworks2.net"])
+
domain3 = self.create_vsd_domain(domain_template, enterprise,
"3rdL3DomainToBeConsumedByACS")
zone3 = self.create_vsd_zone(domain3, "3rdZoneToBeConsumedByACS")
subnet3 = self.create_vsd_subnet(zone3, "3rdSubnetToBeConsumedByACS",
"10.2.0.1/24")
+ for i in range(1, 3):
+ # On ACS create network using non-persistent nw offering allow
+ isolated_network = self.create_Network(
+ self.nuage_isolated_network_offering,
+ gateway="10.0.0.1", netmask="255.255.255.0",
+ externalid=subnet1.id)
+
+ # On ACS create network using persistent nw offering allow
+ isolated_network2 = self.create_Network(
+ self.nuage_isolated_network_offering_persistent,
+ gateway="10.5.0.1", netmask="255.255.255.0",
+ externalid=subnet2.id)
+
+ with self.assertRaises(Exception):
+ self.create_Network(
+ self.nuage_shared_network_offering, gateway="10.2.0.1",
+ netmask="255.255.255.0", vlan=1201, externalid=subnet3.id)
+
+ # On ACS create network when VSDSubnet is already in use
+ with self.assertRaises(Exception):
+ self.create_Network(
+ self.nuage_isolated_network_offering_persistent,
+ gateway="10.3.0.1", netmask="255.255.255.0",
+ externalid=subnet2.id)
+
+ # On ACS create network when VSDSubnet is non-existing
+ with self.assertRaises(Exception):
+ self.create_Network(
+ self.nuage_isolated_network_offering_persistent,
+ gateway="10.4.0.1", netmask="255.255.255.0",
+ externalid=subnet2.id+1)
+
+ # verify floating ip and intra subnet connectivity
+ vm_1 = self.create_VM(isolated_network)
+
+ self.test_data["virtual_machine"]["displayname"] = "vm2"
+ self.test_data["virtual_machine"]["name"] = "vm2"
+ vm_2 = self.create_VM(isolated_network)
+ self.test_data["virtual_machine"]["displayname"] = None
+ self.test_data["virtual_machine"]["name"] = None
+
+ # VSD verification
+ self.verify_vsd_network_not_present(isolated_network)
+ self.verify_vsdmngd_vm(vm_1, subnet1)
+ self.verify_vsdmngd_vm(vm_2, subnet1)
+ self.debug("Creating Static NAT rule for the deployed VM in the "
+ "non persistently created Isolated network...")
+ public_ip = self.acquire_PublicIPAddress(isolated_network)
+ self.validate_PublicIPAddress(public_ip, isolated_network)
+ self.create_StaticNatRule_For_VM(vm_1, public_ip, isolated_network)
+ self.validate_PublicIPAddress(
+ public_ip, isolated_network, static_nat=True, vm=vm_1)
+ self.create_FirewallRule(public_ip,
+ self.test_data["ingress_rule"])
+ if not self.isSimulator:
+ vm_public_ip = public_ip.ipaddress.ipaddress
+ try:
+ vm_1.ssh_ip = vm_public_ip
+ vm_1.ssh_port = \
+ self.test_data["virtual_machine"]["ssh_port"]
+ vm_1.username = \
+ self.test_data["virtual_machine"]["username"]
+ vm_1.password = \
+ self.test_data["virtual_machine"]["password"]
+ self.debug("SSHing into VM: %s with %s" %
+ (vm_1.ssh_ip, vm_1.password))
+
+ ssh = vm_1.get_ssh_client(ipaddress=vm_public_ip)
+
+ except Exception as e:
+ self.fail("SSH into VM failed with exception %s" % e)
+
+ self.verify_pingtovmipaddress(ssh, vm_2.ipaddress)
+ self.verify_pingtovmhostname(ssh, "vm2")
+
+ vm_3 = self.create_VM(isolated_network2)
+ self.test_data["virtual_machine"]["displayname"] = "vm4"
+ self.test_data["virtual_machine"]["name"] = "vm4"
+ vm_4 = self.create_VM(isolated_network2)
+ self.test_data["virtual_machine"]["displayname"] = None
+ self.test_data["virtual_machine"]["name"] = None
+ self.verify_vsd_network_not_present(isolated_network2)
+ self.verify_vsdmngd_vm(vm_3, subnet2)
+ self.verify_vsdmngd_vm(vm_4, subnet2)
+ self.debug("Creating Static NAT rule for the deployed VM in the "
+ "persistently created Isolated network...")
+ public_ip2 = self.acquire_PublicIPAddress(isolated_network2)
+ self.validate_PublicIPAddress(public_ip2, isolated_network2)
+ self.create_StaticNatRule_For_VM(vm_3, public_ip2,
+ isolated_network2)
+ self.validate_PublicIPAddress(
+ public_ip2, isolated_network2, static_nat=True, vm=vm_3)
+ self.create_FirewallRule(public_ip2,
+ self.test_data["ingress_rule"])
+
+ if not self.isSimulator:
+ vm_public_ip2 = public_ip2.ipaddress.ipaddress
+ try:
+ vm_3.ssh_ip = vm_public_ip2
+ vm_3.ssh_port = \
+ self.test_data["virtual_machine"]["ssh_port"]
+ vm_3.username = \
+ self.test_data["virtual_machine"]["username"]
+ vm_3.password = \
+ self.test_data["virtual_machine"]["password"]
+ self.debug("SSHing into VM: %s with %s" %
+ (vm_3.ssh_ip, vm_3.password))
+
+ ssh2 = vm_3.get_ssh_client(ipaddress=vm_public_ip2)
+
+ except Exception as e:
+ self.fail("SSH into VM failed with exception %s" % e)
+
+ self.verify_pingtovmipaddress(ssh2, vm_4.ipaddress)
+ self.verify_pingtovmhostname(ssh2, "vm4")
+
+ vm_1.delete(self.api_client, expunge=True)
+ vm_2.delete(self.api_client, expunge=True)
+ isolated_network.delete(self.api_client)
+ vm_3.delete(self.api_client, expunge=True)
+ vm_4.delete(self.api_client, expunge=True)
+ isolated_network2.delete(self.api_client)
+ self.debug("Number of loops %s" % i)
+
+ @attr(tags=["advanced", "nuagevsp", "vpc"], required_hardware="false")
+ def test_02_nuage_mngd_subnets_vpc(self):
+ """Test Nuage VSP Managed Subnets for vpc and tier networks
+ """
+
+ # 1. Create multiple L3DomainTemplate with Zone and Subnet on VSP
+ # Create Ingress & Egress ACL Top & Bottom Templates
+ # Add ACL rules to allow intra-subnet traffic
+ # Instiantiate these L3Domains and store its Subnet VSD ID
+ # 2. Create a vpc network offering and create a VPC
+ # create vpc tier network offerings with and without VirtualRouter
+ # 3. Create vpc tier networks specifying above offerings and
+ # specifying the stored Subnet ID's of VSP
+ # 4. Verify ACL rules and connectivity via deploying VM's ,
+ # Enabling staticNAT, applying firewall and egress rules
+ # 5. Verify negative tests like uniqueness of vsd subnet
+
+ # Create all items on vsd required for this test
+ enterprise = self.fetch_by_externalID(self._session.user.enterprises,
+ self.domain)
+ domain_template = self.create_vsd_domain_template(enterprise)
+
+ self.create_vsd_default_acls(domain_template)
+
+ domain1 = self.create_vsd_domain(domain_template, enterprise,
+ "L3DomainToBeConsumedByACS")
+ zone1 = self.create_vsd_zone(domain1, "ZoneToBeConsumedByACS")
+ subnet1 = self.create_vsd_subnet(zone1, "SubnetToBeConsumedByACS",
+ "10.1.0.1/24")
+ subnet2 = self.create_vsd_subnet(zone1, "2ndSubnetToBeConsumedByACS",
+ "10.1.128.1/24")
+
+ domain2 = self.create_vsd_domain(domain_template, enterprise,
+ "2ndL3DomainToBeConsumedByACS")
+ zone2 = self.create_vsd_zone(domain2, "2ndZoneToBeConsumedByACS")
+ subnet3 = self.create_vsd_subnet(zone2, "3rdSubnetToBeConsumedByACS",
+ "10.2.128.1/24")
+
+ cmd = updateZone.updateZoneCmd()
+ cmd.id = self.zone.id
+ cmd.domain = "vpc.com"
+ self.api_client.updateZone(cmd)
+ self.debug("Creating a VPC with Static NAT service provider as "
+ "VpcVirtualRouter")
+ vpc = self.create_Vpc(self.nuage_vpc_offering, cidr='10.1.0.0/16')
+ self.validate_Vpc(vpc, state="Enabled")
+ acl_list = self.create_NetworkAclList(
+ name="acl", description="acl", vpc=vpc)
+ self.create_NetworkAclRule(
+ self.test_data["ingress_rule"], acl_list=acl_list)
+ self.create_NetworkAclRule(
+ self.test_data["icmprule"], acl_list=acl_list)
+
+ self.debug("Creating another VPC with Static NAT service provider "
+ "as VpcVirtualRouter")
+ vpc2 = self.create_Vpc(self.nuage_vpc_offering, cidr='10.2.0.0/16')
+ self.validate_Vpc(vpc2, state="Enabled")
+ acl_list2 = self.create_NetworkAclList(
+ name="acl", description="acl", vpc=vpc2)
+ self.create_NetworkAclRule(
+ self.test_data["ingress_rule"], acl_list=acl_list2)
+ self.create_NetworkAclRule(
+ self.test_data["icmprule"], acl_list=acl_list2)
+
+ self.debug("Creating an unmanaged VPC tier network with Static NAT")
+ vpc2_tier_unmngd = self.create_Network(self.nuage_vpc_network_offering,
+ gateway='10.2.0.1',
+ vpc=vpc2,
+ acl_list=acl_list2)
+ self.validate_Network(vpc2_tier_unmngd, state="Implemented")
+
+ # VPC Tier Network creation should fail as VPC is unmanaged already
+ with self.assertRaises(Exception):
+ self.create_Network(self.nuage_vpc_network_offering,
+ gateway='10.2.128.1',
+ vpc=vpc2,
+ acl_list=acl_list2,
+ externalid=subnet3.id)
+
+ vpc2_tier_unmngd.delete(self.api_client)
+ vpc2.delete(self.api_client)
+
+ # VPC tier network creation fails when cidr does not match on VSD
+ with self.assertRaises(Exception):
+ self.create_Network(self.nuage_vpc_network_offering,
+ gateway='10.1.1.1',
+ vpc=vpc,
+ acl_list=acl_list,
+ externalid=subnet1.id)
+
+ for i in range(1, 3):
+ self.debug("Creating a mngd VPC tier with Static NAT service")
+ vpc_tier = self.create_Network(self.nuage_vpc_network_offering,
+ gateway='10.1.0.1',
+ vpc=vpc,
+ acl_list=acl_list,
+ externalid=subnet1.id)
+ self.validate_Network(vpc_tier, state="Implemented")
+ self.debug("Creating 2nd VPC tier network with Static NAT service")
+
+ # VPC 2nd tier creation fails when cidr doesn't match on VSD
+ with self.assertRaises(Exception):
+ self.create_Network(self.nuage_vpc_network_offering,
+ gateway='10.1.129.1',
+ vpc=vpc,
+ acl_list=acl_list,
+ externalid=subnet2.id)
+
+ vpc_2ndtier = self.create_Network(self.nuage_vpc_network_offering,
+ gateway='10.1.128.1',
+ vpc=vpc,
+ acl_list=acl_list,
+ externalid=subnet2.id)
+ self.validate_Network(vpc_2ndtier, state="Implemented")
+ vpc_vr = self.get_Router(vpc_tier)
+ self.check_Router_state(vpc_vr, state="Running")
+
+ # VSD verification
+ self.verify_vsd_network_not_present(vpc_tier, vpc)
+ self.verify_vsd_network_not_present(vpc_2ndtier, vpc)
+
+ # On ACS create VPCTier network when VSDSubnet is already in use
+ with self.assertRaises(Exception):
+ self.create_Network(self.nuage_vpc_network_offering,
+ gateway='10.1.128.1',
+ vpc=vpc,
+ acl_list=acl_list,
+ externalid=subnet2.id)
+
+ # On ACS create VPCTier network when VSDSubnet does not exist
+ with self.assertRaises(Exception):
+ self.create_Network(self.nuage_vpc_network_offering,
+ gateway='10.1.128.1',
+ vpc=vpc,
+ acl_list=acl_list,
+ externalid=subnet2.id+1)
+
+ # On ACS create VPCTier network without VSDSubnet should fail
+ with self.assertRaises(Exception):
+ self.create_Network(self.nuage_vpc_network_offering,
+ gateway='10.1.203.1',
+ vpc=vpc,
+ acl_list=acl_list)
+
+ self.debug("Creating another VPC with Static NAT service provider "
+ "as VpcVirtualRouter With same CIDR")
+ vpc3 = self.create_Vpc(self.nuage_vpc_offering, cidr='10.1.0.0/16')
+ self.validate_Vpc(vpc3, state="Enabled")
+ acl_list3 = self.create_NetworkAclList(
+ name="acl", description="acl", vpc=vpc3)
+ self.create_NetworkAclRule(
+ self.test_data["ingress_rule"], acl_list=acl_list3)
+ self.create_NetworkAclRule(
+ self.test_data["icmprule"], acl_list=acl_list3)
+
+ self.debug("Creating a mngd VPC tier with Static NAT service")
+ vpc3_tier_unmngd = \
+ self.create_Network(self.nuage_vpc_network_offering,
+ gateway='10.1.0.1',
+ vpc=vpc3,
+ acl_list=acl_list3)
+ self.validate_Network(vpc3_tier_unmngd, state="Implemented")
+ vpc3_tier_unmngd.delete(self.api_client)
+ vpc3.delete(self.api_client)
+
+ self.debug("Deploying a VM in the created VPC tier network")
+ self.test_data["virtual_machine"]["displayname"] = "vpcvm1"
+ self.test_data["virtual_machine"]["name"] = "vpcvm1"
+ vpc_vm_1 = self.create_VM(vpc_tier)
+ self.check_VM_state(vpc_vm_1, state="Running")
+ self.debug("Deploying another VM in the created VPC tier network")
+ self.test_data["virtual_machine"]["displayname"] = "vpcvm2"
+ self.test_data["virtual_machine"]["name"] = "vpcvm2"
+ vpc_vm_2 = self.create_VM(vpc_tier)
+ self.check_VM_state(vpc_vm_2, state="Running")
+ self.debug("Deploying a VM in the 2nd VPC tier network")
+ self.test_data["virtual_machine"]["displayname"] = "vpcvm12"
+ self.test_data["virtual_machine"]["name"] = "vpcvm12"
+ vpc_vm_12 = self.create_VM(vpc_2ndtier)
+ self.check_VM_state(vpc_vm_2, state="Running")
+ self.test_data["virtual_machine"]["displayname"] = None
+ self.test_data["virtual_machine"]["name"] = None
+
+ # VSD verification
+ self.verify_vsdmngd_vm(vpc_vm_1, subnet1)
+ self.verify_vsdmngd_vm(vpc_vm_2, subnet1)
+ self.verify_vsdmngd_vm(vpc_vm_12, subnet2)
+
+ self.debug("Creating Static NAT rule for the deployed VM "
+ "in the created VPC network...")
+ public_ip_1 = self.acquire_PublicIPAddress(vpc_tier, vpc=vpc)
+ self.validate_PublicIPAddress(public_ip_1, vpc_tier)
+ self.create_StaticNatRule_For_VM(vpc_vm_1, public_ip_1, vpc_tier)
+ self.validate_PublicIPAddress(
+ public_ip_1, vpc_tier, static_nat=True, vm=vpc_vm_1)
+
+ if not self.isSimulator:
+ vm_public_ip_1 = public_ip_1.ipaddress.ipaddress
+ try:
+ vpc_vm_1.ssh_ip = vm_public_ip_1
+ vpc_vm_1.ssh_port = \
+ self.test_data["virtual_machine"]["ssh_port"]
+ vpc_vm_1.username = \
+ self.test_data["virtual_machine"]["username"]
+ vpc_vm_1.password = \
+ self.test_data["virtual_machine"]["password"]
+ self.debug("SSHing into VM: %s with %s" %
+ (vpc_vm_1.ssh_ip, vpc_vm_1.password))
+
+ ssh = vpc_vm_1.get_ssh_client(ipaddress=vm_public_ip_1)
+
+ except Exception as e:
+ self.fail("SSH into VM failed with exception %s" % e)
+
+ self.verify_pingtovmipaddress(ssh, vpc_vm_2.ipaddress)
+ self.verify_pingtovmipaddress(ssh, vpc_vm_12.ipaddress)
+
+ vpc_vm_1.delete(self.api_client, expunge=True)
+ vpc_vm_2.delete(self.api_client, expunge=True)
+ vpc_vm_12.delete(self.api_client, expunge=True)
+ vpc_tier.delete(self.api_client)
+ vpc_2ndtier.delete(self.api_client)
+ self.debug("Number of loops %s" % i)
+
+ @attr(tags=["advanced", "nuagevsp", "domains"], required_hardware="false")
+ def test_03_nuage_mngd_subnets_domains(self):
+ """Test Nuage VSP Managed Subnets for ACS domains
+ """
+ vsd_enterprise = self.create_vsd_enterprise()
+ vsd_domain_template = self.create_vsd_domain_template(vsd_enterprise)
+
+ self.create_vsd_default_acls(vsd_domain_template)
+
+ vsd_domain1 = self.create_vsd_domain(vsd_domain_template,
+ vsd_enterprise,
+ "L3DomainToBeConsumedByACS")
+ vsd_zone1 = self.create_vsd_zone(vsd_domain1, "ZoneToBeConsumedByACS")
+ vsd_subnet1 = self.create_vsd_subnet(vsd_zone1,
+ "SubnetToBeConsumedByACS",
+ "10.0.0.1/24")
+ acs_domain_1 = Domain.create(
+ self.api_client,
+ {},
+ name="DomainManagedbyVsd",
+ domainid=vsd_enterprise.id
+ )
+ # Create an admin and an user account under domain D1
+ acs_account_1 = Account.create(
+ self.api_client,
+ self.test_data["acl"]["accountD1"],
+ admin=True,
+ domainid=acs_domain_1.id
+ )
+ self.cleanup.append(acs_domain_1)
+ self.cleanup.append(acs_account_1)
# On ACS create network using non-persistent nw offering allow
isolated_network = self.create_Network(
self.nuage_isolated_network_offering,
gateway="10.0.0.1", netmask="255.255.255.0",
- externalid=subnet1.id)
+ account=acs_account_1,
+ externalid=vsd_subnet1.id)
- # On ACS create network using persistent nw offering allow
- isolated_network2 = self.create_Network(
- self.nuage_isolated_network_offering_persistent,
- gateway="10.1.0.1", netmask="255.255.255.0",
- externalid=subnet2.id)
+ # Creation of a domain with inUse domain UUID is not allowed
+ with self.assertRaises(Exception):
+ Domain.create(
+ self.api_client,
+ {},
+ name="AnotherDomainManagedbyVsd",
+ domainid=vsd_enterprise.id
+ )
- try:
- self.create_Network(
- self.nuage_shared_network_offering, gateway="10.2.0.1",
- netmask="255.255.255.0", vlan=1201, externalid=subnet3.id)
- except Exception as e:
- self.debug("Shared Network Creation fails with %s" % e)
-
- # verify floating ip and intra subnet connectivity
- vm_1 = self.create_VM(isolated_network)
- vm_2 = self.create_VM(isolated_network)
+ # Creation of a domain with unexisting domain UUID is not allowed
+ with self.assertRaises(Exception):
+ Domain.create(
+ self.api_client,
+ {},
+ name="YetAnotherDomainManagedbyVsd",
+ domainid=vsd_enterprise.id+1
+ )
+ vm_1 = self.create_VM(isolated_network, account=acs_account_1)
+ vm_2 = self.create_VM(isolated_network, account=acs_account_1)
+ # VSD verification
+ self.verify_vsd_network_not_present(isolated_network)
+ self.verify_vsdmngd_vm(vm_1, vsd_subnet1)
+ self.verify_vsdmngd_vm(vm_2, vsd_subnet1)
self.debug("Creating Static NAT rule for the deployed VM in the "
"non persistently created Isolated network...")
- public_ip = self.acquire_PublicIPAddress(isolated_network)
+ public_ip = self.acquire_PublicIPAddress(isolated_network,
+ account=acs_account_1)
self.validate_PublicIPAddress(public_ip, isolated_network)
self.create_StaticNatRule_For_VM(vm_1, public_ip, isolated_network)
self.validate_PublicIPAddress(
public_ip, isolated_network, static_nat=True, vm=vm_1)
- self.create_FirewallRule(public_ip, self.test_data["ingress_rule"])
-
+ self.create_FirewallRule(public_ip,
+ self.test_data["ingress_rule"])
if not self.isSimulator:
vm_public_ip = public_ip.ipaddress.ipaddress
try:
@@ -236,143 +659,58 @@ class TestNuageManagedSubnets(nuageTestCase):
self.verify_pingtovmipaddress(ssh, vm_2.ipaddress)
- vm_3 = self.create_VM(isolated_network2)
- vm_4 = self.create_VM(isolated_network2)
- self.debug("Creating Static NAT rule for the deployed VM in the "
- "persistently created Isolated network...")
- public_ip2 = self.acquire_PublicIPAddress(isolated_network2)
- self.validate_PublicIPAddress(public_ip2, isolated_network2)
- self.create_StaticNatRule_For_VM(vm_3, public_ip2, isolated_network2)
- self.validate_PublicIPAddress(
- public_ip2, isolated_network2, static_nat=True, vm=vm_3)
- self.create_FirewallRule(public_ip2, self.test_data["ingress_rule"])
-
- if not self.isSimulator:
- vm_public_ip2 = public_ip2.ipaddress.ipaddress
- try:
- vm_3.ssh_ip = vm_public_ip2
- vm_3.ssh_port = self.test_data["virtual_machine"]["ssh_port"]
- vm_3.username = self.test_data["virtual_machine"]["username"]
- vm_3.password = self.test_data["virtual_machine"]["password"]
- self.debug("SSHing into VM: %s with %s" %
- (vm_3.ssh_ip, vm_3.password))
-
- ssh2 = vm_3.get_ssh_client(ipaddress=vm_public_ip2)
-
- except Exception as e:
- self.fail("SSH into VM failed with exception %s" % e)
-
- self.verify_pingtovmipaddress(ssh2, vm_4.ipaddress)
-
- @attr(tags=["advanced", "nuagevsp", "vpc"], required_hardware="false")
- def test_02_nuage_mngd_subnets_vpc(self):
- """Test Nuage VSP Managed Subnets for vpc and tier networks
+ @attr(tags=["advanced", "nuagevsp", "account"], required_hardware="false")
+ def test_04_nuage_mngd_subnets_noadminaccount(self):
+ """Test Nuage VSP Managed Subnets for ACS domains without admin account
"""
+ vsd_enterprise = self.create_vsd_enterprise()
+ vsd_domain_template = self.create_vsd_domain_template(vsd_enterprise)
- # 1. Create multiple L3DomainTemplate with Zone and Subnet on VSP
- # Create Ingress & Egress ACL Top & Bottom Templates
- # Add ACL rules to allow intra-subnet traffic
- # Instiantiate these L3Domains and store its Subnet VSD ID
- # 2. Create a vpc network offering and create a VPC
- # create vpc tier network offerings with and without VirtualRouter
- # 3. Create vpc tier networks specifying above offerings and
- # specifying the stored Subnet ID's of VSP
- # 4. Verify ACL rules and connectivity via deploying VM's ,
- # Enabling staticNAT, applying firewall and egress rules
+ self.create_vsd_default_acls(vsd_domain_template)
- # Create all items on vsd required for this test
- enterprise = self.fetch_by_externalID(self._session.user.enterprises,
- self.domain)
- domain_template = self.create_vsd_domain_template(enterprise)
+ vsd_domain1 = self.create_vsd_domain(vsd_domain_template,
+ vsd_enterprise,
+ "L3DomainToBeConsumedByACS")
+ vsd_zone1 = self.create_vsd_zone(vsd_domain1, "ZoneToBeConsumedByACS")
+ vsd_subnet1 = self.create_vsd_subnet(vsd_zone1,
+ "SubnetToBeConsumedByACS",
+ "10.0.0.1/24")
+ acs_domain_1 = Domain.create(
+ self.api_client,
+ {},
+ name="DomainManagedbyVsd",
+ domainid=vsd_enterprise.id
+ )
+ # Create an no admin and an user account under domain D1
+ acs_account_1 = Account.create(
+ self.api_client,
+ self.test_data["acl"]["accountD1"],
+ admin=False,
+ domainid=acs_domain_1.id
+ )
+ self.cleanup.append(acs_domain_1)
+ self.cleanup.append(acs_account_1)
- self.create_vsd_default_acls(domain_template)
+ # On ACS create network fails as non admin account
+ with self.assertRaises(Exception):
+ self.create_Network(
+ self.nuage_isolated_network_offering,
+ gateway="10.0.0.1", netmask="255.255.255.0",
+ account=acs_account_1,
+ externalid=vsd_subnet1.id)
- domain1 = self.create_vsd_domain(domain_template, enterprise,
- "L3DomainToBeConsumedByACS")
- zone1 = self.create_vsd_zone(domain1, "ZoneToBeConsumedByACS")
- subnet1 = self.create_vsd_subnet(zone1, "SubnetToBeConsumedByACS",
- "10.1.0.1/24")
- subnet2 = self.create_vsd_subnet(zone1, "2ndSubnetToBeConsumedByACS",
- "10.1.128.1/24")
+ @needscleanup
+ def create_vsd_enterprise(self):
+ enterprise = self.vsdk.NUEnterprise()
+ enterprise.name = "EnterpriseToBeConsumedByACS"
+ enterprise.description = "EnterpriseToBeConsumedByACS"
+ # enterprise.external_id = "ToBeConsumedByACS@" \
+ # + str(self.cms_id)
+ (enterprise, connection) = self._session.user.create_child(enterprise)
+ return enterprise
- cmd = updateZone.updateZoneCmd()
- cmd.id = self.zone.id
- cmd.domain = "vpc.com"
- self.api_client.updateZone(cmd)
- self.debug("Creating a VPC with Static NAT service provider as "
- "VpcVirtualRouter")
- vpc = self.create_Vpc(self.nuage_vpc_offering, cidr='10.1.0.0/16')
- self.validate_Vpc(vpc, state="Enabled")
- acl_list = self.create_NetworkAclList(
- name="acl", description="acl", vpc=vpc)
- self.create_NetworkAclRule(
- self.test_data["ingress_rule"], acl_list=acl_list)
- self.create_NetworkAclRule(
- self.test_data["icmprule"], acl_list=acl_list)
- self.debug("Creating a VPC tier network with Static NAT service")
- vpc_tier = self.create_Network(self.nuage_vpc_network_offering,
- gateway='10.1.0.1',
- vpc=vpc,
- acl_list=acl_list,
- externalid=subnet1.id)
- self.validate_Network(vpc_tier, state="Implemented")
- self.debug("Creating 2nd VPC tier network with Static NAT service")
- vpc_2ndtier = self.create_Network(self.nuage_vpc_network_offering,
- gateway='10.1.128.1',
- vpc=vpc,
- acl_list=acl_list,
- externalid=subnet2.id)
- self.validate_Network(vpc_2ndtier, state="Implemented")
- vpc_vr = self.get_Router(vpc_tier)
- self.check_Router_state(vpc_vr, state="Running")
-
- self.debug("Deploying a VM in the created VPC tier network")
- self.test_data["virtual_machine"]["displayname"] = "vpcvm1"
- self.test_data["virtual_machine"]["name"] = "vpcvm1"
- vpc_vm_1 = self.create_VM(vpc_tier)
- self.check_VM_state(vpc_vm_1, state="Running")
- self.debug("Deploying another VM in the created VPC tier network")
- self.test_data["virtual_machine"]["displayname"] = "vpcvm2"
- self.test_data["virtual_machine"]["name"] = "vpcvm2"
- vpc_vm_2 = self.create_VM(vpc_tier)
- self.check_VM_state(vpc_vm_2, state="Running")
- self.debug("Deploying a VM in the 2nd VPC tier network")
- self.test_data["virtual_machine"]["displayname"] = "vpcvm12"
- self.test_data["virtual_machine"]["name"] = "vpcvm12"
- vpc_vm_12 = self.create_VM(vpc_2ndtier)
- self.check_VM_state(vpc_vm_2, state="Running")
- self.test_data["virtual_machine"]["displayname"] = None
- self.test_data["virtual_machine"]["name"] = None
- self.debug("Creating Static NAT rule for the deployed VM "
- "in the created VPC network...")
- public_ip_1 = self.acquire_PublicIPAddress(vpc_tier, vpc=vpc)
- self.validate_PublicIPAddress(public_ip_1, vpc_tier)
- self.create_StaticNatRule_For_VM(vpc_vm_1, public_ip_1, vpc_tier)
- self.validate_PublicIPAddress(
- public_ip_1, vpc_tier, static_nat=True, vm=vpc_vm_1)
-
- if not self.isSimulator:
- vm_public_ip_1 = public_ip_1.ipaddress.ipaddress
- try:
- vpc_vm_1.ssh_ip = vm_public_ip_1
- vpc_vm_1.ssh_port = \
- self.test_data["virtual_machine"]["ssh_port"]
- vpc_vm_1.username = \
- self.test_data["virtual_machine"]["username"]
- vpc_vm_1.password = \
- self.test_data["virtual_machine"]["password"]
- self.debug("SSHing into VM: %s with %s" %
- (vpc_vm_1.ssh_ip, vpc_vm_1.password))
-
- ssh = vpc_vm_1.get_ssh_client(ipaddress=vm_public_ip_1)
-
- except Exception as e:
- self.fail("SSH into VM failed with exception %s" % e)
-
- self.verify_pingtovmipaddress(ssh, vpc_vm_2.ipaddress)
- self.verify_pingtovmipaddress(ssh, vpc_vm_12.ipaddress)
-
- def create_vsd_ingress_acl_template(self, domain_template, priority_type="TOP"):
+ def create_vsd_ingress_acl_template(self, domain_template,
+ priority_type="TOP"):
name = "Ingress ACL " + str(priority_type).capitalize()
acl_template = self.vsdk.NUIngressACLTemplate()
acl_template.name = name
@@ -383,7 +721,8 @@ class TestNuageManagedSubnets(nuageTestCase):
domain_template.create_child(acl_template)
return acl_template
- def create_vsd_egress_acl_template(self, domain_template, priority_type='TOP'):
+ def create_vsd_egress_acl_template(self, domain_template,
+ priority_type='TOP'):
name = "Egress ACL " + str(priority_type).capitalize()
acl_template = self.vsdk.NUEgressACLTemplate()
acl_template.name = name
@@ -394,12 +733,13 @@ class TestNuageManagedSubnets(nuageTestCase):
domain_template.create_child(acl_template)
return acl_template
+ @needscleanup
def create_vsd_domain_template(self, enterprise):
domain_template = self.vsdk.NUDomainTemplate()
domain_template.name = "L3DomainTemplateToBeConsumedByACS"
domain_template.description = "L3DomainTemplateToBeConsumedByACS"
- domain_template.external_id = "L3DomainTemplateToBeConsumedByACS@" \
- + str(self.cms_id)
+ # domain_template.external_id = "L3DomainTemplateToBeConsumedByACS@" \
+ # + str(self.cms_id)
(domain_template, connection) = \
enterprise.create_child(domain_template)
return domain_template
@@ -412,8 +752,6 @@ class TestNuageManagedSubnets(nuageTestCase):
ingress_vsd_acl_entry1 = self.vsdk.NUIngressACLEntryTemplate()
ingress_vsd_acl_entry1.name = "Default Intra-Subnet Allow"
ingress_vsd_acl_entry1.description = "Default Intra-Subnet Allow"
- ingress_vsd_acl_entry1.external_id = "ToBeConsumedByACS@" \
- + str(self.cms_id)
ingress_vsd_acl_entry1.priority = '1'
ingress_vsd_acl_entry1.protocol = 'ANY'
ingress_vsd_acl_template1.create_child(ingress_vsd_acl_entry1)
@@ -421,8 +759,6 @@ class TestNuageManagedSubnets(nuageTestCase):
ingress_vsd_acl_entry2 = self.vsdk.NUIngressACLEntryTemplate()
ingress_vsd_acl_entry2.name = "Default Allow TCP"
ingress_vsd_acl_entry2.description = "Default Allow TCP"
- ingress_vsd_acl_entry2.external_id = "ToBeConsumedByACS@" \
- + str(self.cms_id)
ingress_vsd_acl_entry2.priority = '1'
ingress_vsd_acl_entry2.protocol = '6'
ingress_vsd_acl_entry2.source_port = '*'
@@ -432,8 +768,6 @@ class TestNuageManagedSubnets(nuageTestCase):
ingress_vsd_acl_entry3 = self.vsdk.NUIngressACLEntryTemplate()
ingress_vsd_acl_entry3.name = "Default Allow UDP"
ingress_vsd_acl_entry3.description = "Default Allow UDP"
- ingress_vsd_acl_entry3.external_id = "ToBeConsumedByACS@" \
- + str(self.cms_id)
ingress_vsd_acl_entry3.priority = '2'
ingress_vsd_acl_entry3.protocol = '17'
ingress_vsd_acl_entry3.source_port = '*'
@@ -442,8 +776,6 @@ class TestNuageManagedSubnets(nuageTestCase):
ingress_vsd_acl_entry4 = self.vsdk.NUIngressACLEntryTemplate()
ingress_vsd_acl_entry4.name = "Default Allow ICMP"
ingress_vsd_acl_entry4.description = "Default Allow ICMP"
- ingress_vsd_acl_entry4.external_id = "ToBeConsumedByACS@" \
- + str(self.cms_id)
ingress_vsd_acl_entry4.priority = '3'
ingress_vsd_acl_entry4.protocol = '1'
ingress_vsd_acl_template2.create_child(ingress_vsd_acl_entry4)
@@ -457,16 +789,12 @@ class TestNuageManagedSubnets(nuageTestCase):
egress_vsd_acl_entry1 = self.vsdk.NUEgressACLEntryTemplate()
egress_vsd_acl_entry1.name = "Default Intra-Subnet Allow"
egress_vsd_acl_entry1.description = "Default Intra-Subnet Allow"
- egress_vsd_acl_entry1.external_id = "ToBeConsumedByACS@" \
- + str(self.cms_id)
egress_vsd_acl_entry1.priority = '1'
egress_vsd_acl_entry1.protocol = 'ANY'
egress_vsd_acl_template1.create_child(egress_vsd_acl_entry1)
egress_vsd_acl_entry2 = self.vsdk.NUEgressACLEntryTemplate()
egress_vsd_acl_entry2.name = "Default Allow ICMP"
egress_vsd_acl_entry2.description = "Default Allow ICMP"
- egress_vsd_acl_entry2.external_id = "ToBeConsumedByACS@" \
- + str(self.cms_id)
egress_vsd_acl_entry2.priority = '3'
egress_vsd_acl_entry2.protocol = '1'
egress_vsd_acl_template2.create_child(egress_vsd_acl_entry2)
@@ -475,7 +803,6 @@ class TestNuageManagedSubnets(nuageTestCase):
domain = self.vsdk.NUDomain()
domain.name = name
domain.description = name
- domain.external_id = name + "@" + str(self.cms_id)
(domain, connection) = \
enterprise.instantiate_child(domain, domain_template)
return domain
@@ -484,7 +811,6 @@ class TestNuageManagedSubnets(nuageTestCase):
zone = self.vsdk.NUZone()
zone.name = name
zone.description = name
- zone.external_id = name + "@" + str(self.cms_id)
(zone, connection) = domain.create_child(zone)
return zone
@@ -492,12 +818,18 @@ class TestNuageManagedSubnets(nuageTestCase):
subnet = self.vsdk.NUSubnet()
subnet.name = name
subnet.description = name
- subnet.external_id = name + "@" + str(self.cms_id)
(subnet.gateway, subnet.netmask, subnet.address) = \
self._cidr_to_netmask(cidr)
(subnet, connection) = zone.create_child(subnet)
return subnet
+ def create_vsd_dhcp_option(self, subnet, type, value):
+ dhcp_option = self.vsdk.NUDHCPOption()
+ dhcp_option.actual_type = type
+ dhcp_option.actual_values = value
+ (dhcp_option, connection) = subnet.create_child(dhcp_option)
+ return dhcp_option
+
def _cidr_to_netmask(self, cidr):
import socket
import struct
diff --git a/tools/marvin/marvin/lib/base.py b/tools/marvin/marvin/lib/base.py
index e0253896271..fdfed774f84 100755
--- a/tools/marvin/marvin/lib/base.py
+++ b/tools/marvin/marvin/lib/base.py
@@ -39,7 +39,7 @@ class Domain:
@classmethod
def create(cls, apiclient, services, name=None, networkdomain=None,
- parentdomainid=None):
+ parentdomainid=None, domainid=None):
"""Creates an domain"""
cmd = createDomain.createDomainCmd()
@@ -61,6 +61,9 @@ class Domain:
cmd.parentdomainid = parentdomainid
elif "parentdomainid" in services:
cmd.parentdomainid = services["parentdomainid"]
+
+ if domainid:
+ cmd.domainid = domainid
try:
domain = apiclient.createDomain(cmd)
if domain is not None: