diff --git a/magnumclient/osc/v1/clusters.py b/magnumclient/osc/v1/clusters.py index 18a03d90..ad05b60c 100644 --- a/magnumclient/osc/v1/clusters.py +++ b/magnumclient/osc/v1/clusters.py @@ -159,10 +159,16 @@ class CreateCluster(command.Command): parser.add_argument( '--master-lb-enabled', dest='master_lb_enabled', - action='store_true', - default=False, - help=_('Indicates whether created clusters should have ' - 'a loadbalancer for API.')) + action='append_const', + default=[], + const=False, + help=_('Enable master LB creation on the new cluster')) + parser.add_argument( + '--master-lb-disabled', + dest='master_lb_enabled', + action='append_const', + const=False, + help=_('Disable master LB creation on the new cluster')) return parser @@ -215,6 +221,20 @@ class CreateCluster(command.Command): if parsed_args.master_lb_enabled: args["master_lb_enabled"] = parsed_args.master_lb_enabled + if len(parsed_args.master_lb_enabled) > 1: + raise exceptions.InvalidAttribute( + '--master-lb-enabled and ' + '--master-lb-disabled are ' + 'mutually exclusive and ' + 'should be specified only once.') + elif len(parsed_args.master_lb_enabled) == 1: + args['master_lb_enabled'] = parsed_args.master_lb_enabled[0] + if (not args['master_lb_enabled'] and + parsed_args.master_count > 1): + raise exceptions.InvalidAttribute( + 'Master node count can only be one if master ' + 'loadbalancer is disabled.') + cluster = mag_client.clusters.create(**args) print("Request to create cluster %s accepted" % cluster.uuid) diff --git a/magnumclient/tests/osc/unit/v1/test_clusters.py b/magnumclient/tests/osc/unit/v1/test_clusters.py index 8b7359c4..f9faa4ac 100644 --- a/magnumclient/tests/osc/unit/v1/test_clusters.py +++ b/magnumclient/tests/osc/unit/v1/test_clusters.py @@ -125,6 +125,25 @@ class TestClusterCreate(TestCluster): self.cmd.take_action(parsed_args) self.clusters_mock.create.assert_called_with(**expected_args) + def test_cluster_create_with_lb_disabled(self): + """Verifies master lb disabled properly parsed.""" + + expected_args = self._default_args + expected_args['master_lb_enabled'] = False + arglist = [ + '--cluster-template', self._cluster.cluster_template_id, + '--master-lb-disabled', + self._cluster.name + ] + verifylist = [ + ('cluster_template', self._cluster.cluster_template_id), + ('master_lb_enabled', [False]), + ('name', self._cluster.name) + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + self.cmd.take_action(parsed_args) + self.clusters_mock.create.assert_called_with(**expected_args) + class TestClusterDelete(TestCluster):