import click
from osmclient.common.exceptions import ClientException
+from osmclient.common import print_output
from osmclient.cli_commands import utils
from prettytable import PrettyTable
import yaml
is_flag=True,
help="get more details of the NS (project, vim, deployment status, configuration status.",
)
+@click.option(
+ "-o",
+ default="table",
+ is_eager=True,
+ callback=print_output.validate_command_output,
+ help="adapt the output as table, yaml, csv, json, jsonpath",
+)
@click.pass_context
-def ns_list(ctx, filter, long):
+def ns_list(ctx, filter, long, o):
"""list all NS instances
\b
]
)
table.align = "l"
- print(table)
+ # print(table)
+ print_output.print_output(o, table.field_names, table._rows)
print('To get the history of all operations over a NS, run "osm ns-op-list NS_ID"')
print(
'For more details on the current operation, run "osm ns-op-show OPERATION_ID"'
multiple=True,
help="restricts the information to the fields in the filter",
)
+@click.option(
+ "-o",
+ default="table",
+ is_eager=True,
+ callback=print_output.validate_command_output,
+ help="adapt the output as table, yaml, csv, json, jsonpath",
+)
@click.pass_context
-def ns_show(ctx, name, literal, filter):
+def ns_show(ctx, name, literal, filter, o):
"""shows the info of a NS instance
NAME: name or ID of the NS instance
if not filter or k in filter:
table.add_row([k, utils.wrap_text(json.dumps(v, indent=2), width=100)])
table.align = "l"
- print(table)
+ print_output.print_output(o, table.field_names, table._rows)
+ # print(table)
@click.command(name="ns-create", short_help="creates a new Network Service instance")
# under the License.
import click
+from osmclient.common import print_output
from osmclient.cli_commands import utils
from prettytable import PrettyTable
import yaml
is_flag=True,
help="get more details of the NS (project, vim, deployment status, configuration status.",
)
+@click.option(
+ "-o",
+ default="table",
+ is_eager=True,
+ callback=print_output.validate_command_output,
+ help="get more details of the NS (project, vim, deployment status, configuration status.",
+)
@click.pass_context
-def vim_list(ctx, filter, long):
+def vim_list(ctx, filter, long, o):
"""list all VIM accounts"""
logger.debug("")
if filter:
[vim["name"], vim["uuid"], vim["_admin"].get("operationalState", "-")]
)
table.align = "l"
- print(table)
+ # print(table)
+ print_output.print_output(o, table.field_names, table._rows)
@click.command(name="vim-show", short_help="shows the details of a VIM account")
help="restricts the information to the fields in the filter",
)
@click.option("--literal", is_flag=True, help="print literally, no pretty table")
+@click.option(
+ "-o",
+ default="table",
+ is_eager=True,
+ callback=print_output.validate_command_output,
+ help="adapt the output as table, yaml, csv, json, jsonpath",
+)
@click.pass_context
-def vim_show(ctx, name, filter, literal):
+def vim_show(ctx, name, filter, literal, o):
"""shows the details of a VIM account
NAME: name or ID of the VIM account
if not filter or k in filter:
table.add_row([k, utils.wrap_text(text=json.dumps(v, indent=2), width=100)])
table.align = "l"
- print(table)
+ # print(table)
+ print_output.print_output(o, table.field_names, table._rows)
import click
from osmclient.common.exceptions import ClientException
+from osmclient.common import print_output
from osmclient.cli_commands import utils
from prettytable import PrettyTable
import yaml
logger = logging.getLogger("osmclient")
-def vnf_list(ctx, ns, filter, long):
+def vnf_list(ctx, ns, filter, long, o):
logger.debug("")
if ns or filter:
if ns:
]
)
table.align = "l"
- print(table)
+ # print(table)
+ print_output.print_output(o, table.field_names, table._rows)
@click.command(name="vnf-list", short_help="list all NF instances")
help="restricts the list to the NF instances matching the filter.",
)
@click.option("--long", is_flag=True, help="get more details")
+@click.option(
+ "-o",
+ default="table",
+ is_eager=True,
+ callback=print_output.validate_command_output,
+ help="adapt the output as table, yaml, csv, json, jsonpath",
+)
@click.pass_context
-def vnf_list1(ctx, ns, filter, long):
+def vnf_list1(ctx, ns, filter, long, o):
"""list all NF instances"""
logger.debug("")
- vnf_list(ctx, ns, filter, long)
+ vnf_list(ctx, ns, filter, long, o)
@click.command(name="nf-list", short_help="list all NF instances")
help="restricts the list to the NF instances matching the filter.",
)
@click.option("--long", is_flag=True, help="get more details")
+@click.option(
+ "-o",
+ default="table",
+ # is_eager=True,
+ # callback=print_output.validate_command_output,
+ help="adapt the output as table, yaml, csv, json, jsonpath",
+)
@click.pass_context
-def nf_list(ctx, ns, filter, long):
+def nf_list(ctx, ns, filter, long, o):
"""list all NF instances
\b
--filter vnfd-ref=<VNFD_NAME>,vdur.ip-address=<IP_ADDRESS>
"""
logger.debug("")
- vnf_list(ctx, ns, filter, long)
+ vnf_list(ctx, ns, filter, long, o)
@click.command(name="vnf-show", short_help="shows the info of a VNF instance")
help="restricts the information to the fields in the filter",
)
@click.option("--kdu", default=None, help="KDU name (whose status will be shown)")
+@click.option(
+ "-o",
+ default="table",
+ is_eager=True,
+ callback=print_output.validate_command_output,
+ help="adapt the output as table, yaml, csv, json, jsonpath",
+)
@click.pass_context
-def vnf_show(ctx, name, literal, filter, kdu):
+def vnf_show(ctx, name, literal, filter, kdu, o):
"""shows the info of a VNF instance
NAME: name or ID of the VNF instance
if not filter or k in filter:
table.add_row([k, utils.wrap_text(text=json.dumps(v, indent=2), width=100)])
table.align = "l"
- print(table)
+ # print(table)
+ print_output.print_output(o, table.field_names, table._rows)
--- /dev/null
+#######################################################################################
+# Copyright ETSI Contributors and Others.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+# implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#######################################################################################
+import json
+import yaml
+import click
+from prettytable import PrettyTable
+
+from jsonpath_ng import parse
+
+
+def print_output(format, headers, rows):
+ if format == "table":
+ table = PrettyTable(headers)
+ for row in rows:
+ table.add_row(row)
+ print(table)
+ elif format == "json":
+ data = []
+ for row in rows:
+ data.append(dict(zip(headers, row)))
+ json_data = json.dumps(data)
+ print(json_data)
+ elif format == "csv":
+ table = PrettyTable(headers)
+ for row in rows:
+ table.add_row(row)
+ print(table.get_csv_string())
+ elif format == "yaml":
+ data = []
+ for row in rows:
+ data.append(dict(zip(headers, row)))
+ yaml_string = yaml.safe_dump(data, sort_keys=False)
+ print(yaml_string)
+ elif format.startswith("jsonpath="):
+ # JSONPath expression
+ json_path_expression = format.partition("=")[-1]
+ json_path = parse(json_path_expression)
+ data = []
+ for row in rows:
+ data.append(dict(zip(headers, row)))
+ # json_data = json.dumps(data)
+ # Apply JSONPath expression on the JSON object
+ results = [match.value for match in json_path.find(data)]
+ print(results)
+ else:
+ print("Valid values for -o are table, yaml, csv, json, jsonpath")
+
+
+def validate_command_output(ctx, param, value):
+ allowed_commands = [
+ "ns-list",
+ "ns-show",
+ "vim-list",
+ "vim-show",
+ "vnf-list",
+ "vnf-show",
+ ] # List of allowed commands
+
+ if ctx.command.name in allowed_commands:
+ return value
+ # if param:
+ # print (value)
+ else:
+ raise click.BadParameter(
+ f'Option "{param.name}" is not allowed for this command.'
+ )
count=True,
help="increase verbosity (-v INFO, -vv VERBOSE, -vvv DEBUG)",
)
+@click.option(
+ "-o",
+ "--output",
+ help="adapt output format (table, yaml, csv, json, jsonpath)",
+)
@click.option("--all-projects", default=None, is_flag=True, help="include all projects")
@click.option(
"--public/--no-public",
# See the License for the specific language governing permissions and
# limitations under the License.
#######################################################################################
-coverage==7.2.5
+coverage==7.2.7
# via -r requirements-test.in
mock==5.0.2
# via -r requirements-test.in
Click
jinja2
+jsonpath_ng
packaging
prettytable
python-magic
pyyaml==5.4.1
-requests
+requests==2.30.0
verboselogs
# via requests
click==8.1.3
# via -r requirements.in
+decorator==5.1.1
+ # via jsonpath-ng
idna==3.4
# via requests
jinja2==3.1.2
# via -r requirements.in
+jsonpath-ng==1.5.3
+ # via -r requirements.in
markupsafe==2.1.3
# via jinja2
packaging==23.1
# via -r requirements.in
+ply==3.11
+ # via jsonpath-ng
prettytable==3.7.0
# via -r requirements.in
python-magic==0.4.27
# via -r requirements.in
requests==2.30.0
# via -r requirements.in
+six==1.16.0
+ # via jsonpath-ng
urllib3==2.0.2
# via requests
verboselogs==1.7