Add support for multiple master nodes

Add an optional argument "master_count" to "bay-create". If this
argument is not provided, the default is 1.

Change-Id: Ide15a9a8d50a268214e9209607dff6832528eb2c
Implements: blueprint make-master-ha
This commit is contained in:
Hongbin Lu 2015-08-03 11:12:15 -04:00
parent 3d5e0ed718
commit 292310c722
5 changed files with 44 additions and 5 deletions

View File

@ -91,6 +91,10 @@ class TestCommandLineArgument(utils.TestCase):
self._test_arg_success('bay-create --baymodel xxx --node-count 123')
self.assertTrue(mock_create.called)
self._test_arg_success('bay-create --baymodel xxx --node-count 123 '
'--master-count 123')
self.assertTrue(mock_create.called)
self._test_arg_success('bay-create --baymodel xxx '
'--timeout 15')
self.assertTrue(mock_create.called)

View File

@ -30,6 +30,7 @@ BAY1 = {'id': 123,
'api_address': '172.17.2.1',
'node_addresses': ['172.17.2.3'],
'node_count': 2,
'master_count': 1,
}
BAY2 = {'id': 124,
'uuid': '66666666-7777-8888-9999-000000000002',
@ -39,6 +40,7 @@ BAY2 = {'id': 124,
'api_address': '172.17.2.2',
'node_addresses': ['172.17.2.4'],
'node_count': 2,
'master_count': 1,
}
CREATE_BAY = copy.deepcopy(BAY1)

View File

@ -39,6 +39,7 @@ class ShellTest(base.TestCase):
args = mock.MagicMock()
node_count = 1
args.node_count = node_count
args.master_count = None
args.discovery_url = None
name = "test_bay"
args.name = name
@ -49,7 +50,7 @@ class ShellTest(base.TestCase):
shell.do_bay_create(client_mock, args)
client_mock.bays.create.assert_called_once_with(
name=name, node_count=node_count, baymodel_id=baymodel.uuid,
discovery_url=None, bay_create_timeout=None)
discovery_url=None, bay_create_timeout=None, master_count=None)
def test_do_bay_create_with_discovery_url(self):
client_mock = mock.MagicMock()
@ -60,6 +61,7 @@ class ShellTest(base.TestCase):
args = mock.MagicMock()
node_count = 1
args.node_count = node_count
args.master_count = None
discovery_url = 'discovery_url'
args.discovery_url = discovery_url
name = "test_bay"
@ -71,7 +73,8 @@ class ShellTest(base.TestCase):
shell.do_bay_create(client_mock, args)
client_mock.bays.create.assert_called_once_with(
name=name, node_count=node_count, baymodel_id=baymodel.uuid,
discovery_url=discovery_url, bay_create_timeout=None)
discovery_url=discovery_url, bay_create_timeout=None,
master_count=None)
def test_do_bay_create_with_bay_create_timeout(self):
client_mock = mock.MagicMock()
@ -82,6 +85,7 @@ class ShellTest(base.TestCase):
args = mock.MagicMock()
node_count = 1
args.node_count = node_count
args.master_count = None
name = "test_bay"
args.name = name
baymodel_id_or_name = "test_baymodel_id"
@ -93,7 +97,31 @@ class ShellTest(base.TestCase):
shell.do_bay_create(client_mock, args)
client_mock.bays.create.assert_called_once_with(
name=name, node_count=node_count, baymodel_id=baymodel.uuid,
discovery_url=None, bay_create_timeout=bay_create_timeout)
discovery_url=None, bay_create_timeout=bay_create_timeout,
master_count=None)
def test_do_bay_create_with_master_node_count(self):
client_mock = mock.MagicMock()
baymodel = mock.MagicMock()
baymodel.uuid = 'uuid'
client_mock.baymodels.get.return_value = baymodel
args = mock.MagicMock()
node_count = 1
args.node_count = node_count
master_count = 1
args.master_count = master_count
args.discovery_url = None
name = "test_bay"
args.name = name
baymodel_id_or_name = "test_baymodel_id"
args.baymodel = baymodel_id_or_name
args.timeout = None
shell.do_bay_create(client_mock, args)
client_mock.bays.create.assert_called_once_with(
name=name, node_count=node_count, baymodel_id=baymodel.uuid,
discovery_url=None, bay_create_timeout=None, master_count=1)
def test_do_bay_delete(self):
client_mock = mock.MagicMock()

View File

@ -18,7 +18,7 @@ from magnumclient import exceptions
CREATION_ATTRIBUTES = ['name', 'baymodel_id', 'node_count', 'discovery_url',
'bay_create_timeout']
'bay_create_timeout', 'master_count']
class Bay(base.Resource):

View File

@ -58,7 +58,7 @@ def _show_service(service):
def do_bay_list(cs, args):
"""Print a list of available bays."""
bays = cs.bays.list()
columns = ('uuid', 'name', 'node_count', 'status')
columns = ('uuid', 'name', 'node_count', 'master_count', 'status')
utils.print_list(bays, columns,
{'versions': _print_list_field('versions')})
@ -73,6 +73,10 @@ def do_bay_list(cs, args):
@utils.arg('--node-count',
metavar='<node-count>',
help='The bay node count.')
@utils.arg('--master-count',
metavar='<master-count>',
default=1,
help='The number of master nodes for the bay.')
@utils.arg('--discovery-url',
metavar='<discovery-url>',
help='Specifies custom discovery url for node discovery.')
@ -88,6 +92,7 @@ def do_bay_create(cs, args):
opts['name'] = args.name
opts['baymodel_id'] = baymodel.uuid
opts['node_count'] = args.node_count
opts['master_count'] = args.master_count
opts['discovery_url'] = args.discovery_url
opts['bay_create_timeout'] = args.timeout