Merge "Change method signature for mdcreate from md utils"

This commit is contained in:
Jenkins 2015-07-23 12:57:10 +00:00 committed by Gerrit Code Review
commit 2a65f11c10
4 changed files with 52 additions and 12 deletions

View File

@ -233,7 +233,7 @@ class Manager(object):
# creating meta disks # creating meta disks
for md in self.driver.partition_scheme.mds: for md in self.driver.partition_scheme.mds:
mu.mdcreate(md.name, md.level, *md.devices) mu.mdcreate(md.name, md.level, md.devices)
# creating physical volumes # creating physical volumes
for pv in self.driver.partition_scheme.pvs: for pv in self.driver.partition_scheme.pvs:

View File

@ -268,6 +268,48 @@ class TestManager(unittest2.TestCase):
mock.call('swap', '', '', '/dev/mapper/os-swap')] mock.call('swap', '', '', '/dev/mapper/os-swap')]
self.assertEqual(mock_fu_mf_expected_calls, mock_fu_mf.call_args_list) self.assertEqual(mock_fu_mf_expected_calls, mock_fu_mf.call_args_list)
@mock.patch('six.moves.builtins.open')
@mock.patch.object(os, 'symlink')
@mock.patch.object(os, 'remove')
@mock.patch.object(os, 'path')
@mock.patch.object(os, 'listdir')
@mock.patch.object(utils, 'execute')
@mock.patch.object(mu, 'mdclean_all')
@mock.patch.object(lu, 'lvremove_all')
@mock.patch.object(lu, 'vgremove_all')
@mock.patch.object(lu, 'pvremove_all')
@mock.patch.object(fu, 'make_fs')
@mock.patch.object(lu, 'lvcreate')
@mock.patch.object(lu, 'vgcreate')
@mock.patch.object(lu, 'pvcreate')
@mock.patch.object(mu, 'mdcreate')
@mock.patch.object(pu, 'set_gpt_type')
@mock.patch.object(pu, 'set_partition_flag')
@mock.patch.object(pu, 'make_partition')
@mock.patch.object(pu, 'make_label')
@mock.patch.object(hu, 'list_block_devices')
def test_do_partitioning_md(self, mock_hu_lbd, mock_pu_ml, mock_pu_mp,
mock_pu_spf, mock_pu_sgt, mock_mu_m, mock_lu_p,
mock_lu_v, mock_lu_l, mock_fu_mf, mock_pvr,
mock_vgr, mock_lvr, mock_mdr, mock_exec,
mock_os_ld, mock_os_p, mock_os_r, mock_os_s,
mock_open):
mock_os_ld.return_value = ['not_a_rule', 'fake.rules']
mock_os_p.exists.return_value = True
mock_hu_lbd.return_value = test_nailgun.LIST_BLOCK_DEVICES_SAMPLE
self.mgr.driver.partition_scheme.mds = [
objects.MD('fake_md1', 'mirror', devices=['/dev/sda1',
'/dev/sdb1']),
objects.MD('fake_md2', 'mirror', devices=['/dev/sdb3',
'/dev/sdc1']),
]
self.mgr.do_partitioning()
self.assertEqual([mock.call('fake_md1', 'mirror',
['/dev/sda1', '/dev/sdb1']),
mock.call('fake_md2', 'mirror',
['/dev/sdb3', '/dev/sdc1'])],
mock_mu_m.call_args_list)
@mock.patch('six.moves.builtins.open') @mock.patch('six.moves.builtins.open')
@mock.patch.object(os, 'symlink') @mock.patch.object(os, 'symlink')
@mock.patch.object(os, 'remove') @mock.patch.object(os, 'remove')

View File

@ -153,7 +153,7 @@ localhost.localdomain)
mock_bdevs.return_value = [{'device': '/dev/fake1'}, mock_bdevs.return_value = [{'device': '/dev/fake1'},
{'device': '/dev/fake2'}] {'device': '/dev/fake2'}]
mu.mdcreate('/dev/md0', 'mirror', '/dev/fake1', '/dev/fake2') mu.mdcreate('/dev/md0', 'mirror', ['/dev/fake1', '/dev/fake2'])
mock_mdclean_expected_calls = [mock.call('/dev/fake1'), mock_mdclean_expected_calls = [mock.call('/dev/fake1'),
mock.call('/dev/fake2')] mock.call('/dev/fake2')]
self.assertEqual(mock_mdclean_expected_calls, self.assertEqual(mock_mdclean_expected_calls,
@ -171,7 +171,7 @@ localhost.localdomain)
mock_mddisplay.return_value = [{'name': '/dev/md0'}] mock_mddisplay.return_value = [{'name': '/dev/md0'}]
self.assertRaises( self.assertRaises(
errors.MDAlreadyExistsError, mu.mdcreate, errors.MDAlreadyExistsError, mu.mdcreate,
'/dev/md0', 'mirror', '/dev/fake') '/dev/md0', 'mirror', ['/dev/fake'])
@mock.patch.object(mu, 'mddisplay') @mock.patch.object(mu, 'mddisplay')
def test_mdcreate_unsupported_level(self, mock_mddisplay): def test_mdcreate_unsupported_level(self, mock_mddisplay):
@ -180,7 +180,7 @@ localhost.localdomain)
mock_mddisplay.return_value = [{'name': '/dev/md10'}] mock_mddisplay.return_value = [{'name': '/dev/md10'}]
self.assertRaises( self.assertRaises(
errors.MDWrongSpecError, mu.mdcreate, errors.MDWrongSpecError, mu.mdcreate,
'/dev/md0', 'badlevel', '/dev/fake') '/dev/md0', 'badlevel', ['/dev/fake'])
@mock.patch.object(hu, 'list_block_devices') @mock.patch.object(hu, 'list_block_devices')
@mock.patch.object(mu, 'mddisplay') @mock.patch.object(mu, 'mddisplay')
@ -192,7 +192,7 @@ localhost.localdomain)
{'device': '/dev/fake10'}] {'device': '/dev/fake10'}]
self.assertRaises( self.assertRaises(
errors.MDNotFoundError, mu.mdcreate, errors.MDNotFoundError, mu.mdcreate,
'/dev/md0', 'mirror', '/dev/fake1', '/dev/fake2') '/dev/md0', 'mirror', ['/dev/fake1', '/dev/fake2'])
@mock.patch.object(hu, 'list_block_devices') @mock.patch.object(hu, 'list_block_devices')
@mock.patch.object(mu, 'mddisplay') @mock.patch.object(mu, 'mddisplay')
@ -205,7 +205,7 @@ localhost.localdomain)
{'device': '/dev/fake2'}] {'device': '/dev/fake2'}]
self.assertRaises( self.assertRaises(
errors.MDDeviceDuplicationError, mu.mdcreate, errors.MDDeviceDuplicationError, mu.mdcreate,
'/dev/md0', 'mirror', '/dev/fake1', '/dev/fake2') '/dev/md0', 'mirror', ['/dev/fake1', '/dev/fake2'])
@mock.patch.object(utils, 'execute') @mock.patch.object(utils, 'execute')
@mock.patch.object(mu, 'mdclean') @mock.patch.object(mu, 'mdclean')
@ -217,7 +217,7 @@ localhost.localdomain)
mock_mddisplay.return_value = [] mock_mddisplay.return_value = []
mock_bdevs.return_value = [{'device': '/dev/fake1'}, mock_bdevs.return_value = [{'device': '/dev/fake1'},
{'device': '/dev/fake2'}] {'device': '/dev/fake2'}]
mu.mdcreate('/dev/md0', 'mirror', '/dev/fake1', '/dev/fake2') mu.mdcreate('/dev/md0', 'mirror', ['/dev/fake1', '/dev/fake2'])
expected_calls = [mock.call('/dev/fake1'), mock.call('/dev/fake2')] expected_calls = [mock.call('/dev/fake1'), mock.call('/dev/fake2')]
self.assertEqual(mock_mdclean.call_args_list, expected_calls) self.assertEqual(mock_mdclean.call_args_list, expected_calls)

View File

@ -12,6 +12,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import itertools
import re import re
from fuel_agent import errors from fuel_agent import errors
@ -75,7 +76,7 @@ def mddisplay(names=None):
return mds return mds
def mdcreate(mdname, level, device, *args): def mdcreate(mdname, level, devices):
mds = mddisplay() mds = mddisplay()
# check if md device already exists # check if md device already exists
@ -90,8 +91,6 @@ def mdcreate(mdname, level, device, *args):
'Error while creating md device: ' 'Error while creating md device: '
'level must be one of: %s' % ', '.join(supported_levels)) 'level must be one of: %s' % ', '.join(supported_levels))
devices = [device] + list(args)
# check if all necessary devices exist # check if all necessary devices exist
if not set(devices).issubset( if not set(devices).issubset(
set([bd['device'] for bd in hu.list_block_devices(disks=False)])): set([bd['device'] for bd in hu.list_block_devices(disks=False)])):
@ -100,8 +99,7 @@ def mdcreate(mdname, level, device, *args):
# check if devices are not parts of some md array # check if devices are not parts of some md array
if set(devices) & \ if set(devices) & \
set(reduce(lambda x, y: x + y, set(itertools.chain(*[md.get('devices', []) for md in mds])):
[md.get('devices', []) for md in mds], [])):
raise errors.MDDeviceDuplicationError( raise errors.MDDeviceDuplicationError(
'Error while creating md: at least one of devices is ' 'Error while creating md: at least one of devices is '
'already in belongs to some md') 'already in belongs to some md')