From 659777d8b728292f3d93eb450d9e34aa5ca007d9 Mon Sep 17 00:00:00 2001 From: Anastasiia Guzikova Date: Mon, 29 Aug 2016 18:43:03 +0300 Subject: [PATCH] Flag --force for nodes deploy command Closes-bug: #1618036 Depends-on: Ic0393f30e5035790f1fbb01bdde0b7d11c32592d Change-Id: I2006c521fb72bc718730cc589602494b3020e89f --- fuelclient/commands/environment.py | 7 ++++++- fuelclient/tests/unit/v2/cli/test_env.py | 15 ++++++++++++++- fuelclient/tests/unit/v2/lib/test_environment.py | 15 +++++++++++++++ fuelclient/v1/environment.py | 6 +++--- 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/fuelclient/commands/environment.py b/fuelclient/commands/environment.py index b91d31f0..96aa4001 100644 --- a/fuelclient/commands/environment.py +++ b/fuelclient/commands/environment.py @@ -497,11 +497,16 @@ class EnvDeployNodes(EnvMixIn, base.BaseCommand): type=int, nargs='+', help='Ids of nodes to deploy.') + parser.add_argument('-f', + '--force', + action='store_true', + help='Force deploy nodes.') return parser def take_action(self, parsed_args): node_ids = parsed_args.nodes - task = self.client.deploy_nodes(parsed_args.env, node_ids) + task = self.client.deploy_nodes(parsed_args.env, node_ids, + force=parsed_args.force) msg = ('Deployment task with id {t} for the nodes {n} within ' 'the environment {e} has been ' diff --git a/fuelclient/tests/unit/v2/cli/test_env.py b/fuelclient/tests/unit/v2/cli/test_env.py index 7a340873..46a4f4a2 100644 --- a/fuelclient/tests/unit/v2/cli/test_env.py +++ b/fuelclient/tests/unit/v2/cli/test_env.py @@ -248,7 +248,20 @@ class TestEnvCommand(test_engine.BaseCLITest): self.exec_command(args) self.m_client.deploy_nodes.return_value = fake_task.get_fake_task() - self.m_client.deploy_nodes.assert_called_once_with(env_id, node_ids) + self.m_client.deploy_nodes.assert_called_once_with(env_id, node_ids, + force=False) + + def test_env_nodes_deploy_force(self): + env_id = 42 + node_ids = [43, 44] + args = ('env nodes deploy --force ' + '--nodes {n[0]} {n[1]} --env {e}').format(e=env_id, n=node_ids) + + self.exec_command(args) + + self.m_client.deploy_nodes.return_value = fake_task.get_fake_task() + self.m_client.deploy_nodes.assert_called_once_with(env_id, node_ids, + force=True) def test_env_nodes_provision(self): env_id = 42 diff --git a/fuelclient/tests/unit/v2/lib/test_environment.py b/fuelclient/tests/unit/v2/lib/test_environment.py index 06ffadff..4e9c29f9 100644 --- a/fuelclient/tests/unit/v2/lib/test_environment.py +++ b/fuelclient/tests/unit/v2/lib/test_environment.py @@ -299,6 +299,21 @@ class TestEnvFacade(test_api.BaseLibTest): self.assertEqual([','.join(str(i) for i in node_ids)], matcher.last_request.qs['nodes']) + def test_env_deploy_nodes_force(self): + env_id = 42 + node_ids = [43, 44] + force = True + + expected_url = self.get_object_uri(self.res_uri, env_id, '/deploy/') + matcher = self.m_request.put(expected_url, json=utils.get_fake_task()) + + self.client.deploy_nodes(env_id, node_ids, force=force) + + self.assertTrue(matcher.called) + self.assertEqual([','.join(str(i) for i in node_ids)], + matcher.last_request.qs['nodes']) + self.assertEqual(matcher.last_request.qs['force'][0], str(int(force))) + def test_env_provision_nodes(self): env_id = 42 node_ids = [43, 44] diff --git a/fuelclient/v1/environment.py b/fuelclient/v1/environment.py index 0e6bc6f0..62435cd9 100644 --- a/fuelclient/v1/environment.py +++ b/fuelclient/v1/environment.py @@ -23,7 +23,7 @@ class EnvironmentClient(base_v1.BaseV1Client): _updatable_attributes = ('name',) provision_nodes_url = 'clusters/{env_id}/provision/?nodes={nodes}' - deploy_nodes_url = 'clusters/{env_id}/deploy/?nodes={nodes}' + deploy_nodes_url = 'clusters/{env_id}/deploy/?nodes={nodes}&force={force}' def create(self, name, release_id, net_segment_type): @@ -96,12 +96,12 @@ class EnvironmentClient(base_v1.BaseV1Client): nodes=nodes) return self.connection.put_request(uri, {}) - def deploy_nodes(self, environment_id, node_ids): + def deploy_nodes(self, environment_id, node_ids, force=False): """Deploy specified nodes for the specified environment.""" nodes = ','.join(str(i) for i in node_ids) uri = self.deploy_nodes_url.format(env_id=environment_id, - nodes=nodes) + nodes=nodes, force=int(force)) return self.connection.put_request(uri, {}) def redeploy_changes(self, environment_id, dry_run=False, noop_run=False):