コード例 #1
0
ファイル: test_cpu.py プロジェクト: gbenhaim/lago
    def test_generate_exact_intel_vmx_intel_vmx(self, vcpu=2, model='Penryn'):

        _xml = """
        <cpu match="exact">
            <model>{model}</model>
            <topology cores="1" sockets="{vcpu}" threads="1"/>
            <feature policy="require" name="vmx"/>
        </cpu>
        """.format(
            vcpu=vcpu, model=model
        )
        host = ET.fromstring(
            """
                             <cpu>
                                   <arch>x86_64</arch>
                                   <model>Westmere</model>
                                   <vendor>Intel</vendor>
                                   <feature name='vmx'/>
                             </cpu>
                             """
        )
        empty_cpu = cpu.CPU(spec={}, host_cpu=None)
        self.assertXmlEquivalentOutputs(
            ET.tostring(
                empty_cpu.generate_exact(
                    model=model, vcpu_num=vcpu, host_cpu=host
                )
            ),
            _xml
        )
コード例 #2
0
ファイル: test_cpu.py プロジェクト: gbenhaim/lago
    def test_generate_exact_unknown_vendor(self, vcpu=2, model='Westmere'):

        _xml = """
        <cpu match="exact">
            <model>{model}</model>
            <topology cores="1" sockets="{vcpu}" threads="1"/>
        </cpu>
        """.format(
            vcpu=vcpu, model=model
        )
        host = ET.fromstring(
            """
                             <cpu>
                                   <arch>ppc64</arch>
                                   <model>Power6</model>
                                   <vendor>IBM</vendor>
                             </cpu>
                             """
        )
        empty_cpu = cpu.CPU(spec={}, host_cpu=None)
        self.assertXmlEquivalentOutputs(
            ET.tostring(
                empty_cpu.generate_exact(
                    model=model, vcpu_num=vcpu, host_cpu=host
                )
            ),
            _xml
        )
コード例 #3
0
ファイル: test_cpu.py プロジェクト: bellle/lago
    def test_generate_host_passthrough(self):
        _xml = """
        <cpu mode="host-passthrough">
            <topology sockets="{0}" cores="1" threads="1"/>{1}
        </cpu>
        """
        empty_cpu = cpu.CPU(spec={'memory': 2048}, host_cpu=None)
        vcpu_num = 1
        self.assertXmlEquivalentOutputs(
            ET.tostring(empty_cpu.generate_host_passthrough(vcpu_num)),
            _xml.format(vcpu_num, ''))

        _numa2 = """
        <numa>
            <cell cpus="0" id="0" memory="1023" unit="MiB"/>
            <cell cpus="1" id="1" memory="1023" unit="MiB"/>
        </numa>
        """
        empty_cpu = cpu.CPU(spec={'memory': 2047}, host_cpu=None)
        vcpu_num = 2
        self.assertXmlEquivalentOutputs(
            ET.tostring(empty_cpu.generate_host_passthrough(vcpu_num)),
            _xml.format(vcpu_num, _numa2))

        _numa3 = """
        <numa>
            <cell cpus="0" id="0" memory="682" unit="MiB"/>
            <cell cpus="1" id="1" memory="682" unit="MiB"/>
            <cell cpus="2" id="2" memory="682" unit="MiB"/>
        </numa>
        """
        vcpu_num = 3
        self.assertXmlEquivalentOutputs(
            ET.tostring(empty_cpu.generate_host_passthrough(vcpu_num)),
            _xml.format(vcpu_num, _numa3))

        _numa8 = """
        <numa>
            <cell cpus="0-3" id="0" memory="2048" unit="MiB"/>
            <cell cpus="4-7" id="1" memory="2048" unit="MiB"/>
        </numa>
        """
        empty_cpu = cpu.CPU(spec={'memory': 4096}, host_cpu=None)
        vcpu_num = 8
        self.assertXmlEquivalentOutputs(
            ET.tostring(empty_cpu.generate_host_passthrough(vcpu_num)),
            _xml.format(vcpu_num, _numa8))
コード例 #4
0
ファイル: test_cpu.py プロジェクト: bellle/lago
 def test_init_custom_and_model_not_allowed(self):
     spec = {
         'cpu_custom': 'custom',
         'cpu_model': 'DummyModel',
         'memory': 2048
     }
     with pytest.raises(LagoInitException):
         cpu.CPU(spec=spec, host_cpu=self.get_host_cpu())
コード例 #5
0
 def test_init_default(self):
     spec = {}
     _xml = """
     <cpu mode="host-passthrough">
         <topology sockets="2" cores="1" threads="1"/>
     </cpu>
     """
     def_cpu = cpu.CPU(spec=spec, host_cpu=self.get_host_cpu())
     self.assertXmlEquivalentOutputs(ET.tostring(def_cpu.cpu_xml), _xml)
コード例 #6
0
 def test_generate_host_passthrough(self):
     _xml = """
     <cpu mode="host-passthrough">
         <topology sockets="{0}" cores="1" threads="1"/>
     </cpu>
     """
     empty_cpu = cpu.CPU(spec={}, host_cpu=None)
     for vcpu_num in [1, 9, 11, 120]:
         self.assertXmlEquivalentOutputs(
             ET.tostring(empty_cpu.generate_host_passthrough(vcpu_num)),
             _xml.format(vcpu_num))
コード例 #7
0
ファイル: test_cpu.py プロジェクト: bellle/lago
 def test_init_default(self):
     spec = {'memory': 2048}
     _xml = """
     <cpu mode="host-passthrough">
         <topology sockets="2" cores="1" threads="1"/>
         <numa>
             <cell cpus="0" id="0" memory="1024" unit="MiB"/>
             <cell cpus="1" id="1" memory="1024" unit="MiB"/>
         </numa>
     </cpu>
     """
     def_cpu = cpu.CPU(spec=spec, host_cpu=self.get_host_cpu())
     self.assertXmlEquivalentOutputs(ET.tostring(def_cpu.cpu_xml), _xml)
コード例 #8
0
ファイル: test_cpu.py プロジェクト: bellle/lago
    def test_generate_topology(self):
        _xml = """
        <topology sockets="{vcpu_num}" cores="{cores}" threads="{threads}" />
        """
        combs = [{
            'vcpu_num': tup[0],
            'cores': tup[1],
            'threads': tup[2]
        } for tup in permutations(range(1, 4), 3)]

        empty_cpu = cpu.CPU(spec={'memory': 2048}, host_cpu=None)
        for comb in combs:
            self.assertXmlEquivalentOutputs(
                ET.tostring(empty_cpu.generate_topology(**comb)),
                _xml.format(**comb))
コード例 #9
0
    def __init__(self, vm):
        super(LocalLibvirtVMProvider, self).__init__(vm)
        libvirt_url = config.get('libvirt_url')
        self.libvirt_con = libvirt_utils.get_libvirt_connection(
            name=self.vm.virt_env.uuid + libvirt_url,
            libvirt_url=libvirt_url,
        )

        caps_raw_xml = self.libvirt_con.getCapabilities()
        self._caps = ET.fromstring(caps_raw_xml)

        host_cpu = self._caps.xpath('host/cpu')[0]
        self._cpu = cpu.CPU(spec=self.vm._spec, host_cpu=host_cpu)

        # TO-DO: found a nicer way to expose these attributes to the VM
        self.vm.cpu_model = self.cpu_model
        self.vm.cpu_vendor = self.cpu_vendor
コード例 #10
0
ファイル: vm.py プロジェクト: Kryndex/lago
    def __init__(self, vm):
        super().__init__(vm)
        self._has_guestfs = 'lago.guestfs_tools' in sys.modules
        libvirt_url = config.get('libvirt_url')
        self.libvirt_con = libvirt_utils.get_libvirt_connection(
            name=self.vm.virt_env.uuid + libvirt_url,
            libvirt_url=libvirt_url,
        )
        self._libvirt_ver = self.libvirt_con.getLibVersion()

        caps_raw_xml = self.libvirt_con.getCapabilities()
        self._caps = ET.fromstring(caps_raw_xml)

        host_cpu = self._caps.xpath('host/cpu')[0]
        self._cpu = cpu.CPU(spec=self.vm._spec, host_cpu=host_cpu)

        # TO-DO: found a nicer way to expose these attributes to the VM
        self.vm.cpu_model = self.cpu_model
        self.vm.cpu_vendor = self.cpu_vendor
コード例 #11
0
ファイル: test_cpu.py プロジェクト: bellle/lago
    def test_generate_exact_vendor_mismatch(self, vcpu=2, model='Opteron_G2'):

        _xml = """
        <cpu match="exact">
            <model>{model}</model>
            <topology cores="1" sockets="{vcpu}" threads="1"/>
        </cpu>
        """.format(vcpu=vcpu, model=model)
        host = ET.fromstring("""
                             <cpu>
                                   <arch>x86_64</arch>
                                   <model>Westmere</model>
                                   <vendor>Intel</vendor>
                             </cpu>
                             """)
        empty_cpu = cpu.CPU(spec={'memory': 2048}, host_cpu=None)
        self.assertXmlEquivalentOutputs(
            ET.tostring(
                empty_cpu.generate_exact(model=model,
                                         vcpu_num=vcpu,
                                         host_cpu=host)), _xml)
コード例 #12
0
ファイル: vm.py プロジェクト: bellle/lago
 def cpu(self):
     if self._cpu is None:
         host_cpu = self.caps.xpath('host/cpu')[0]
         self._cpu = cpu.CPU(spec=self.vm._spec, host_cpu=host_cpu)
     return self._cpu