[envs] Add --only-spec option to pring spec

Change-Id: I41b9c386af2c6e89dca4f2b8dc8884eca9c2e01e
This commit is contained in:
Andrey Kurilin
2018-03-28 11:29:07 +03:00
parent a3fd27e5a1
commit 094391610c
3 changed files with 23 additions and 11 deletions

View File

@@ -38,7 +38,7 @@ _rally()
OPTS["env_destroy"]="--env --skip-cleanup --json --detailed" OPTS["env_destroy"]="--env --skip-cleanup --json --detailed"
OPTS["env_info"]="--env --json" OPTS["env_info"]="--env --json"
OPTS["env_list"]="--json" OPTS["env_list"]="--json"
OPTS["env_show"]="--env --json" OPTS["env_show"]="--env --json --only-spec"
OPTS["env_use"]="--env --json" OPTS["env_use"]="--env --json"
OPTS["plugin_list"]="--name --platform --plugin-base" OPTS["plugin_list"]="--name --platform --plugin-base"
OPTS["plugin_show"]="--name --platform" OPTS["plugin_show"]="--name --platform"

View File

@@ -98,7 +98,7 @@ class EnvCommands(object):
if do_use: if do_use:
self._use(env.uuid, to_json) self._use(env.uuid, to_json)
self._show(env.data, to_json) self._show(env.data, to_json=to_json, only_spec=False)
return 0 return 0
@cliutils.args("--env", dest="env", type=str, @cliutils.args("--env", dest="env", type=str,
@@ -167,8 +167,10 @@ class EnvCommands(object):
table.align = "l" table.align = "l"
print(table.get_string()) print(table.get_string())
def _show(self, env_data, to_json): def _show(self, env_data, to_json, only_spec):
if to_json: if only_spec:
print(json.dumps(env_data["spec"], indent=2))
elif to_json:
print(json.dumps(env_data, indent=2)) print(json.dumps(env_data, indent=2))
else: else:
table = prettytable.PrettyTable() table = prettytable.PrettyTable()
@@ -189,11 +191,13 @@ class EnvCommands(object):
help="UUID or name of the env.") help="UUID or name of the env.")
@cliutils.args("--json", action="store_true", dest="to_json", @cliutils.args("--json", action="store_true", dest="to_json",
help="Format output as JSON.") help="Format output as JSON.")
@cliutils.args("--only-spec", action="store_true", dest="only_spec",
help="Print only a spec for the environment.")
@cliutils.suppress_warnings @cliutils.suppress_warnings
@envutils.with_default_env() @envutils.with_default_env()
def show(self, api, env=None, to_json=False): def show(self, api, env=None, to_json=False, only_spec=False):
env_data = env_mgr.EnvManager.get(env).data env_data = env_mgr.EnvManager.get(env).data
self._show(env_data, to_json) self._show(env_data, to_json=to_json, only_spec=only_spec)
@cliutils.args("--env", dest="env", type=str, @cliutils.args("--env", dest="env", type=str,
metavar="<uuid>", required=False, metavar="<uuid>", required=False,

View File

@@ -68,7 +68,8 @@ class EnvCommandsTestCase(test.TestCase):
mock_env_manager_create.assert_called_once_with( mock_env_manager_create.assert_called_once_with(
"test_name", {}, description="test_description", extras=None) "test_name", {}, description="test_description", extras=None)
mock_env_commands__show.assert_called_once_with( mock_env_commands__show.assert_called_once_with(
mock_env_manager_create.return_value.data, False) mock_env_manager_create.return_value.data,
to_json=False, only_spec=False)
@mock.patch("rally.env.env_mgr.EnvManager.create") @mock.patch("rally.env.env_mgr.EnvManager.create")
@mock.patch("rally.cli.commands.env.open", create=True) @mock.patch("rally.cli.commands.env.open", create=True)
@@ -245,7 +246,7 @@ class EnvCommandsTestCase(test.TestCase):
name="my best env", name="my best env",
description="description") description="description")
env_data["platforms"] = {} env_data["platforms"] = {}
self.env._show(env_data, False) self.env._show(env_data, False, False)
mock_print.assert_called_once_with( mock_print.assert_called_once_with(
"+-------------+--------------------------------------+\n" "+-------------+--------------------------------------+\n"
"| uuid | a77004a6-7fe5-4b75-a278-009c3c5f6b20 |\n" "| uuid | a77004a6-7fe5-4b75-a278-009c3c5f6b20 |\n"
@@ -259,7 +260,12 @@ class EnvCommandsTestCase(test.TestCase):
@mock.patch("rally.cli.commands.env.print") @mock.patch("rally.cli.commands.env.print")
def test__show_to_json(self, mock_print): def test__show_to_json(self, mock_print):
self.env._show("data", True) self.env._show("data", to_json=True, only_spec=False)
mock_print.assert_called_once_with("\"data\"")
@mock.patch("rally.cli.commands.env.print")
def test__show_only_spec(self, mock_print):
self.env._show({"spec": "data"}, to_json=False, only_spec=True)
mock_print.assert_called_once_with("\"data\"") mock_print.assert_called_once_with("\"data\"")
@mock.patch("rally.env.env_mgr.EnvManager.get") @mock.patch("rally.env.env_mgr.EnvManager.get")
@@ -269,11 +275,13 @@ class EnvCommandsTestCase(test.TestCase):
self.env.show(self.api, env_) self.env.show(self.api, env_)
mock_env_manager_get.assert_called_once_with(env_) mock_env_manager_get.assert_called_once_with(env_)
mock__show.assert_called_once_with( mock__show.assert_called_once_with(
mock_env_manager_get.return_value.data, False) mock_env_manager_get.return_value.data, to_json=False,
only_spec=False)
mock__show.reset_mock() mock__show.reset_mock()
self.env.show(self.api, env_, to_json=True) self.env.show(self.api, env_, to_json=True)
mock__show.assert_called_once_with( mock__show.assert_called_once_with(
mock_env_manager_get.return_value.data, True) mock_env_manager_get.return_value.data, to_json=True,
only_spec=False)
@mock.patch("rally.env.env_mgr.EnvManager.get") @mock.patch("rally.env.env_mgr.EnvManager.get")
@mock.patch("rally.cli.commands.env.print") @mock.patch("rally.cli.commands.env.print")