def test_running_start_error():
    """
    running state test, start an existing guest raising an error
    """
    with patch.dict(virt.__opts__, {"test": False}):
        with patch.dict(
                virt.__salt__,
            {
                "virt.vm_state":
                MagicMock(return_value={"myvm": "stopped"}),
                "virt.update":
                MagicMock(return_value={"definition": False}),
                "virt.start":
                MagicMock(side_effect=[
                    virt.libvirt.libvirtError("libvirt error msg")
                ]),
                "virt.list_domains":
                MagicMock(return_value=["myvm"]),
            },
        ):
            assert virt.running("myvm") == {
                "name": "myvm",
                "changes": {},
                "result": False,
                "comment": "libvirt error msg",
            }
def test_running_no_change(test, running):
    """
    running state test, no change required case.
    """
    with patch.dict(virt.__opts__, {"test": test}):
        update_mock = MagicMock(return_value={"definition": False})
        start_mock = MagicMock(return_value=0)
        with patch.dict(
                virt.__salt__,
            {
                "virt.vm_state": MagicMock(return_value={"myvm": running}),
                "virt.start": start_mock,
                "virt.update": MagicMock(return_value={"definition": False}),
                "virt.list_domains": MagicMock(return_value=["myvm"]),
            },
        ):
            assert virt.running("myvm") == {
                "name":
                "myvm",
                "result":
                True,
                "changes": {
                    "myvm": {
                        "started": True
                    }
                } if running == "shutdown" else {},
                "comment":
                "Domain myvm started" if running == "shutdown" else
                "Domain myvm exists and is running",
            }
            if running == "shutdown" and not test:
                start_mock.assert_called()
            else:
                start_mock.assert_not_called()
Exemple #3
0
def test_running_update(test, running):
    """
    running state test, update an existing guest
    """
    with patch.dict(virt.__opts__, {"test": test}):
        start_mock = MagicMock(return_value=0)
        with patch.dict(
            virt.__salt__,
            {
                "virt.vm_state": MagicMock(return_value={"myvm": running}),
                "virt.update": MagicMock(
                    return_value={"definition": True, "cpu": True}
                ),
                "virt.start": start_mock,
                "virt.list_domains": MagicMock(return_value=["myvm"]),
            },
        ):
            changes = {"definition": True, "cpu": True}
            if running == "shutdown":
                changes["started"] = True
            assert virt.running("myvm", cpu=2) == {
                "name": "myvm",
                "changes": {"myvm": changes},
                "result": True if not test else None,
                "comment": "Domain myvm updated"
                if running == "running"
                else "Domain myvm updated and started",
            }
            if running == "shutdown" and not test:
                start_mock.assert_called()
            else:
                start_mock.assert_not_called()
def test_running_update_error():
    """
    running state test, update an existing guest raising an error
    """
    with patch.dict(virt.__opts__, {"test": False}):
        update_mock = MagicMock(return_value={
            "definition": True,
            "cpu": False,
            "errors": ["some error"]
        })
        with patch.dict(
                virt.__salt__,
            {
                "virt.vm_state": MagicMock(return_value={"myvm": "running"}),
                "virt.update": update_mock,
                "virt.list_domains": MagicMock(return_value=["myvm"]),
            },
        ):
            assert virt.running("myvm", cpu=2) == {
                "name": "myvm",
                "changes": {
                    "myvm": {
                        "definition": True,
                        "cpu": False,
                        "errors": ["some error"],
                    }
                },
                "result": True,
                "comment": "Domain myvm updated with live update(s) failures",
            }
            update_mock.assert_called_with(
                "myvm",
                cpu=2,
                mem=None,
                disk_profile=None,
                disks=None,
                nic_profile=None,
                interfaces=None,
                graphics=None,
                live=True,
                connection=None,
                username=None,
                password=None,
                boot=None,
                numatune=None,
                test=False,
                boot_dev=None,
                hypervisor_features=None,
                clock=None,
                serials=None,
                consoles=None,
                stop_on_reboot=False,
                host_devices=None,
            )
Exemple #5
0
    def test_running(self):
        '''
        running state test cases.
        '''
        ret = {
            'name': 'myvm',
            'changes': {},
            'result': True,
            'comment': 'myvm is running'
        }
        with patch.dict(
                virt.__salt__,
            {  # pylint: disable=no-member
                'virt.vm_state': MagicMock(return_value='stopped'),
                'virt.start': MagicMock(return_value=0)
            }):
            ret.update({
                'changes': {
                    'myvm': 'Domain started'
                },
                'comment': 'Domain myvm started'
            })
            self.assertDictEqual(virt.running('myvm'), ret)

        with patch.dict(
                virt.__salt__,
            {  # pylint: disable=no-member
                'virt.vm_state':
                MagicMock(return_value='stopped'),
                'virt.start':
                MagicMock(side_effect=[
                    self.mock_libvirt.libvirtError('libvirt error msg')
                ])
            }):
            ret.update({
                'changes': {},
                'result': False,
                'comment': 'libvirt error msg'
            })
            self.assertDictEqual(virt.running('myvm'), ret)
Exemple #6
0
def test_running_definition_error():
    """
    running state test, update an existing guest raising an error when setting the XML
    """
    with patch.dict(virt.__opts__, {"test": False}):
        with patch.dict(
            virt.__salt__,
            {
                "virt.vm_state": MagicMock(return_value={"myvm": "running"}),
                "virt.update": MagicMock(
                    side_effect=[virt.libvirt.libvirtError("error message")]
                ),
                "virt.list_domains": MagicMock(return_value=["myvm"]),
            },
        ):
            assert virt.running("myvm", cpu=3) == {
                "name": "myvm",
                "changes": {},
                "result": False,
                "comment": "error message",
            }
Exemple #7
0
    def test_running(self):
        '''
        running state test cases.
        '''
        ret = {'name': 'myvm',
               'changes': {},
               'result': True,
               'comment': 'myvm is running'}
        with patch.dict(virt.__salt__, {  # pylint: disable=no-member
                    'virt.vm_state': MagicMock(return_value={'myvm': 'stopped'}),
                    'virt.start': MagicMock(return_value=0),
                }):
            ret.update({'changes': {'myvm': 'Domain started'},
                        'comment': 'Domain myvm started'})
            self.assertDictEqual(virt.running('myvm'), ret)

        init_mock = MagicMock(return_value=True)
        with patch.dict(virt.__salt__, {  # pylint: disable=no-member
                    'virt.vm_state': MagicMock(side_effect=CommandExecutionError('not found')),
                    'virt.init': init_mock,
                    'virt.start': MagicMock(return_value=0)
                }):
            ret.update({'changes': {'myvm': 'Domain defined and started'},
                        'comment': 'Domain myvm defined and started'})
            self.assertDictEqual(virt.running('myvm',
                                              cpu=2,
                                              mem=2048,
                                              image='/path/to/img.qcow2'), ret)
            init_mock.assert_called_with('myvm', cpu=2, mem=2048, image='/path/to/img.qcow2',
                                         os_type=None, arch=None,
                                         disk=None, disks=None, nic=None, interfaces=None,
                                         graphics=None, hypervisor=None,
                                         seed=True, install=True, pub_key=None, priv_key=None,
                                         connection=None, username=None, password=None)

        with patch.dict(virt.__salt__, {  # pylint: disable=no-member
                    'virt.vm_state': MagicMock(side_effect=CommandExecutionError('not found')),
                    'virt.init': init_mock,
                    'virt.start': MagicMock(return_value=0)
                }):
            ret.update({'changes': {'myvm': 'Domain defined and started'},
                        'comment': 'Domain myvm defined and started'})
            disks = [{
                        'name': 'system',
                        'size': 8192,
                        'overlay_image': True,
                        'pool': 'default',
                        'image': '/path/to/image.qcow2'
                     },
                     {
                        'name': 'data',
                        'size': 16834
                     }]
            ifaces = [{
                         'name': 'eth0',
                         'mac': '01:23:45:67:89:AB'
                      },
                      {
                         'name': 'eth1',
                         'type': 'network',
                         'source': 'admin'
                      }]
            graphics = {'type': 'spice', 'listen': {'type': 'address', 'address': '192.168.0.1'}}
            self.assertDictEqual(virt.running('myvm',
                                              cpu=2,
                                              mem=2048,
                                              os_type='linux',
                                              arch='i686',
                                              vm_type='qemu',
                                              disk_profile='prod',
                                              disks=disks,
                                              nic_profile='prod',
                                              interfaces=ifaces,
                                              graphics=graphics,
                                              seed=False,
                                              install=False,
                                              pub_key='/path/to/key.pub',
                                              priv_key='/path/to/key',
                                              connection='someconnection',
                                              username='******',
                                              password='******'), ret)
            init_mock.assert_called_with('myvm',
                                         cpu=2,
                                         mem=2048,
                                         os_type='linux',
                                         arch='i686',
                                         image=None,
                                         disk='prod',
                                         disks=disks,
                                         nic='prod',
                                         interfaces=ifaces,
                                         graphics=graphics,
                                         hypervisor='qemu',
                                         seed=False,
                                         install=False,
                                         pub_key='/path/to/key.pub',
                                         priv_key='/path/to/key',
                                         connection='someconnection',
                                         username='******',
                                         password='******')

        with patch.dict(virt.__salt__, {  # pylint: disable=no-member
                    'virt.vm_state': MagicMock(return_value={'myvm': 'stopped'}),
                    'virt.start': MagicMock(side_effect=[self.mock_libvirt.libvirtError('libvirt error msg')])
                }):
            ret.update({'changes': {}, 'result': False, 'comment': 'libvirt error msg'})
            self.assertDictEqual(virt.running('myvm'), ret)

        # Working update case when running
        with patch.dict(virt.__salt__, {  # pylint: disable=no-member
                    'virt.vm_state': MagicMock(return_value={'myvm': 'running'}),
                    'virt.update': MagicMock(return_value={'definition': True, 'cpu': True})
                }):
            ret.update({'changes': {'myvm': {'definition': True, 'cpu': True}},
                        'result': True,
                        'comment': 'Domain myvm updated, restart to fully apply the changes'})
            self.assertDictEqual(virt.running('myvm', update=True, cpu=2), ret)

        # Working update case when stopped
        with patch.dict(virt.__salt__, {  # pylint: disable=no-member
                    'virt.vm_state': MagicMock(return_value={'myvm': 'stopped'}),
                    'virt.start': MagicMock(return_value=0),
                    'virt.update': MagicMock(return_value={'definition': True})
                }):
            ret.update({'changes': {'myvm': 'Domain updated and started'},
                        'result': True,
                        'comment': 'Domain myvm updated and started'})
            self.assertDictEqual(virt.running('myvm', update=True, cpu=2), ret)

        # Failed live update case
        with patch.dict(virt.__salt__, {  # pylint: disable=no-member
                    'virt.vm_state': MagicMock(return_value={'myvm': 'running'}),
                    'virt.update': MagicMock(return_value={'definition': True, 'cpu': False, 'errors': ['some error']})
                }):
            ret.update({'changes': {'myvm': {'definition': True, 'cpu': False, 'errors': ['some error']}},
                        'result': True,
                        'comment': 'Domain myvm updated, but some live update(s) failed'})
            self.assertDictEqual(virt.running('myvm', update=True, cpu=2), ret)

        # Failed definition update case
        with patch.dict(virt.__salt__, {  # pylint: disable=no-member
                    'virt.vm_state': MagicMock(return_value={'myvm': 'running'}),
                    'virt.update': MagicMock(side_effect=[self.mock_libvirt.libvirtError('error message')])
                }):
            ret.update({'changes': {},
                        'result': False,
                        'comment': 'error message'})
            self.assertDictEqual(virt.running('myvm', update=True, cpu=2), ret)
def test_running_define(test):
    """
    running state test, defining and start a guest the old way
    """
    with patch.dict(virt.__opts__, {"test": test}):
        init_mock = MagicMock(return_value=True)
        start_mock = MagicMock(return_value=0)
        with patch.dict(
                virt.__salt__,
            {
                "virt.vm_state": MagicMock(return_value={"myvm": "stopped"}),
                "virt.init": init_mock,
                "virt.start": start_mock,
                "virt.list_domains": MagicMock(return_value=[]),
            },
        ):
            disks = [
                {
                    "name": "system",
                    "size": 8192,
                    "overlay_image": True,
                    "pool": "default",
                    "image": "/path/to/image.qcow2",
                },
                {
                    "name": "data",
                    "size": 16834
                },
            ]
            ifaces = [
                {
                    "name": "eth0",
                    "mac": "01:23:45:67:89:AB"
                },
                {
                    "name": "eth1",
                    "type": "network",
                    "source": "admin"
                },
            ]
            graphics = {
                "type": "spice",
                "listen": {
                    "type": "address",
                    "address": "192.168.0.1"
                },
            }

            assert virt.running(
                "myvm",
                cpu=2,
                mem=2048,
                os_type="linux",
                arch="i686",
                vm_type="qemu",
                disk_profile="prod",
                disks=disks,
                nic_profile="prod",
                interfaces=ifaces,
                graphics=graphics,
                seed=False,
                install=False,
                pub_key="/path/to/key.pub",
                priv_key="/path/to/key",
                boot_dev="network hd",
                stop_on_reboot=True,
                host_devices=["pci_0000_00_17_0"],
                connection="someconnection",
                username="******",
                password="******",
            ) == {
                "name": "myvm",
                "result": True if not test else None,
                "changes": {
                    "myvm": {
                        "definition": True,
                        "started": True
                    }
                },
                "comment": "Domain myvm defined and started",
            }
            if not test:
                init_mock.assert_called_with(
                    "myvm",
                    cpu=2,
                    mem=2048,
                    os_type="linux",
                    arch="i686",
                    disk="prod",
                    disks=disks,
                    nic="prod",
                    interfaces=ifaces,
                    graphics=graphics,
                    hypervisor="qemu",
                    seed=False,
                    boot=None,
                    numatune=None,
                    install=False,
                    start=False,
                    pub_key="/path/to/key.pub",
                    priv_key="/path/to/key",
                    boot_dev="network hd",
                    hypervisor_features=None,
                    clock=None,
                    stop_on_reboot=True,
                    connection="someconnection",
                    username="******",
                    password="******",
                    serials=None,
                    consoles=None,
                    host_devices=["pci_0000_00_17_0"],
                )
                start_mock.assert_called_with(
                    "myvm",
                    connection="someconnection",
                    username="******",
                    password="******",
                )
            else:
                init_mock.assert_not_called()
                start_mock.assert_not_called()