def configureVpxNetworkToVmParams(cls, vpxGuest, mgmtNet): """Configure the management network for the VPX""" vpxGuest.mainip = xenrt.StaticIP4Addr(network=mgmtNet).getAddr() gateway = xenrt.getNetworkParam(mgmtNet, "GATEWAY") mask = xenrt.getNetworkParam(mgmtNet, "SUBNETMASK") if isinstance(vpxGuest, xenrt.lib.xenserver.Guest): vpxGuest.paramSet('xenstore-data:vm-data/ip', vpxGuest.mainip) vpxGuest.paramSet('xenstore-data:vm-data/netmask', mask) vpxGuest.paramSet('xenstore-data:vm-data/gateway', gateway) elif isinstance(vpxGuest, xenrt.lib.esx.Guest): paramValue ="ip=%s&netmask=%s&gateway=%s" % (vpxGuest.mainip, mask, gateway) vpxGuest.paramSet('machine.id', paramValue) else: raise xenrt.XRTError("Unimplemented")
def configureVpxNetworkToVmParams(cls, vpxGuest, mgmtNet): """Configure the management network for the VPX""" vpxGuest.mainip = xenrt.StaticIP4Addr(network=mgmtNet).getAddr() gateway = xenrt.getNetworkParam(mgmtNet, "GATEWAY") mask = xenrt.getNetworkParam(mgmtNet, "SUBNETMASK") if isinstance(vpxGuest, xenrt.lib.xenserver.Guest): vpxGuest.paramSet('xenstore-data:vm-data/ip', vpxGuest.mainip) vpxGuest.paramSet('xenstore-data:vm-data/netmask', mask) vpxGuest.paramSet('xenstore-data:vm-data/gateway', gateway) elif isinstance(vpxGuest, xenrt.lib.esx.Guest): paramValue = "ip=%s&netmask=%s&gateway=%s" % (vpxGuest.mainip, mask, gateway) vpxGuest.paramSet('machine.id', paramValue) else: raise xenrt.XRTError("Unimplemented")
def setup(self, networks, networks_sriov): i = 1 ipSpec = self.__vpxGuest.getIPSpec() for n in networks[1:]: i += 1 xenrt.TEC().logverbose("Creating VLAN %d for network %s" % (i, n)) # Find out the name NetScaler has given to the interface lines = self.cli("show interfaces") iface = next(line.split('\t')[1].split(' ')[1] for line in lines if line.startswith("%d)" % (i))) self.cli("add vlan %d" % i) self.cli("bind vlan %d -ifnum %s" % (i, iface)) dev, ip, masklen = [x for x in ipSpec if x[0] == "eth%d" % (i-1)][0] if ip: self.__subnetips[n] = ip subnet = IPy.IP("0.0.0.0/%s" % masklen).netmask().strNormal() else: try: subnet = xenrt.getNetworkParam(n, "SUBNETMASK") except: # Must be a private VLAN with no static IP defined continue self.__subnetips[n] = xenrt.StaticIP4Addr(network=n).getAddr() self.cli('add ip %s %s' % (self.__subnetips[n], subnet)) self.cli('bind vlan %d -IPAddress %s %s' % (i, self.__subnetips[n], subnet)) self.__subnetips[networks[0]] = xenrt.StaticIP4Addr(network=networks[0]).getAddr() self.cli('add ip %s %s' % (self.__subnetips[networks[0]], xenrt.getNetworkParam(networks[0], "SUBNETMASK"))) for n in networks_sriov: i += 1 xenrt.TEC().logverbose("Creating VLAN %d for SR-IOV VIF on network %s" % (i, n)) # Find out the name NetScaler has given to the interface lines = self.cli("show interfaces") iface = next(line.split('\t')[1].split(' ')[1] for line in lines if line.startswith("%d)" % (i))) # If this network is a VLAN, get the physical VLAN id (vlan_id, subnet, netmask) = self.__vpxGuest.host.getVLAN(n) # TODO If it's not a VLAN, just do something like the above xenrt.TEC().logverbose("We want a tagged VLAN with id %d" % (vlan_id)) # Tag traffic on this interface with the VLAN tag self.cli("set interface %s -tagall OFF" % (iface)) self.cli("add vlan %d" % (vlan_id)) self.cli("bind vlan %d -ifnum %s" % (vlan_id, iface)) self.cli("set interface %s -tagall ON" % (iface)) # This is necessary to make it work, and it must be done after the 'bind vlan' command. self.cli('save ns config')
def setupNetscaler(self): if self.netscalerVM: self.netscaler = xenrt.lib.netscaler.NetScaler.setupNetScalerVpx(self.netscalerVM, license=xenrt.lib.netscaler.NetScaler.getLicenseFileFromXenRT()) vip = xenrt.StaticIP4Addr() subnet = xenrt.getNetworkParam("NPRI", "SUBNETMASK") self.netscaler.cli("add ns ip %s %s -type VIP" % (vip.addr, subnet)) self.netscaler.cli("enable ns feature LB") self.netscaler.cli("enable ns feature RESPONDER") self.netscaler.cli("add lb vserver MS-80 HTTP %s 80 -persistenceType SOURCEIP -cltTimeout 180" % vip.addr) self.netscaler.cli("add lb vserver MS-8080 HTTP %s 8080 -persistenceType SOURCEIP -cltTimeout 180" % vip.addr) self.netscaler.cli("add lb vserver MS-8096 HTTP %s 8096 -persistenceType NONE -cltTimeout 180" % vip.addr) self.netscaler.cli("add lb vserver MS-8250 TCP %s 8250 -persistenceType SOURCEIP -cltTimeout 180" % vip.addr) self.netscaler.cli('add responder action redirect_to_client redirect "\\"/client/\\""') self.netscaler.cli('add responder policy redirect_from_root "HTTP.REQ.URL.EQ(\\"/\\")" redirect_to_client') self.netscaler.cli('bind lb vserver MS-80 -policyName redirect_from_root -priority 100 -gotoPriorityExpression END -type REQUEST') for m in self.allManagementServers: self.netscaler.cli("add server %s %s" % (m.getName(), m.getIP())) self.netscaler.cli("add service %s-8080 %s HTTP 8080 -gslb NONE -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -useproxyport YES -sp OFF -cltTimeout 180 -svrTimeout 360 -CKA NO -TCPB NO -CMP NO" % (m.getName(), m.getName())) self.netscaler.cli("bind lb vserver MS-80 %s-8080" % m.getName()) self.netscaler.cli("bind lb vserver MS-8080 %s-8080" % m.getName()) self.netscaler.cli("add service %s-8096 %s HTTP 8096 -gslb NONE -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -useproxyport YES -sp OFF -cltTimeout 180 -svrTimeout 360 -CKA NO -TCPB NO -CMP NO" % (m.getName(), m.getName())) self.netscaler.cli("bind lb vserver MS-8096 %s-8096" % m.getName()) self.netscaler.cli("add service %s-8250 %s TCP 8250 -gslb NONE -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -useproxyport YES -sp OFF -cltTimeout 9000 -svrTimeout 9000 -CKA NO -TCPB NO -CMP NO" % (m.getName(), m.getName())) self.netscaler.cli("bind lb vserver MS-8250 %s-8250" % m.getName()) self.netscaler.cli("save ns config") self.nsvip = vip.addr
def setupNetscaler(self): if self.netscalerVM: self.netscaler = xenrt.lib.netscaler.NetScaler.setupNetScalerVpx( self.netscalerVM, license=xenrt.lib.netscaler.NetScaler.getLicenseFileFromXenRT( )) vip = xenrt.StaticIP4Addr() subnet = xenrt.getNetworkParam("NPRI", "SUBNETMASK") self.netscaler.cli("add ns ip %s %s -type VIP" % (vip.addr, subnet)) self.netscaler.cli("enable ns feature LB") self.netscaler.cli("enable ns feature RESPONDER") self.netscaler.cli( "add lb vserver MS-80 HTTP %s 80 -persistenceType SOURCEIP -cltTimeout 180" % vip.addr) self.netscaler.cli( "add lb vserver MS-8080 HTTP %s 8080 -persistenceType SOURCEIP -cltTimeout 180" % vip.addr) self.netscaler.cli( "add lb vserver MS-8096 HTTP %s 8096 -persistenceType NONE -cltTimeout 180" % vip.addr) self.netscaler.cli( "add lb vserver MS-8250 TCP %s 8250 -persistenceType SOURCEIP -cltTimeout 180" % vip.addr) self.netscaler.cli( 'add responder action redirect_to_client redirect "\\"/client/\\""' ) self.netscaler.cli( 'add responder policy redirect_from_root "HTTP.REQ.URL.EQ(\\"/\\")" redirect_to_client' ) self.netscaler.cli( 'bind lb vserver MS-80 -policyName redirect_from_root -priority 100 -gotoPriorityExpression END -type REQUEST' ) for m in self.allManagementServers: self.netscaler.cli("add server %s %s" % (m.getName(), m.getIP())) self.netscaler.cli( "add service %s-8080 %s HTTP 8080 -gslb NONE -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -useproxyport YES -sp OFF -cltTimeout 180 -svrTimeout 360 -CKA NO -TCPB NO -CMP NO" % (m.getName(), m.getName())) self.netscaler.cli("bind lb vserver MS-80 %s-8080" % m.getName()) self.netscaler.cli("bind lb vserver MS-8080 %s-8080" % m.getName()) self.netscaler.cli( "add service %s-8096 %s HTTP 8096 -gslb NONE -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -useproxyport YES -sp OFF -cltTimeout 180 -svrTimeout 360 -CKA NO -TCPB NO -CMP NO" % (m.getName(), m.getName())) self.netscaler.cli("bind lb vserver MS-8096 %s-8096" % m.getName()) self.netscaler.cli( "add service %s-8250 %s TCP 8250 -gslb NONE -maxClient 0 -maxReq 0 -cip DISABLED -usip NO -useproxyport YES -sp OFF -cltTimeout 9000 -svrTimeout 9000 -CKA NO -TCPB NO -CMP NO" % (m.getName(), m.getName())) self.netscaler.cli("bind lb vserver MS-8250 %s-8250" % m.getName()) self.netscaler.cli("save ns config") self.nsvip = vip.addr
def getGateway(self, key, ref): if ref.has_key("XRT_NetscalerGateway"): xenrt.GEC().registry.dump() xenrt.TEC().logverbose("XRT_NetscalerGateway") ns = xenrt.GEC().registry.objGet("netscaler", ref['XRT_NetscalerGateway']) return ns.subnetIp(ref.get("XRT_VlanName", "NPRI")) else: return xenrt.getNetworkParam(ref.get("XRT_VlanName", "NPRI"), "GATEWAY")
def setupManagementServer(self): self.primaryManagementServer.execcmd('iptables -I INPUT -p tcp --dport 8096 -j ACCEPT') setupMsLoc = self.primaryManagementServer.execcmd('find /usr/bin -name %s-setup-management' % (self.cmdPrefix)).strip() self.primaryManagementServer.execcmd(setupMsLoc) self.primaryManagementServer.execcmd('mysql -u cloud --password=cloud -h %s --execute="UPDATE cloud.configuration SET value=8096 WHERE name=\'integration.api.port\'"' % self.dbServer.getIP()) if xenrt.TEC().lookup("USE_CCP_SIMULATOR", False, boolean=True) or self._simDbServer: # For some reason the cloud user doesn't seem to have access to the simulator DB self.primaryManagementServer.execcmd("""sed -i s/db.simulator.username=cloud/db.simulator.username=root/ /usr/share/cloudstack-management/conf/db.properties""") self.primaryManagementServer.execcmd("""sed -i s/db.simulator.password=cloud/db.simulator.password=xensource/ /usr/share/cloudstack-management/conf/db.properties""") self.primaryManagementServer.execcmd("""sed -i s/db.simulator.host=localhost/db.simulator.host=%s/ /usr/share/cloudstack-management/conf/db.properties""" % self.simDbServer.getIP()) self.restart(checkHealth=False) self.checkManagementServerHealth(timeout=300) # We have to update templates *after* starting the management server as some templates are not introduced until DB schema updates are applied templateSubsts = {"http://download.cloud.com/templates/builtin/centos56-x86_64.vhd.bz2": "%s/cloudTemplates/centos56-x86_64.vhd.bz2" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP"), "http://download.cloud.com/releases/4.3/centos6_4_64bit.vhd.bz2": "%s/cloudTemplates/centos6_4_64bit.vhd.bz2" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP"), "http://nfs1.lab.vmops.com/templates/centos53-x86_64/latest/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2": "%s/cloudTemplates/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP"), "http://download.cloud.com/templates/builtin/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2": "%s/cloudTemplates/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP"), "http://download.cloud.com/releases/2.2.0/CentOS5.3-x86_64.ova": "%s/cloudTemplates/CentOS5.3-x86_64.ova" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP"), "http://download.cloud.com/releases/2.2.0/eec2209b-9875-3c8d-92be-c001bd8a0faf.qcow2.bz2": "%s/cloudTemplates/eec2209b-9875-3c8d-92be-c001bd8a0faf.qcow2.bz2" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP"), "http://download.cloud.com/templates/builtin/centos-7-x86_64.tar.gz": "%s/cloudTemplates/centos-7-x86_64.tar.gz" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP")} if xenrt.TEC().lookup("MARVIN_BUILTIN_TEMPLATES", False, boolean=True): templateSubsts["http://download.cloud.com/templates/builtin/centos56-x86_64.vhd.bz2"] = \ "%s/cloudTemplates/centos56-httpd-64bit.vhd.bz2" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP") templateSubsts["http://download.cloud.com/releases/2.2.0/CentOS5.3-x86_64.ova"] = \ "%s/cloudTemplates/centos53-httpd-64bit.ova" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP") templateSubsts["http://download.cloud.com/releases/2.2.0/eec2209b-9875-3c8d-92be-c001bd8a0faf.qcow2.bz2"] = \ "%s/cloudTemplates/centos55-httpd-64bit.qcow2" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP") for t in templateSubsts.keys(): self.primaryManagementServer.execcmd("""mysql -u cloud --password=cloud -h %s --execute="UPDATE cloud.vm_template SET url='%s' WHERE url='%s'" """ % (self.dbServer.getIP(), templateSubsts[t], t)) self.restart() marvinApi = xenrt.lib.cloud.MarvinApi(self) internalMask = IPy.IP("%s/%s" % (xenrt.getNetworkParam("NPRI", "SUBNET"), xenrt.getNetworkParam("NPRI", "SUBNETMASK"))) if xenrt.TEC().lookup("USE_CCP_SIMULATOR", False, boolean=True) or self._simDbServer: self.primaryManagementServer.execcmd('mysql -u root --password=xensource -h %s < /usr/share/cloudstack-management/setup/hypervisor_capabilities.simulator.sql' % self.dbServer.getIP()) self.primaryManagementServer.execcmd('mysql -u root --password=xensource -h %s < /usr/share/cloudstack-management/setup/templates.simulator.sql' % self.dbServer.getIP()) marvinApi.setCloudGlobalConfig("secstorage.allowed.internal.sites", internalMask.strNormal()) if not xenrt.TEC().lookup("MARVIN_SETUP", False, boolean=True): marvinApi.setCloudGlobalConfig("use.external.dns", "true") endpoint_url = "http://%s:8096/client/api" % marvinApi.mgtSvrDetails.mgtSvrIp if self.additionalManagementServers: marvinApi.setCloudGlobalConfig("agent.lb.enabled", "true") marvinApi.setCloudGlobalConfig("endpointe.url", endpoint_url) marvinApi.setCloudGlobalConfig("check.pod.cidrs", "false", restartManagementServer=True) xenrt.GEC().dbconnect.jobUpdate("CLOUD_MGMT_SVR_IP", self.primaryManagementServer.getIP()) xenrt.TEC().registry.toolstackPut("cloud", xenrt.lib.cloud.CloudStack(place=self.primaryManagementServer)) # Create one secondary storage, to speed up deployment. # Additional locations will need to be created during deployment hvlist = xenrt.TEC().lookup("CLOUD_REQ_SYS_TMPLS", None) if hvlist: hvlist = hvlist.split(",") else: hvlist = [] if any(map(lambda hv: hv in hvlist, ["kvm", "xenserver", "vmware", "lxc"])): secondaryStorage = xenrt.ExternalNFSShare() storagePath = secondaryStorage.getMount() url = 'nfs://%s' % (secondaryStorage.getMount().replace(':','')) marvinApi.copySystemTemplatesToSecondaryStorage(storagePath, "NFS") self.primaryManagementServer.special['initialNFSSecStorageUrl'] = url elif "hyperv" in hvlist: if xenrt.TEC().lookup("EXTERNAL_SMB", False, boolean=True): secondaryStorage = xenrt.ExternalSMBShare() storagePath = secondaryStorage.getMount() url = 'cifs://%s' % (secondaryStorage.getMount().replace(':','')) marvinApi.copySystemTemplatesToSecondaryStorage(storagePath, "SMB") self.primaryManagementServer.special['initialSMBSecStorageUrl'] = url if xenrt.TEC().lookup("CCP_CODE_COVERAGE", False, boolean=True): xenrt.TEC().logverbose("Enabling code coverage collection...") for m in self.allManagementServers: if m.execcmd("ls %s/setup_codecoverage.sh" % self.installDir, retval="code") != 0: raise xenrt.XRTError("CCP_CODE_COVERAGE set but setup_codecoverage.sh not found in build") m.execcmd("cd %s && ./setup_codecoverage.sh" % self.installDir) self.restart() xenrt.TEC().logverbose("...done") commit = None try: commit = self.primaryManagementServer.execcmd("cloudstack-sccs").strip() xenrt.TEC().logverbose("Management server was built from commit %s" % commit) except: xenrt.TEC().warning("Error when trying to identify management server version") if commit: expectedCommit = xenrt.getCCPCommit(self.primaryManagementServer.distro) if expectedCommit and commit != expectedCommit: raise xenrt.XRTError("Management server commit %s does not match expected commit %s" % (commit, expectedCommit))
def setupOutboundNAT(self, privateNetwork, publicNetwork): self.cli("set rnat %s %s -natIP %s" % (xenrt.getNetworkParam(privateNetwork, "SUBNET"), xenrt.getNetworkParam(privateNetwork, "SUBNETMASK"), self.subnetIp(network=publicNetwork))) self.cli('save ns config')
def setup(self, networks, networks_sriov): i = 1 ipSpec = self.__vpxGuest.getIPSpec() for n in networks[1:]: i += 1 xenrt.TEC().logverbose("Creating VLAN %d for network %s" % (i, n)) # Find out the name NetScaler has given to the interface lines = self.cli("show interfaces") iface = next( line.split('\t')[1].split(' ')[1] for line in lines if line.startswith("%d)" % (i))) self.cli("add vlan %d" % i) self.cli("bind vlan %d -ifnum %s" % (i, iface)) dev, ip, masklen = [ x for x in ipSpec if x[0] == "eth%d" % (i - 1) ][0] if ip: self.__subnetips[n] = ip subnet = IPy.IP("0.0.0.0/%s" % masklen).netmask().strNormal() else: try: subnet = xenrt.getNetworkParam(n, "SUBNETMASK") except: # Must be a private VLAN with no static IP defined continue self.__subnetips[n] = xenrt.StaticIP4Addr(network=n).getAddr() self.cli('add ip %s %s' % (self.__subnetips[n], subnet)) self.cli('bind vlan %d -IPAddress %s %s' % (i, self.__subnetips[n], subnet)) self.__subnetips[networks[0]] = xenrt.StaticIP4Addr( network=networks[0]).getAddr() self.cli('add ip %s %s' % (self.__subnetips[networks[0]], xenrt.getNetworkParam(networks[0], "SUBNETMASK"))) for n in networks_sriov: i += 1 xenrt.TEC().logverbose( "Creating VLAN %d for SR-IOV VIF on network %s" % (i, n)) # Find out the name NetScaler has given to the interface lines = self.cli("show interfaces") iface = next( line.split('\t')[1].split(' ')[1] for line in lines if line.startswith("%d)" % (i))) # If this network is a VLAN, get the physical VLAN id (vlan_id, subnet, netmask) = self.__vpxGuest.host.getVLAN( n) # TODO If it's not a VLAN, just do something like the above xenrt.TEC().logverbose("We want a tagged VLAN with id %d" % (vlan_id)) # Tag traffic on this interface with the VLAN tag self.cli("set interface %s -tagall OFF" % (iface)) self.cli("add vlan %d" % (vlan_id)) self.cli("bind vlan %d -ifnum %s" % (vlan_id, iface)) self.cli( "set interface %s -tagall ON" % (iface) ) # This is necessary to make it work, and it must be done after the 'bind vlan' command. self.cli('save ns config')
def setupManagementServer(self): self.primaryManagementServer.execcmd( 'iptables -I INPUT -p tcp --dport 8096 -j ACCEPT') setupMsLoc = self.primaryManagementServer.execcmd( 'find /usr/bin -name %s-setup-management' % (self.cmdPrefix)).strip() self.primaryManagementServer.execcmd(setupMsLoc) self.primaryManagementServer.execcmd( 'mysql -u cloud --password=cloud -h %s --execute="UPDATE cloud.configuration SET value=8096 WHERE name=\'integration.api.port\'"' % self.dbServer.getIP()) if xenrt.TEC().lookup("USE_CCP_SIMULATOR", False, boolean=True) or self._simDbServer: # For some reason the cloud user doesn't seem to have access to the simulator DB self.primaryManagementServer.execcmd( """sed -i s/db.simulator.username=cloud/db.simulator.username=root/ /usr/share/cloudstack-management/conf/db.properties""" ) self.primaryManagementServer.execcmd( """sed -i s/db.simulator.password=cloud/db.simulator.password=xensource/ /usr/share/cloudstack-management/conf/db.properties""" ) self.primaryManagementServer.execcmd( """sed -i s/db.simulator.host=localhost/db.simulator.host=%s/ /usr/share/cloudstack-management/conf/db.properties""" % self.simDbServer.getIP()) self.restart(checkHealth=False) self.checkManagementServerHealth(timeout=300) # We have to update templates *after* starting the management server as some templates are not introduced until DB schema updates are applied templateSubsts = { "http://download.cloud.com/templates/builtin/centos56-x86_64.vhd.bz2": "%s/cloudTemplates/centos56-x86_64.vhd.bz2" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP"), "http://download.cloud.com/releases/4.3/centos6_4_64bit.vhd.bz2": "%s/cloudTemplates/centos6_4_64bit.vhd.bz2" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP"), "http://nfs1.lab.vmops.com/templates/centos53-x86_64/latest/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2": "%s/cloudTemplates/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP"), "http://download.cloud.com/templates/builtin/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2": "%s/cloudTemplates/f59f18fb-ae94-4f97-afd2-f84755767aca.vhd.bz2" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP"), "http://download.cloud.com/releases/2.2.0/CentOS5.3-x86_64.ova": "%s/cloudTemplates/CentOS5.3-x86_64.ova" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP"), "http://download.cloud.com/releases/2.2.0/eec2209b-9875-3c8d-92be-c001bd8a0faf.qcow2.bz2": "%s/cloudTemplates/eec2209b-9875-3c8d-92be-c001bd8a0faf.qcow2.bz2" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP"), "http://download.cloud.com/templates/builtin/centos-7-x86_64.tar.gz": "%s/cloudTemplates/centos-7-x86_64.tar.gz" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP") } if xenrt.TEC().lookup("MARVIN_BUILTIN_TEMPLATES", False, boolean=True): templateSubsts["http://download.cloud.com/templates/builtin/centos56-x86_64.vhd.bz2"] = \ "%s/cloudTemplates/centos56-httpd-64bit.vhd.bz2" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP") templateSubsts["http://download.cloud.com/releases/2.2.0/CentOS5.3-x86_64.ova"] = \ "%s/cloudTemplates/centos53-httpd-64bit.ova" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP") templateSubsts["http://download.cloud.com/releases/2.2.0/eec2209b-9875-3c8d-92be-c001bd8a0faf.qcow2.bz2"] = \ "%s/cloudTemplates/centos55-httpd-64bit.qcow2" % xenrt.TEC().lookup("EXPORT_DISTFILES_HTTP") for t in templateSubsts.keys(): self.primaryManagementServer.execcmd( """mysql -u cloud --password=cloud -h %s --execute="UPDATE cloud.vm_template SET url='%s' WHERE url='%s'" """ % (self.dbServer.getIP(), templateSubsts[t], t)) self.restart() marvinApi = xenrt.lib.cloud.MarvinApi(self) internalMask = IPy.IP("%s/%s" % (xenrt.getNetworkParam( "NPRI", "SUBNET"), xenrt.getNetworkParam("NPRI", "SUBNETMASK"))) if xenrt.TEC().lookup("USE_CCP_SIMULATOR", False, boolean=True) or self._simDbServer: self.primaryManagementServer.execcmd( 'mysql -u root --password=xensource -h %s < /usr/share/cloudstack-management/setup/hypervisor_capabilities.simulator.sql' % self.dbServer.getIP()) self.primaryManagementServer.execcmd( 'mysql -u root --password=xensource -h %s < /usr/share/cloudstack-management/setup/templates.simulator.sql' % self.dbServer.getIP()) marvinApi.setCloudGlobalConfig("secstorage.allowed.internal.sites", internalMask.strNormal()) if not xenrt.TEC().lookup("MARVIN_SETUP", False, boolean=True): marvinApi.setCloudGlobalConfig("use.external.dns", "true") endpoint_url = "http://%s:8096/client/api" % marvinApi.mgtSvrDetails.mgtSvrIp if self.additionalManagementServers: marvinApi.setCloudGlobalConfig("agent.lb.enabled", "true") marvinApi.setCloudGlobalConfig("endpointe.url", endpoint_url) marvinApi.setCloudGlobalConfig("check.pod.cidrs", "false", restartManagementServer=True) xenrt.GEC().dbconnect.jobUpdate("CLOUD_MGMT_SVR_IP", self.primaryManagementServer.getIP()) xenrt.TEC().registry.toolstackPut( "cloud", xenrt.lib.cloud.CloudStack(place=self.primaryManagementServer)) # Create one secondary storage, to speed up deployment. # Additional locations will need to be created during deployment hvlist = xenrt.TEC().lookup("CLOUD_REQ_SYS_TMPLS", None) if hvlist: hvlist = hvlist.split(",") else: hvlist = [] if any( map(lambda hv: hv in hvlist, ["kvm", "xenserver", "vmware", "lxc"])): secondaryStorage = xenrt.ExternalNFSShare() storagePath = secondaryStorage.getMount() url = 'nfs://%s' % (secondaryStorage.getMount().replace(':', '')) marvinApi.copySystemTemplatesToSecondaryStorage(storagePath, "NFS") self.primaryManagementServer.special[ 'initialNFSSecStorageUrl'] = url elif "hyperv" in hvlist: if xenrt.TEC().lookup("EXTERNAL_SMB", False, boolean=True): secondaryStorage = xenrt.ExternalSMBShare() storagePath = secondaryStorage.getMount() url = 'cifs://%s' % (secondaryStorage.getMount().replace( ':', '')) marvinApi.copySystemTemplatesToSecondaryStorage( storagePath, "SMB") self.primaryManagementServer.special[ 'initialSMBSecStorageUrl'] = url if xenrt.TEC().lookup("CCP_CODE_COVERAGE", False, boolean=True): xenrt.TEC().logverbose("Enabling code coverage collection...") for m in self.allManagementServers: if m.execcmd("ls %s/setup_codecoverage.sh" % self.installDir, retval="code") != 0: raise xenrt.XRTError( "CCP_CODE_COVERAGE set but setup_codecoverage.sh not found in build" ) m.execcmd("cd %s && ./setup_codecoverage.sh" % self.installDir) self.restart() xenrt.TEC().logverbose("...done") commit = None try: commit = self.primaryManagementServer.execcmd( "cloudstack-sccs").strip() xenrt.TEC().logverbose( "Management server was built from commit %s" % commit) except: xenrt.TEC().warning( "Error when trying to identify management server version") if commit: expectedCommit = xenrt.getCCPCommit( self.primaryManagementServer.distro) if expectedCommit and commit != expectedCommit: raise xenrt.XRTError( "Management server commit %s does not match expected commit %s" % (commit, expectedCommit))
def getNetmask(self, key, ref): return xenrt.getNetworkParam(ref.get("XRT_VlanName", "NPRI"), "SUBNETMASK")
def run(self, arglist): sftp = self.runner.sftpClient() sftp.copyTreeTo("%s/data/tests/marvin" % xenrt.TEC().lookup("XENRT_BASE"), "/root/marvin-scripts") try: testData = json.loads(self.runner.execguest("/root/marvin-scripts/getDefaultConfig.py")) except: xenrt.TEC().logverbose("test_data not supported") else: # Older versions of marvin don't have configurableData. # Initialise it to an empty dict here so we don't get exceptions # later on if not testData.has_key('configurableData'): testData['configurableData'] = {} if self.args.has_key("resources"): resources = self.args['resources'].split(",") else: resources = [] if "nfs" in resources: nfspath = xenrt.ExternalNFSShare().getMount() testData['nfs'] = {"url": "nfs://%s" % nfspath, "name": "Test NFS Storage"} if "iscsi" in resources: lun = xenrt.ISCSITemporaryLun(100) testData['iscsi'] = {"url": "iscsi://%s/%s/%d" % (lun.getServer(), lun.getTargetName(), lun.getLunID()), "name": "Test iSCSI Storage"} testData['configurableData']['iscsi'] = {"url": "iscsi://%s/%s/%d" % (lun.getServer(), lun.getTargetName(), lun.getLunID()), "name": "Test iSCSI Storage"} if "portableip" in resources: range = xenrt.StaticIP4Addr().getIPRange(4) testData['configurableData']['portableIpRange']['startip'] = range[0].getAddr() testData['configurableData']['portableIpRange']['endip'] = range[-1].getAddr() testData['configurableData']['portableIpRange']['gateway'] = xenrt.getNetworkParam("NPRI", "GATEWAY") testData['configurableData']['portableIpRange']['netmask'] = xenrt.getNetworkParam("NPRI", "SUBNETMASK") testData['configurableData']['portableIpRange']['vlan'] = 1000 if "netscaler" in resources: netscaler = NetScaler.setupNetScalerVpx('NetScaler-VPX') netscaler.applyLicense(netscaler.getLicenseFileFromXenRT()) testData['configurableData']['netscaler']['ipaddress'] = netscaler.managementIp testData['configurableData']['netscaler']['username'] = '******' testData['configurableData']['netscaler']['password'] = '******' testData['configurableData']['netscaler']['networkdevicetype'] = 'NetscalerVPXLoadBalancer' testData['configurableData']['netscaler']['publicinterface'] = '1/1' testData['configurableData']['netscaler']['privateinterface'] = '1/1' testData['configurableData']['netscaler']['numretries'] = '2' if self.args['hypervisor'].lower() == "hyperv": testData['service_offering']['memory'] = 512 if "service_offerings" in testData: testData['service_offerings']['memory'] = 512 testData['service_offerings']['cpuspeed'] = 500 testData['service_offerings']['tiny']['memory'] = 512 testData['service_offerings']['small']['memory'] = 512 testData['service_offerings']['medium']['memory'] = 512 testData['service_offerings']['big']['memory'] = 512 testData['service_offering']['cpuspeed'] = 500 testData['service_offerings']['tiny']['cpuspeed'] = 500 testData['service_offerings']['small']['cpuspeed'] = 500 testData['service_offerings']['medium']['cpuspeed'] = 500 testData['service_offerings']['big']['cpuspeed'] = 500 testData['hypervisor'] = self.args['hypervisor'] testData['small']['hypervisor'] = self.args['hypervisor'] if 'medium' in testData: testData['medium']['hypervisor'] = self.args['hypervisor'] if 'server' in testData: testData['server']['hypervisor'] = self.args['hypervisor'] if 'server_without_disk' in testData: testData['server_without_disk']['hypervisor'] = self.args['hypervisor'] testData['host_password'] = xenrt.TEC().lookup("ROOT_PASSWORD") testData['configurableData']['host']['password'] = xenrt.TEC().lookup("ROOT_PASSWORD") # ISO replacements if testData['configurableData'].has_key("bootableIso"): testData['configurableData']['bootableIso']['url'] = "%s/centos63_x86-64_xenrtinst.iso" % xenrt.TEC().lookup("EXPORT_ISO_HTTP_STATIC") for i in ["iso", "iso1", "iso2"]: if testData.has_key(i): testData[i]['url'] = "%s/dummy.iso" % xenrt.TEC().lookup("EXPORT_ISO_HTTP_STATIC") with open("%s/testdata.cfg" % xenrt.TEC().getLogdir(), "w") as f: f.write(json.dumps(testData, indent=2)) sftp.copyTo("%s/testdata.cfg" % xenrt.TEC().getLogdir(), "/root/testdata.cfg") self.toolstack.marvinCfg['TestData'] = {'Path': "/root/testdata.cfg"} with open("%s/marvin.cfg" % xenrt.TEC().getLogdir(), "w") as f: f.write(json.dumps(self.toolstack.marvinCfg, indent=2)) sftp.copyTo("%s/marvin.cfg" % xenrt.TEC().getLogdir(), "/root/marvin.cfg")
def setupOutboundNAT(self, privateNetwork, publicNetwork): self.cli("set rnat %s %s -natIP %s" % ( xenrt.getNetworkParam(privateNetwork, "SUBNET"), xenrt.getNetworkParam(privateNetwork, "SUBNETMASK"), self.subnetIp(network=publicNetwork))) self.cli('save ns config')