Beispiel #1
0
 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")
Beispiel #2
0
 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")
Beispiel #3
0
    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')
Beispiel #4
0
    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
Beispiel #5
0
    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
Beispiel #6
0
 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")
Beispiel #7
0
 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")
Beispiel #8
0
    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))
Beispiel #9
0
 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')
Beispiel #10
0
    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')
Beispiel #11
0
    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))
Beispiel #12
0
 def getNetmask(self, key, ref):
     return xenrt.getNetworkParam(ref.get("XRT_VlanName", "NPRI"), "SUBNETMASK")
Beispiel #13
0
    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")
Beispiel #14
0
 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')
Beispiel #15
0
 def getNetmask(self, key, ref):
     return xenrt.getNetworkParam(ref.get("XRT_VlanName", "NPRI"),
                                  "SUBNETMASK")