Add CLI option '--skip-sync' to skip time-sync on specified nodes

The option '--skip-sync' can be used with CLI commands 'time-sync'
and 'revert-resume'.

Change-Id: I44ab39de5a46756f1174f6832ab3ea0badc987dc
This commit is contained in:
Dennis Dmitriev 2018-09-14 12:05:02 +03:00
parent dba9bd0b15
commit 10f4ac744e
3 changed files with 43 additions and 15 deletions

1
.gitignore vendored
View File

@ -38,6 +38,7 @@ htmlcov/
.coverage
cover/
.cache
.pytest_cache
nosetests.xml
coverage.xml

View File

@ -334,7 +334,14 @@ class Shell(object):
def do_time_sync(self):
node_name = self.params.node_name
node_names = [node_name] if node_name else None
skip_sync = (self.params.skip_sync or '').split(",")
if node_name:
node_names = [node_name]
else:
node_names = [node.name for node in self.env.get_active_nodes()
if node.name not in skip_sync]
cur_time = self.env.get_curr_time(node_names)
for name in sorted(cur_time):
print('Current time on {0!r} = {1}'.format(name, cur_time[name]))
@ -468,6 +475,12 @@ class Shell(object):
node_name_parser.add_argument('--node-name', '-N',
help='node name',
default=None)
skip_sync_parser = argparse.ArgumentParser(add_help=False)
skip_sync_parser.add_argument('--skip-sync', '-K',
help='Comma-separated list of nodes '
'to skip time-sync',
default=None)
timesync_parser = argparse.ArgumentParser(add_help=False)
timesync_parser.add_argument('--timesync', dest='timesync',
action='store_const', const=True,
@ -678,14 +691,16 @@ class Shell(object):
description="Display allocated IPs for "
"environment slave nodes")
subparsers.add_parser('time-sync',
parents=[name_parser, node_name_parser],
parents=[name_parser, node_name_parser,
skip_sync_parser],
help="Sync time on all env nodes",
description="Sync time on all active nodes "
"of environment starting from "
"admin")
subparsers.add_parser('revert-resume',
parents=[name_parser, snapshot_name_parser,
node_name_parser, timesync_parser],
node_name_parser, timesync_parser,
skip_sync_parser],
help="Revert, resume, sync time on VMs",
description="Revert and resume VMs in selected"
"environment, then optionally sync "

View File

@ -491,20 +491,26 @@ class TestShell(unittest.TestCase):
def test_time_sync(self):
self.env_mocks['env1'].get_curr_time.return_value = {
'node1': 'Thu May 12 18:26:34 MSK 2016',
'node2': 'Thu May 12 18:13:44 MSK 2016',
'slave-01': 'Thu May 12 18:26:34 MSK 2016',
'slave-02': 'Thu May 12 18:13:44 MSK 2016',
}
self.env_mocks['env1'].sync_time.return_value = {
'node1': 'Thu May 12 19:00:00 MSK 2016',
'node2': 'Thu May 12 19:00:00 MSK 2016',
'slave-01': 'Thu May 12 19:00:00 MSK 2016',
'slave-02': 'Thu May 12 19:00:00 MSK 2016',
}
self.env_mocks['env1'].get_active_nodes.return_value = [
self.nodes['env1']['slave-01'], self.nodes['env1']['slave-02']
]
sh = shell.Shell(['time-sync', 'env1'])
sh.execute()
self.client_inst.get_env.assert_called_once_with('env1')
self.env_mocks['env1'].get_curr_time.assert_called_once_with(None)
self.env_mocks['env1'].sync_time.assert_called_once_with(None)
self.env_mocks['env1'].get_curr_time.assert_called_once_with(
['slave-01', 'slave-02'])
self.env_mocks['env1'].sync_time.assert_called_once_with(
['slave-01', 'slave-02'])
def test_time_sync_node(self):
self.env_mocks['env1'].get_curr_time.return_value = {
@ -540,22 +546,28 @@ class TestShell(unittest.TestCase):
def test_revert_resume_with_time_sync(self):
self.env_mocks['env1'].get_curr_time.return_value = {
'node1': 'Thu May 12 18:26:34 MSK 2016',
'node2': 'Thu May 12 18:13:44 MSK 2016',
'slave-01': 'Thu May 12 18:26:34 MSK 2016',
'slave-02': 'Thu May 12 18:13:44 MSK 2016',
}
self.env_mocks['env1'].sync_time.return_value = {
'node1': 'Thu May 12 19:00:00 MSK 2016',
'node2': 'Thu May 12 19:00:00 MSK 2016',
'slave-01': 'Thu May 12 19:00:00 MSK 2016',
'slave-02': 'Thu May 12 19:00:00 MSK 2016',
}
self.env_mocks['env1'].get_active_nodes.return_value = [
self.nodes['env1']['slave-01'], self.nodes['env1']['slave-02']
]
sh = shell.Shell(['revert-resume', '--timesync', 'env1', 'snap1'])
sh.execute()
self.client_inst.get_env.assert_called_once_with('env1')
self.env_mocks['env1'].revert.assert_called_once_with(
'snap1', flag=False, resume=True)
self.env_mocks['env1'].get_curr_time.assert_called_once_with(None)
self.env_mocks['env1'].sync_time.assert_called_once_with(None)
self.env_mocks['env1'].get_curr_time.assert_called_once_with(
['slave-01', 'slave-02'])
self.env_mocks['env1'].sync_time.assert_called_once_with(
['slave-01', 'slave-02'])
def test_version(self):
sh = shell.Shell(['version'])