From 78083116f8da5c0f5b47e259fdf2f81ad3516826 Mon Sep 17 00:00:00 2001 From: Anastasiia Guzikova Date: Mon, 29 Aug 2016 15:37:59 +0300 Subject: [PATCH] Noop run on specified set of nodes Closes-bug: #1617993 Depends-on: Id28dcc65c20d77ea251452114e8c158e10f5f95c Change-Id: I9a8cfca047aebfff94ac0c9966ea5f73b79fc694 --- fuelclient/commands/environment.py | 13 +++++++-- fuelclient/tests/unit/v2/cli/test_env.py | 28 ++++++++++++++++--- .../tests/unit/v2/lib/test_environment.py | 16 +++++++++++ fuelclient/v1/environment.py | 11 +++++--- 4 files changed, 58 insertions(+), 10 deletions(-) diff --git a/fuelclient/commands/environment.py b/fuelclient/commands/environment.py index 96aa4001..cb30a42a 100644 --- a/fuelclient/commands/environment.py +++ b/fuelclient/commands/environment.py @@ -417,7 +417,7 @@ class EnvDeploy(EnvMixIn, base.BaseCommand): '-d', '--dry-run', dest="dry_run", action='store_true', help=dry_run_help_string) parser.add_argument( - '-n', '--noop', dest="noop_run", + '--noop', dest="noop_run", action='store_true', help=noop_run_help_string) return parser @@ -501,12 +501,21 @@ class EnvDeployNodes(EnvMixIn, base.BaseCommand): '--force', action='store_true', help='Force deploy nodes.') + + noop_run_help_string = 'Specifies noop-run deployment ' \ + 'configuring tasks executor to run ' \ + 'puppet and shell tasks in noop mode and ' \ + 'skip all other. Stores noop-run result ' \ + 'summary in nailgun database' + parser.add_argument('--noop', dest="noop_run", action='store_true', + help=noop_run_help_string) return parser def take_action(self, parsed_args): node_ids = parsed_args.nodes task = self.client.deploy_nodes(parsed_args.env, node_ids, - force=parsed_args.force) + force=parsed_args.force, + noop_run=parsed_args.noop_run) 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 46a4f4a2..57f2eaa9 100644 --- a/fuelclient/tests/unit/v2/cli/test_env.py +++ b/fuelclient/tests/unit/v2/cli/test_env.py @@ -130,7 +130,7 @@ class TestEnvCommand(test_engine.BaseCLITest): dry_run = False noop_run = True - args = 'env deploy -n' + args = 'env deploy --noop' args += ' 42' self.exec_command(args) @@ -180,7 +180,7 @@ class TestEnvCommand(test_engine.BaseCLITest): def test_env_redeploy_noop_run(self): dry_run = False noop_run = True - args = 'env redeploy -n' + args = 'env redeploy --noop' args += ' 42' @@ -242,6 +242,7 @@ class TestEnvCommand(test_engine.BaseCLITest): def test_env_nodes_deploy(self): env_id = 42 node_ids = [43, 44] + noop_run = False args = ('env nodes deploy ' '--nodes {n[0]} {n[1]} --env {e}').format(e=env_id, n=node_ids) @@ -249,11 +250,14 @@ class TestEnvCommand(test_engine.BaseCLITest): 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=False) + force=False, + noop_run=noop_run) def test_env_nodes_deploy_force(self): env_id = 42 node_ids = [43, 44] + force = True + noop_run = False args = ('env nodes deploy --force ' '--nodes {n[0]} {n[1]} --env {e}').format(e=env_id, n=node_ids) @@ -261,7 +265,23 @@ class TestEnvCommand(test_engine.BaseCLITest): 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) + noop_run=noop_run, + force=force) + + def test_env_nodes_deploy_noop_run(self): + env_id = 42 + node_ids = [43, 44] + force = False + noop_run = True + args = ('env nodes deploy --noop ' + '--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=force, + noop_run=noop_run) 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 4e9c29f9..d3869649 100644 --- a/fuelclient/tests/unit/v2/lib/test_environment.py +++ b/fuelclient/tests/unit/v2/lib/test_environment.py @@ -314,6 +314,22 @@ class TestEnvFacade(test_api.BaseLibTest): matcher.last_request.qs['nodes']) self.assertEqual(matcher.last_request.qs['force'][0], str(int(force))) + def test_env_deploy_nodes_noop_run(self): + env_id = 42 + node_ids = [43, 44] + noop_run = 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, noop_run=noop_run) + + 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['noop_run'][0], + str(int(noop_run))) + 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 62435cd9..6a785b32 100644 --- a/fuelclient/v1/environment.py +++ b/fuelclient/v1/environment.py @@ -23,7 +23,8 @@ 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}&force={force}' + deploy_nodes_url = ('clusters/{env_id}/deploy/?' + 'nodes={nodes}&force={force}&noop_run={noop_run}') def create(self, name, release_id, net_segment_type): @@ -96,12 +97,14 @@ class EnvironmentClient(base_v1.BaseV1Client): nodes=nodes) return self.connection.put_request(uri, {}) - def deploy_nodes(self, environment_id, node_ids, force=False): + def deploy_nodes(self, environment_id, node_ids, force=False, + noop_run=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, force=int(force)) + uri = self.deploy_nodes_url.format(env_id=environment_id, nodes=nodes, + force=int(force), + noop_run=int(noop_run)) return self.connection.put_request(uri, {}) def redeploy_changes(self, environment_id, dry_run=False, noop_run=False):