示例#1
0
    def getPrimaryStorageUrl(self, key, ref):
        if not ref.has_key("XRT_PriStorageType"):
            storageType = "NFS"
        else:
            storageType = ref['XRT_PriStorageType']

        if storageType == "NFS":
            if ref.has_key('XRT_Guest_NFS'):
                ssGuest = xenrt.TEC().registry.guestGet(ref['XRT_Guest_NFS'])
                xenrt.TEC().logverbose(
                    'Using guest %s for primary NFS storage' % (ssGuest.name))
                shareName = 'PS-%s-%s' % (self.currentClusterName, ''.join(
                    random.sample(
                        string.ascii_lowercase + string.ascii_uppercase, 6)))
                storagePath = ssGuest.createLinuxNfsShare(shareName)
                url = 'nfs://%s' % (storagePath.replace(':', ''))
            else:
                primaryStorage = xenrt.ExternalNFSShare()
                url = 'nfs://%s' % (primaryStorage.getMount().replace(':', ''))
        elif storageType == "SMB":
            h = xenrt.GEC().registry.hostGet("RESOURCE_HOST_%s" %
                                             ref['XRT_SMBHostId'])
            ip = h.getFQDN()
            url = "cifs://%s/storage/primary" % (ip)
            ad = xenrt.getADConfig()
        return url
示例#2
0
文件: host.py 项目: thomassa/xenrt
    def reconfigureToStatic(self, ad=False):
        data = self.getWindowsIPConfigData()
        ifname = [
            x for x in data.keys() if data[x].has_key('IPv4 Address') and (
                data[x]['IPv4 Address'] == self.machine.ipaddr or data[x]
                ['IPv4 Address'] == "%s(Preferred)" % self.machine.ipaddr)
        ][0]
        netcfg = xenrt.TEC().lookup(["NETWORK_CONFIG", "DEFAULT"])
        cmd = "netsh interface ip set address \"%s\" static %s %s %s 1" % (
            ifname, self.machine.ipaddr, data[ifname]['Subnet Mask'], [
                x for x in data[ifname]['Default Gateway'].split()
                if re.match("\d+\.\d+\.\d+\.\d+", x)
            ][0])

        ref = self.xmlrpcStart(cmd)
        deadline = xenrt.timenow() + 120

        while True:
            try:
                if self.xmlrpcPoll(ref):
                    break
            except:
                pass
            if xenrt.timenow() > deadline:
                raise xenrt.XRTError("Timed out setting IP to static")
            xenrt.sleep(5)

        if ad:
            dns = xenrt.getADConfig().dns
        else:
            dns = xenrt.TEC().config.lookup("XENRT_SERVER_ADDRESS")
        cmd = "netsh interface ipv4 add dnsservers \"%s\" %s" % (ifname, dns)
        self.xmlrpcExec(cmd)
示例#3
0
文件: host.py 项目: thomassa/xenrt
 def getDomainController(self):
     if not self.domainController:
         ad = xenrt.getADConfig()
         self.domainController = xenrt.lib.generic.StaticOS(
             ad.dcDistro, ad.dcAddress)
         self.domainController.os.enablePowerShellUnrestricted()
     return self.domainController
示例#4
0
    def installCloudAgent(self, msi):
        ad = xenrt.getADConfig()

        if msi.endswith(".msi"):
            self.xmlrpcSendFile(msi, "c:\\hypervagent.msi")
            self.xmlrpcExec(
                "msiexec /i c:\\hypervagent.msi /quiet /qn /norestart /log c:\\cloudagent-install.log SERVICE_USERNAME=%s\\%s SERVICE_PASSWORD=%s"
                % (ad.domainName, ad.adminUser, ad.adminPassword))
        elif msi.endswith(".zip"):
            tempDir = xenrt.TEC().tempDir()
            xenrt.command("unzip %s -d %s" % (msi, tempDir))
            self.xmlrpcCreateDir("c:\\cshyperv")
            self.xmlrpcSendRecursive(tempDir, "c:\\cshyperv")
            self.xmlrpcExec(
                "c:\\cshyperv\\AgentShell.exe --install -u %s\\%s -p %s" %
                (ad.domainName, ad.adminUser, ad.adminPassword))
            data = self.hypervCmd(
                "New-SelfSignedCertificate -DnsName apachecloudstack -CertStoreLocation Cert:\\LocalMachine\\My | Format-Wide -Property Thumbprint -autosize"
            ).strip()
            thumbprint = data.splitlines()[-1]
            self.xmlrpcExec(
                "netsh http add sslcert ipport=0.0.0.0:8250 certhash=%s appid=\"{727beb1c-6e7c-49b2-8fbd-f03dbe481b08}\""
                % thumbprint)
        else:
            raise xenrt.XRTError("Unknown cloud agent file %s" %
                                 os.path.basename(msi))
示例#5
0
文件: host.py 项目: johnmdilley/xenrt
    def reconfigureToStatic(self, ad=False):
        data = self.getWindowsIPConfigData()
        ifname = [x for x in data.keys() if data[x].has_key('IPv4 Address') and (data[x]['IPv4 Address'] == self.machine.ipaddr or data[x]['IPv4 Address'] == "%s(Preferred)" % self.machine.ipaddr)][0]
        netcfg = xenrt.TEC().lookup(["NETWORK_CONFIG", "DEFAULT"])
        cmd = "netsh interface ip set address \"%s\" static %s %s %s 1" % (ifname,
                                                                           self.machine.ipaddr,
                                                                           data[ifname]['Subnet Mask'],
                                                                           [x for x in data[ifname]['Default Gateway'].split() if re.match("\d+\.\d+\.\d+\.\d+", x)][0])

        ref = self.xmlrpcStart(cmd)
        deadline = xenrt.timenow() + 120

        while True:
            try:
                if self.xmlrpcPoll(ref):
                    break
            except:
                pass
            if xenrt.timenow() > deadline:
                raise xenrt.XRTError("Timed out setting IP to static")
            xenrt.sleep(5)

        if ad:
            dns = xenrt.getADConfig().dns
        else:
            dns = xenrt.TEC().config.lookup("XENRT_SERVER_ADDRESS")
        cmd = "netsh interface ipv4 add dnsservers \"%s\" %s" % (ifname, dns)
        self.xmlrpcExec(cmd)
示例#6
0
文件: host.py 项目: johnmdilley/xenrt
    def setupDomainUserPermissions(self):
        ad = xenrt.getADConfig()
        self.xmlrpcExec("net localgroup Administrators %s\\%s /add" % (ad.domainName, ad.adminUser))
        self.xmlrpcExec("net localgroup \"Hyper-V Administrators\" %s\\%s /add" % (ad.domainName, ad.adminUser))

        self.xmlrpcSendFile("%s/data/tests/hyperv/logonasservice.ps1" % xenrt.TEC().lookup("XENRT_BASE"), "c:\\logonasservice.ps1")
        self.enablePowerShellUnrestricted()
        self.xmlrpcExec("powershell.exe c:\\logonasservice.ps1 \"%s\\%s\"" % (ad.domainName, ad.adminUser))
示例#7
0
文件: host.py 项目: johnmdilley/xenrt
    def enableDelegation(self, remoteHost, service):
        remote = remoteHost.xmlrpcGetEnvVar("COMPUTERNAME")
        myhost = self.xmlrpcGetEnvVar("COMPUTERNAME")
        ad = xenrt.getADConfig()
        script = """$ErrorActionPreference = "Stop"
Get-ADComputer %s | Set-AdObject -Add @{"msDS-AllowedToDelegateTo"="%s/%s","%s/%s.%s"}
Get-ADComputer %s -Properties msDS-AllowedToDelegateTo | Select-Object -ExpandProperty msDs-AllowedToDelegateTo
""" % (myhost, service, remote, service, remote, ad.domain, myhost)
        xenrt.TEC().logverbose(self.getDomainController().os.cmdExec(script, powershell=True, returndata=True))
示例#8
0
文件: host.py 项目: thomassa/xenrt
 def joinDefaultDomain(self):
     self.rename(self.getName())
     self.xmlrpcExec("netsh advfirewall set domainprofile state off")
     ad = xenrt.getADConfig()
     self.xmlrpcExec(
         "netdom join %s /domain:%s /userd:%s\\%s /passwordd:%s" %
         (self.getName(), ad.domain, ad.domainName, ad.adminUser,
          ad.adminPassword))
     self.softReboot()
示例#9
0
 def getSecondaryStorageDetails(self, key, ref):
     if ref.has_key('provider') and ref['provider'] == "SMB":
         ad = xenrt.getADConfig()
         return {
             "user": ad.adminUser,
             "password": ad.adminPassword,
             "domain": ad.domainName
         }
     else:
         return None
示例#10
0
    def enableDelegation(self, remoteHost, service):
        remote = remoteHost.xmlrpcGetEnvVar("COMPUTERNAME")
        myhost = self.xmlrpcGetEnvVar("COMPUTERNAME")
        ad = xenrt.getADConfig()
        script = """$ErrorActionPreference = "Stop"
Get-ADComputer %s | Set-AdObject -Add @{"msDS-AllowedToDelegateTo"="%s/%s","%s/%s.%s"}
Get-ADComputer %s -Properties msDS-AllowedToDelegateTo | Select-Object -ExpandProperty msDs-AllowedToDelegateTo
""" % (myhost, service, remote, service, remote, ad.domain, myhost)
        xenrt.TEC().logverbose(self.getDomainController().os.cmdExec(
            script, powershell=True, returndata=True))
示例#11
0
    def copySystemTemplatesToSecondaryStorage(self, storagePath, provider):
        # Load templates for this version
        templates = self.mgtSvr.lookup("SYSTEM_TEMPLATES", None)
        if not templates:
            raise xenrt.XRTError('Failed to find system templates')

        # Check if any non-default system templates have been specified
        # These should be added in the form -D CLOUD_TMPLT/hypervisor=url
        sysTemplates = xenrt.TEC().lookup("CLOUD_TMPLT", {})
        for s in sysTemplates:
            templates[s] = sysTemplates[s]

        # Legacy XenServer template support
        sysTemplateSrcLocation = xenrt.TEC().lookup("CLOUD_SYS_TEMPLATE", None)
        if sysTemplateSrcLocation:
            xenrt.TEC().warning("Use of CLOUD_SYS_TEMPLATE is deprecated, use CLOUD_SYS_TEMPLATES/xenserver instead")
            templates['xenserver'] = sysTemplateSrcLocation

        hvlist = xenrt.TEC().lookup("CLOUD_REQ_SYS_TMPLS", None)
        if hvlist:
            hvlist = hvlist.split(",")
        else:
            hvlist = []
        for t in templates.keys():
            if t not in hvlist:
                del templates[t]
        
        xenrt.TEC().logverbose('Using System Templates: %s' % (templates))
        webdir = xenrt.WebDirectory()
        if provider == 'NFS':
            self.mgtSvr.primaryManagementServer.execcmd('mount -t nfs -o nfsvers=3 %s /media' % (storagePath))
        elif provider == 'SMB':
            ad = xenrt.getADConfig()
            self.mgtSvr.primaryManagementServer.execcmd('mount -t cifs %s /media -o user=%s,password=%s,domain=%s' % (storagePath, ad.adminUser, ad.adminPassword, ad.domainName))
        installSysTmpltLoc = self.mgtSvr.primaryManagementServer.execcmd('find / -name *install-sys-tmplt -ignore_readdir_race 2> /dev/null || true').strip()
        for hv in templates:
            templateFile = xenrt.TEC().getFile(templates[hv])
            xenrt.TEC().logverbose("Using %s system VM template %s (md5sum: %s)" % (hv, templates[hv], xenrt.command("md5sum %s" % templateFile)))
            if templateFile.endswith(".zip") and xenrt.TEC().lookup("WORKAROUND_CS22839", False, boolean=True):
                xenrt.TEC().warning("Using CS-22839 workaround")
                tempDir = xenrt.TEC().tempDir()
                xenrt.command("cd %s && unzip %s" % (tempDir, templateFile))
                dirContents = glob.glob("%s/*" % tempDir)
                if len(dirContents) != 1:
                    raise xenrt.XRTError("Unexpected contents of system template ZIP file")
                templateFile = dirContents[0]
            webdir.copyIn(templateFile) 
            templateUrl = webdir.getURL(os.path.basename(templateFile))

            if provider in ('NFS', 'SMB'):
                self.mgtSvr.primaryManagementServer.execcmd('%s -m /media -u %s -h %s -F' % (installSysTmpltLoc, templateUrl, hv), timeout=60*60)

        if provider in ('NFS', 'SMB'):
            self.mgtSvr.primaryManagementServer.execcmd('umount /media')
        webdir.remove()
示例#12
0
 def getPrimaryStorageDetails(self, key, ref):
     if ref.has_key(
             'XRT_PriStorageType') and ref['XRT_PriStorageType'] == "SMB":
         ad = xenrt.getADConfig()
         return {
             "user": ad.adminUser,
             "password": ad.adminPassword,
             "domain": ad.domainName
         }
     else:
         return None
示例#13
0
    def setupDomainUserPermissions(self):
        ad = xenrt.getADConfig()
        self.xmlrpcExec("net localgroup Administrators %s\\%s /add" %
                        (ad.domainName, ad.adminUser))
        self.xmlrpcExec(
            "net localgroup \"Hyper-V Administrators\" %s\\%s /add" %
            (ad.domainName, ad.adminUser))

        self.xmlrpcSendFile(
            "%s/data/tests/hyperv/logonasservice.ps1" %
            xenrt.TEC().lookup("XENRT_BASE"), "c:\\logonasservice.ps1")
        self.enablePowerShellUnrestricted()
        self.xmlrpcExec("powershell.exe c:\\logonasservice.ps1 \"%s\\%s\"" %
                        (ad.domainName, ad.adminUser))
示例#14
0
文件: host.py 项目: johnmdilley/xenrt
 def installCloudAgent(self, msi):
     ad = xenrt.getADConfig()
     
     if msi.endswith(".msi"):
         self.xmlrpcSendFile(msi, "c:\\hypervagent.msi")
         self.xmlrpcExec("msiexec /i c:\\hypervagent.msi /quiet /qn /norestart /log c:\\cloudagent-install.log SERVICE_USERNAME=%s\\%s SERVICE_PASSWORD=%s" % (ad.domainName, ad.adminUser, ad.adminPassword))
     elif msi.endswith(".zip"):
         tempDir = xenrt.TEC().tempDir()
         xenrt.command("unzip %s -d %s" % (msi, tempDir))
         self.xmlrpcCreateDir("c:\\cshyperv")
         self.xmlrpcSendRecursive(tempDir, "c:\\cshyperv")
         self.xmlrpcExec("c:\\cshyperv\\AgentShell.exe --install -u %s\\%s -p %s" % (ad.domainName, ad.adminUser, ad.adminPassword))
         data = self.hypervCmd("New-SelfSignedCertificate -DnsName apachecloudstack -CertStoreLocation Cert:\\LocalMachine\\My | Format-Wide -Property Thumbprint -autosize").strip()
         thumbprint = data.splitlines()[-1]
         self.xmlrpcExec("netsh http add sslcert ipport=0.0.0.0:8250 certhash=%s appid=\"{727beb1c-6e7c-49b2-8fbd-f03dbe481b08}\"" % thumbprint)
     else:
         raise xenrt.XRTError("Unknown cloud agent file %s" % os.path.basename(msi))
示例#15
0
    def getPrimaryStorageUrl(self, key, ref):
        if not ref.has_key("XRT_PriStorageType"):
            storageType = "NFS"
        else:
            storageType = ref['XRT_PriStorageType']

        if storageType == "NFS":
            if ref.has_key('XRT_Guest_NFS'):
                ssGuest = xenrt.TEC().registry.guestGet(ref['XRT_Guest_NFS'])
                xenrt.TEC().logverbose('Using guest %s for primary NFS storage' % (ssGuest.name))
                shareName = 'PS-%s-%s' % (self.currentClusterName, ''.join(random.sample(string.ascii_lowercase + string.ascii_uppercase, 6)))
                storagePath = ssGuest.createLinuxNfsShare(shareName)
                url = 'nfs://%s' % (storagePath.replace(':',''))
            else:
                primaryStorage = xenrt.ExternalNFSShare()
                url = 'nfs://%s' % (primaryStorage.getMount().replace(':',''))
        elif storageType == "SMB":
            h = xenrt.GEC().registry.hostGet("RESOURCE_HOST_%s" % ref['XRT_SMBHostId'])
            ip = h.getFQDN()
            url =  "cifs://%s/storage/primary" % (ip)
            ad = xenrt.getADConfig()
        return url
示例#16
0
文件: host.py 项目: johnmdilley/xenrt
 def getFQDN(self):
     return "%s.%s" % (self.xmlrpcGetEnvVar("COMPUTERNAME"), xenrt.getADConfig().domain)
示例#17
0
    def copySystemTemplatesToSecondaryStorage(self, storagePath, provider):
        # Load templates for this version
        templates = self.mgtSvr.lookup("SYSTEM_TEMPLATES", None)
        if not templates:
            raise xenrt.XRTError('Failed to find system templates')

        # Check if any non-default system templates have been specified
        # These should be added in the form -D CLOUD_TMPLT/hypervisor=url
        sysTemplates = xenrt.TEC().lookup("CLOUD_TMPLT", {})
        for s in sysTemplates:
            templates[s] = sysTemplates[s]

        # Legacy XenServer template support
        sysTemplateSrcLocation = xenrt.TEC().lookup("CLOUD_SYS_TEMPLATE", None)
        if sysTemplateSrcLocation:
            xenrt.TEC().warning(
                "Use of CLOUD_SYS_TEMPLATE is deprecated, use CLOUD_SYS_TEMPLATES/xenserver instead"
            )
            templates['xenserver'] = sysTemplateSrcLocation

        hvlist = xenrt.TEC().lookup("CLOUD_REQ_SYS_TMPLS", None)
        if hvlist:
            hvlist = hvlist.split(",")
        else:
            hvlist = []
        for t in templates.keys():
            if t not in hvlist:
                del templates[t]

        xenrt.TEC().logverbose('Using System Templates: %s' % (templates))
        webdir = xenrt.WebDirectory()
        if provider == 'NFS':
            self.mgtSvr.primaryManagementServer.execcmd(
                'mount -t nfs -o nfsvers=3 %s /media' % (storagePath))
        elif provider == 'SMB':
            ad = xenrt.getADConfig()
            self.mgtSvr.primaryManagementServer.execcmd(
                'mount -t cifs %s /media -o user=%s,password=%s,domain=%s' %
                (storagePath, ad.adminUser, ad.adminPassword, ad.domainName))
        installSysTmpltLoc = self.mgtSvr.primaryManagementServer.execcmd(
            'find / -name *install-sys-tmplt -ignore_readdir_race 2> /dev/null || true'
        ).strip()
        for hv in templates:
            templateFile = xenrt.TEC().getFile(templates[hv])
            xenrt.TEC().logverbose(
                "Using %s system VM template %s (md5sum: %s)" %
                (hv, templates[hv], xenrt.command("md5sum %s" % templateFile)))
            if templateFile.endswith(".zip") and xenrt.TEC().lookup(
                    "WORKAROUND_CS22839", False, boolean=True):
                xenrt.TEC().warning("Using CS-22839 workaround")
                tempDir = xenrt.TEC().tempDir()
                xenrt.command("cd %s && unzip %s" % (tempDir, templateFile))
                dirContents = glob.glob("%s/*" % tempDir)
                if len(dirContents) != 1:
                    raise xenrt.XRTError(
                        "Unexpected contents of system template ZIP file")
                templateFile = dirContents[0]
            webdir.copyIn(templateFile)
            templateUrl = webdir.getURL(os.path.basename(templateFile))

            if provider in ('NFS', 'SMB'):
                self.mgtSvr.primaryManagementServer.execcmd(
                    '%s -m /media -u %s -h %s -F' %
                    (installSysTmpltLoc, templateUrl, hv),
                    timeout=60 * 60)

        if provider in ('NFS', 'SMB'):
            self.mgtSvr.primaryManagementServer.execcmd('umount /media')
        webdir.remove()
示例#18
0
 def getSecondaryStorageDetails(self, key, ref):
     if ref.has_key('provider') and ref['provider'] == "SMB":
         ad = xenrt.getADConfig()
         return {"user":ad.adminUser, "password": ad.adminPassword, "domain": ad.domainName}
     else:
         return None
示例#19
0
文件: host.py 项目: johnmdilley/xenrt
 def getDomainController(self):
     if not self.domainController:
         ad = xenrt.getADConfig()
         self.domainController = xenrt.lib.generic.StaticOS(ad.dcDistro, ad.dcAddress)
         self.domainController.os.enablePowerShellUnrestricted()
     return self.domainController
示例#20
0
 def getPrimaryStorageDetails(self, key, ref):
     if ref.has_key('XRT_PriStorageType') and ref['XRT_PriStorageType'] == "SMB":
         ad = xenrt.getADConfig()
         return {"user":ad.adminUser, "password": ad.adminPassword, "domain": ad.domainName}
     else:
         return None
示例#21
0
文件: host.py 项目: johnmdilley/xenrt
 def joinDefaultDomain(self):
     self.rename(self.getName())
     self.xmlrpcExec("netsh advfirewall set domainprofile state off")
     ad = xenrt.getADConfig()
     self.xmlrpcExec("netdom join %s /domain:%s /userd:%s\\%s /passwordd:%s" % (self.getName(), ad.domain, ad.domainName, ad.adminUser, ad.adminPassword))
     self.softReboot()
示例#22
0
 def getFQDN(self):
     return "%s.%s" % (self.xmlrpcGetEnvVar("COMPUTERNAME"),
                       xenrt.getADConfig().domain)