Skip to content

Commit 6cae88f

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Add a validation about options for server migrate command"
2 parents c150349 + 7063ffb commit 6cae88f

2 files changed

Lines changed: 207 additions & 0 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,6 +1104,10 @@ def take_action(self, parsed_args):
11041104
disk_over_commit=parsed_args.disk_overcommit,
11051105
)
11061106
else:
1107+
if parsed_args.block_migration or parsed_args.disk_overcommit:
1108+
raise exceptions.CommandError("--live must be specified if "
1109+
"--block-migration or "
1110+
"--disk-overcommit is specified")
11071111
server.migrate()
11081112

11091113
if parsed_args.wait:

openstackclient/tests/unit/compute/v2/test_server.py

Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1185,6 +1185,209 @@ def test_server_lock_multi_servers(self):
11851185
self.run_method_with_servers('lock', 3)
11861186

11871187

1188+
class TestServerMigrate(TestServer):
1189+
1190+
def setUp(self):
1191+
super(TestServerMigrate, self).setUp()
1192+
1193+
methods = {
1194+
'migrate': None,
1195+
'live_migrate': None,
1196+
}
1197+
self.server = compute_fakes.FakeServer.create_one_server(
1198+
methods=methods)
1199+
1200+
# This is the return value for utils.find_resource()
1201+
self.servers_mock.get.return_value = self.server
1202+
1203+
self.servers_mock.migrate.return_value = None
1204+
self.servers_mock.live_migrate.return_value = None
1205+
1206+
# Get the command object to test
1207+
self.cmd = server.MigrateServer(self.app, None)
1208+
1209+
def test_server_migrate_no_options(self):
1210+
arglist = [
1211+
self.server.id,
1212+
]
1213+
verifylist = [
1214+
('live', None),
1215+
('block_migration', False),
1216+
('disk_overcommit', False),
1217+
('wait', False),
1218+
]
1219+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1220+
1221+
result = self.cmd.take_action(parsed_args)
1222+
1223+
self.servers_mock.get.assert_called_with(self.server.id)
1224+
self.server.migrate.assert_called_with()
1225+
self.assertNotCalled(self.servers_mock.live_migrate)
1226+
self.assertIsNone(result)
1227+
1228+
def test_server_migrate_with_block_migration(self):
1229+
arglist = [
1230+
'--block-migration', self.server.id,
1231+
]
1232+
verifylist = [
1233+
('live', None),
1234+
('block_migration', True),
1235+
('disk_overcommit', False),
1236+
('wait', False),
1237+
]
1238+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1239+
1240+
self.assertRaises(exceptions.CommandError, self.cmd.take_action,
1241+
parsed_args)
1242+
1243+
self.servers_mock.get.assert_called_with(self.server.id)
1244+
self.assertNotCalled(self.servers_mock.live_migrate)
1245+
self.assertNotCalled(self.servers_mock.migrate)
1246+
1247+
def test_server_migrate_with_disk_overcommit(self):
1248+
arglist = [
1249+
'--disk-overcommit', self.server.id,
1250+
]
1251+
verifylist = [
1252+
('live', None),
1253+
('block_migration', False),
1254+
('disk_overcommit', True),
1255+
('wait', False),
1256+
]
1257+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1258+
1259+
self.assertRaises(exceptions.CommandError, self.cmd.take_action,
1260+
parsed_args)
1261+
1262+
self.servers_mock.get.assert_called_with(self.server.id)
1263+
self.assertNotCalled(self.servers_mock.live_migrate)
1264+
self.assertNotCalled(self.servers_mock.migrate)
1265+
1266+
def test_server_live_migrate(self):
1267+
arglist = [
1268+
'--live', 'fakehost', self.server.id,
1269+
]
1270+
verifylist = [
1271+
('live', 'fakehost'),
1272+
('block_migration', False),
1273+
('disk_overcommit', False),
1274+
('wait', False),
1275+
]
1276+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1277+
1278+
result = self.cmd.take_action(parsed_args)
1279+
1280+
self.servers_mock.get.assert_called_with(self.server.id)
1281+
self.server.live_migrate.assert_called_with(block_migration=False,
1282+
disk_over_commit=False,
1283+
host='fakehost')
1284+
self.assertNotCalled(self.servers_mock.migrate)
1285+
self.assertIsNone(result)
1286+
1287+
def test_server_block_live_migrate(self):
1288+
arglist = [
1289+
'--live', 'fakehost', '--block-migration', self.server.id,
1290+
]
1291+
verifylist = [
1292+
('live', 'fakehost'),
1293+
('block_migration', True),
1294+
('disk_overcommit', False),
1295+
('wait', False),
1296+
]
1297+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1298+
1299+
result = self.cmd.take_action(parsed_args)
1300+
1301+
self.servers_mock.get.assert_called_with(self.server.id)
1302+
self.server.live_migrate.assert_called_with(block_migration=True,
1303+
disk_over_commit=False,
1304+
host='fakehost')
1305+
self.assertNotCalled(self.servers_mock.migrate)
1306+
self.assertIsNone(result)
1307+
1308+
def test_server_live_migrate_with_disk_overcommit(self):
1309+
arglist = [
1310+
'--live', 'fakehost', '--disk-overcommit', self.server.id,
1311+
]
1312+
verifylist = [
1313+
('live', 'fakehost'),
1314+
('block_migration', False),
1315+
('disk_overcommit', True),
1316+
('wait', False),
1317+
]
1318+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1319+
1320+
result = self.cmd.take_action(parsed_args)
1321+
1322+
self.servers_mock.get.assert_called_with(self.server.id)
1323+
self.server.live_migrate.assert_called_with(block_migration=False,
1324+
disk_over_commit=True,
1325+
host='fakehost')
1326+
self.assertNotCalled(self.servers_mock.migrate)
1327+
self.assertIsNone(result)
1328+
1329+
def test_server_live_migrate_with_false_value_options(self):
1330+
arglist = [
1331+
'--live', 'fakehost', '--no-disk-overcommit',
1332+
'--shared-migration', self.server.id,
1333+
]
1334+
verifylist = [
1335+
('live', 'fakehost'),
1336+
('block_migration', False),
1337+
('disk_overcommit', False),
1338+
('wait', False),
1339+
]
1340+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1341+
1342+
result = self.cmd.take_action(parsed_args)
1343+
1344+
self.servers_mock.get.assert_called_with(self.server.id)
1345+
self.server.live_migrate.assert_called_with(block_migration=False,
1346+
disk_over_commit=False,
1347+
host='fakehost')
1348+
self.assertNotCalled(self.servers_mock.migrate)
1349+
self.assertIsNone(result)
1350+
1351+
@mock.patch.object(common_utils, 'wait_for_status', return_value=True)
1352+
def test_server_migrate_with_wait(self, mock_wait_for_status):
1353+
arglist = [
1354+
'--wait', self.server.id,
1355+
]
1356+
verifylist = [
1357+
('live', None),
1358+
('block_migration', False),
1359+
('disk_overcommit', False),
1360+
('wait', True),
1361+
]
1362+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1363+
1364+
result = self.cmd.take_action(parsed_args)
1365+
1366+
self.servers_mock.get.assert_called_with(self.server.id)
1367+
self.server.migrate.assert_called_with()
1368+
self.assertNotCalled(self.servers_mock.live_migrate)
1369+
self.assertIsNone(result)
1370+
1371+
@mock.patch.object(common_utils, 'wait_for_status', return_value=False)
1372+
def test_server_migrate_with_wait_fails(self, mock_wait_for_status):
1373+
arglist = [
1374+
'--wait', self.server.id,
1375+
]
1376+
verifylist = [
1377+
('live', None),
1378+
('block_migration', False),
1379+
('disk_overcommit', False),
1380+
('wait', True),
1381+
]
1382+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
1383+
1384+
self.assertRaises(SystemExit, self.cmd.take_action, parsed_args)
1385+
1386+
self.servers_mock.get.assert_called_with(self.server.id)
1387+
self.server.migrate.assert_called_with()
1388+
self.assertNotCalled(self.servers_mock.live_migrate)
1389+
1390+
11881391
class TestServerPause(TestServer):
11891392

11901393
def setUp(self):

0 commit comments

Comments
 (0)