Ejemplo n.º 1
0
    def __init__(self, adapter):
        """Creates the config drive manager for PowerVM.

        :param adapter: The pypowervm adapter to communicate with the system.
        """
        self.adapter = adapter

        # Validate that the virtual optical exists
        self.vios_uuid, self.vg_uuid = tsk_vopt.validate_vopt_repo_exists(
            self.adapter, vopt_media_volume_group=_VOPT_VG,
            vopt_media_rep_size=_VOPT_SIZE_GB)
    def __init__(self, adapter):
        """Creates the config drive manager for PowerVM.

        :param adapter: The pypowervm adapter to communicate with the system.
        """
        self.adapter = adapter

        # Validate that the virtual optical exists
        self.vios_uuid, self.vg_uuid = tsk_vopt.validate_vopt_repo_exists(
            self.adapter, vopt_media_volume_group=_VOPT_VG,
            vopt_media_rep_size=_VOPT_SIZE_GB)
Ejemplo n.º 3
0
    def __init__(self, adapter, host_uuid):
        """Creates the config drive manager for PowerVM.

        :param adapter: The pypowervm adapter to communicate with the system.
        :param host_uuid: The UUID of the host system.
        """
        self.adapter = adapter
        self.host_uuid = host_uuid

        # Validate that the virtual optical exists
        self.vios_uuid, self.vg_uuid = tsk_vopt.validate_vopt_repo_exists(
            self.adapter, CONF.powervm.vopt_media_volume_group,
            CONF.powervm.vopt_media_rep_size)
Ejemplo n.º 4
0
    def __init__(self, adapter, host_uuid):
        """Creates the config drive manager for PowerVM.

        :param adapter: The pypowervm adapter to communicate with the system.
        :param host_uuid: The UUID of the host system.
        """
        self.adapter = adapter
        self.host_uuid = host_uuid

        # Validate that the virtual optical exists
        self.vios_uuid, self.vg_uuid = tsk_vopt.validate_vopt_repo_exists(
            self.adapter, CONF.powervm.vopt_media_volume_group,
            CONF.powervm.vopt_media_rep_size)
Ejemplo n.º 5
0
    def test_validate_vopt_vg1(self, mock_vios_get, mock_vg_get):
        """One VIOS, rootvg found; locals are set."""
        # Init objects to test with
        mock_vg = mock.Mock()
        mock_vg.configure_mock(name='rootvg',
                               uuid='1e46bbfd-73b6-3c2a-aeab-a1d3f065e92f',
                               vmedia_repos=['repo'])
        mock_vg_get.return_value = [mock_vg]
        mock_vios = mock.Mock()
        mock_vios.configure_mock(name='the_vios', uuid='vios_uuid',
                                 rmc_state='active')
        mock_vios_get.return_value = [mock_vios]

        # Run
        vio_ret_uuid, vg_ret_uuid = vopt.validate_vopt_repo_exists(self.apt)
        self.assertEqual('vios_uuid', vio_ret_uuid)
        self.assertEqual('1e46bbfd-73b6-3c2a-aeab-a1d3f065e92f', vg_ret_uuid)

        # Validate
        self.assertEqual('1e46bbfd-73b6-3c2a-aeab-a1d3f065e92f',
                         vopt._cur_vg_uuid)
        self.assertEqual('vios_uuid', vopt._cur_vios_uuid)
Ejemplo n.º 6
0
    def test_validate_vopt_vg2(self, mock_vmr_bld, mock_vg_get, mock_vios_get):
        """Dual VIOS, multiple VGs, repos on non-rootvg."""
        vwrap1 = mock.Mock()
        vwrap1.configure_mock(name='vio1', rmc_state='active', uuid='vio_id1',
                              is_mgmt_partition=False)
        vwrap2 = mock.Mock()
        vwrap2.configure_mock(name='vio2', rmc_state='active', uuid='vio_id2',
                              is_mgmt_partition=False)
        mock_vios_get.return_value = [vwrap1, vwrap2]
        vg1 = mock.Mock()
        vg1.configure_mock(name='rootvg', vmedia_repos=[], uuid='vg1')
        vg2 = mock.Mock()
        vg2.configure_mock(name='other1vg', vmedia_repos=[], uuid='vg2')
        vg3 = mock.Mock()
        vg3.configure_mock(name='rootvg', vmedia_repos=[], uuid='vg3')
        vg4 = mock.Mock()
        vg4.configure_mock(name='other2vg', vmedia_repos=[1], uuid='vg4')

        # 1: Find the media repos on non-rootvg on the second VIOS
        mock_vg_get.side_effect = [[vg1, vg2], [vg3, vg4]]

        vio_ret_uuid, vg_ret_uuid = vopt.validate_vopt_repo_exists(self.apt)
        self.assertEqual('vio_id2', vio_ret_uuid)
        self.assertEqual('vg4', vg_ret_uuid)

        mock_vios_get.reset_mock()
        mock_vg_get.reset_mock()

        # 2: At this point, the statics are set.  If we validate again, and the
        # VG.get returns the right one, we should bail out early.
        mock_vg_get.side_effect = None
        mock_vg_get.return_value = vg4

        vio_ret_uuid, vg_ret_uuid = vopt.validate_vopt_repo_exists(self.apt)
        self.assertEqual('vio_id2', vio_ret_uuid)
        self.assertEqual('vg4', vg_ret_uuid)

        # Statics unchanged
        self.assertEqual('vg4', vopt._cur_vg_uuid)
        self.assertEqual('vio_id2', vopt._cur_vios_uuid)

        # We didn't have to query the VIOS
        mock_vios_get.assert_not_called()
        # We only did VG.get once
        self.assertEqual(1, mock_vg_get.call_count)

        mock_vg_get.reset_mock()

        # 3: Same again, but this time the repos is somewhere else.  We should
        # find it.
        vg4.vmedia_repos = []
        vg2.vmedia_repos = [1]
        # The first VG.get is looking for the already-set repos.  The second
        # will be the feed from the first VIOS.  There should be no third call,
        # since we should find the repos on VIOS 2.
        mock_vg_get.side_effect = [vg4, [vg1, vg2]]

        vio_ret_uuid, vg_ret_uuid = vopt.validate_vopt_repo_exists(self.apt)
        self.assertEqual('vio_id1', vio_ret_uuid)
        self.assertEqual('vg2', vg_ret_uuid)

        # And the static values
        self.assertEqual('vg2', vopt._cur_vg_uuid)
        self.assertEqual('vio_id1', vopt._cur_vios_uuid)

        mock_vg_get.reset_mock()
        mock_vios_get.reset_mock()

        # 4: No repository anywhere - need to create one.  The default VG name
        # (rootvg) exists in multiple places.  Ensure we create in the first
        # one, for efficiency.
        vg2.vmedia_repos = []
        mock_vg_get.side_effect = [vg1, [vg1, vg2], [vg3, vg4]]
        vg1.update.return_value = vg1

        vio_ret_uuid, vg_ret_uuid = vopt.validate_vopt_repo_exists(self.apt)
        self.assertEqual('vio_id1', vio_ret_uuid)
        self.assertEqual('vg1', vg_ret_uuid)

        self.assertEqual('vg1', vopt._cur_vg_uuid)
        self.assertEqual('vio_id1', vopt._cur_vios_uuid)
        self.assertEqual([mock_vmr_bld.return_value], vg1.vmedia_repos)

        mock_vg_get.reset_mock()
        mock_vios_get.reset_mock()
        vg1 = mock.MagicMock()

        # 5: No repos, need to create one.  But not on the mgmt partition.
        vwrap1.configure_mock(name='vio1', rmc_state='active', uuid='vio_id1',
                              is_mgmt_partition=True)
        vg3.vmedia_repos = []
        mock_vg_get.side_effect = [vg1, [vg1, vg2], [vg3, vg4]]
        vg3.update.return_value = vg3

        vio_ret_uuid, vg_ret_uuid = vopt.validate_vopt_repo_exists(self.apt)
        self.assertEqual('vio_id2', vio_ret_uuid)
        self.assertEqual('vg3', vg_ret_uuid)

        self.assertEqual('vg3', vopt._cur_vg_uuid)
        self.assertEqual('vio_id2', vopt._cur_vios_uuid)
        self.assertEqual([mock_vmr_bld.return_value], vg3.vmedia_repos)

        mock_vg_get.reset_mock()
        mock_vios_get.reset_mock()
        vg3 = mock.MagicMock()

        # 6: No repos, and a configured VG name that doesn't exist
        vwrap1.configure_mock(name='vio1', rmc_state='active', uuid='vio_id1',
                              is_mgmt_partition=False)
        vg4.vmedia_repos = []
        mock_vg_get.side_effect = [vg1, [vg1, vg2], [vg3, vg4]]

        self.assertRaises(pvm_ex.NoMediaRepoVolumeGroupFound,
                          vopt.validate_vopt_repo_exists, self.apt,
                          vopt_media_volume_group='mythicalvg')

        # 7: No repos - need to create.  Make sure conf setting is honored.
        vg1.vmedia_repos = []

        mock_vg_get.side_effect = [vg1, [vg1, vg2], [vg3, vg4]]
        vg4.update.return_value = vg4

        vio_ret_uuid, vg_ret_uuid = vopt.validate_vopt_repo_exists(
            self.apt, vopt_media_volume_group='other2vg')
        self.assertEqual('vio_id2', vio_ret_uuid)
        self.assertEqual('vg4', vg_ret_uuid)

        self.assertEqual('vg4', vopt._cur_vg_uuid)
        self.assertEqual('vio_id2', vopt._cur_vios_uuid)
        self.assertEqual([mock_vmr_bld.return_value], vg4.vmedia_repos)
        vg1.update.assert_not_called()