| # Copyright ETSI Contributors and Others. |
| # All Rights Reserved. |
| # |
| # 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 click |
| from osmclient.cli_commands import utils |
| from prettytable import PrettyTable |
| import json |
| import logging |
| |
| logger = logging.getLogger("osmclient") |
| |
| |
| @click.command(name="sdnc-create", short_help="creates a new SDN controller") |
| @click.option("--name", prompt=True, help="Name to create sdn controller") |
| @click.option("--type", prompt=True, help="SDN controller type") |
| @click.option( |
| "--sdn_controller_version", # hidden=True, |
| help="Deprecated. Use --config {version: sdn_controller_version}", |
| ) |
| @click.option("--url", help="URL in format http[s]://HOST:IP/") |
| @click.option("--ip_address", help="Deprecated. Use --url") # hidden=True, |
| @click.option("--port", help="Deprecated. Use --url") # hidden=True, |
| @click.option( |
| "--switch_dpid", help="Deprecated. Use --config {switch_id: DPID}" # hidden=True, |
| ) |
| @click.option( |
| "--config", |
| help="Extra information for SDN in yaml format, as {switch_id: identity used for the plugin (e.g. DPID: " |
| "Openflow Datapath ID), version: version}", |
| ) |
| @click.option("--user", help="SDN controller username") |
| @click.option( |
| "--password", |
| hide_input=True, |
| confirmation_prompt=True, |
| help="SDN controller password", |
| ) |
| @click.option("--description", default=None, help="human readable description") |
| @click.option( |
| "--wait", |
| required=False, |
| default=False, |
| is_flag=True, |
| help="do not return the control immediately, but keep it until the operation is completed, or timeout", |
| ) |
| @click.pass_context |
| def sdnc_create(ctx, **kwargs): |
| """creates a new SDN controller""" |
| logger.debug("") |
| sdncontroller = { |
| x: kwargs[x] |
| for x in kwargs |
| if kwargs[x] and x not in ("wait", "ip_address", "port", "switch_dpid") |
| } |
| if kwargs.get("port"): |
| print("option '--port' is deprecated, use '--url' instead") |
| sdncontroller["port"] = int(kwargs["port"]) |
| if kwargs.get("ip_address"): |
| print("option '--ip_address' is deprecated, use '--url' instead") |
| sdncontroller["ip"] = kwargs["ip_address"] |
| if kwargs.get("switch_dpid"): |
| print( |
| "option '--switch_dpid' is deprecated, use '--config={switch_id: id|DPID}' instead" |
| ) |
| sdncontroller["dpid"] = kwargs["switch_dpid"] |
| if kwargs.get("sdn_controller_version"): |
| print( |
| "option '--sdn_controller_version' is deprecated, use '--config={version: SDN_CONTROLLER_VERSION}'" |
| " instead" |
| ) |
| utils.check_client_version(ctx.obj, ctx.command.name) |
| ctx.obj.sdnc.create(kwargs["name"], sdncontroller, wait=kwargs["wait"]) |
| |
| |
| @click.command(name="sdnc-update", short_help="updates an SDN controller") |
| @click.argument("name") |
| @click.option("--newname", help="New name for the SDN controller") |
| @click.option("--description", default=None, help="human readable description") |
| @click.option("--type", help="SDN controller type") |
| @click.option("--url", help="URL in format http[s]://HOST:IP/") |
| @click.option( |
| "--config", |
| help="Extra information for SDN in yaml format, as " |
| "{switch_id: identity used for the plugin (e.g. DPID: " |
| "Openflow Datapath ID), version: version}", |
| ) |
| @click.option("--user", help="SDN controller username") |
| @click.option("--password", help="SDN controller password") |
| @click.option("--ip_address", help="Deprecated. Use --url") # hidden=True |
| @click.option("--port", help="Deprecated. Use --url") # hidden=True |
| @click.option( |
| "--switch_dpid", help="Deprecated. Use --config {switch_dpid: DPID}" |
| ) # hidden=True |
| @click.option( |
| "--sdn_controller_version", help="Deprecated. Use --config {version: VERSION}" |
| ) # hidden=True |
| @click.option( |
| "--wait", |
| required=False, |
| default=False, |
| is_flag=True, |
| help="do not return the control immediately, but keep it until the operation is completed, or timeout", |
| ) |
| @click.pass_context |
| def sdnc_update(ctx, **kwargs): |
| """updates an SDN controller |
| |
| NAME: name or ID of the SDN controller |
| """ |
| logger.debug("") |
| sdncontroller = { |
| x: kwargs[x] |
| for x in kwargs |
| if kwargs[x] |
| and x not in ("wait", "ip_address", "port", "switch_dpid", "new_name") |
| } |
| if kwargs.get("newname"): |
| sdncontroller["name"] = kwargs["newname"] |
| if kwargs.get("port"): |
| print("option '--port' is deprecated, use '--url' instead") |
| sdncontroller["port"] = int(kwargs["port"]) |
| if kwargs.get("ip_address"): |
| print("option '--ip_address' is deprecated, use '--url' instead") |
| sdncontroller["ip"] = kwargs["ip_address"] |
| if kwargs.get("switch_dpid"): |
| print( |
| "option '--switch_dpid' is deprecated, use '--config={switch_id: id|DPID}' instead" |
| ) |
| sdncontroller["dpid"] = kwargs["switch_dpid"] |
| if kwargs.get("sdn_controller_version"): |
| print( |
| "option '--sdn_controller_version' is deprecated, use '---config={version: SDN_CONTROLLER_VERSION}'" |
| " instead" |
| ) |
| |
| utils.check_client_version(ctx.obj, ctx.command.name) |
| ctx.obj.sdnc.update(kwargs["name"], sdncontroller, wait=kwargs["wait"]) |
| |
| |
| @click.command(name="sdnc-delete", short_help="deletes an SDN controller") |
| @click.argument("name") |
| @click.option( |
| "--force", is_flag=True, help="forces the deletion bypassing pre-conditions" |
| ) |
| @click.option( |
| "--wait", |
| required=False, |
| default=False, |
| is_flag=True, |
| help="do not return the control immediately, but keep it until the operation is completed, or timeout", |
| ) |
| @click.pass_context |
| def sdnc_delete(ctx, name, force, wait): |
| """deletes an SDN controller |
| |
| NAME: name or ID of the SDN controller to be deleted |
| """ |
| logger.debug("") |
| utils.check_client_version(ctx.obj, ctx.command.name) |
| ctx.obj.sdnc.delete(name, force, wait=wait) |
| |
| |
| @click.command(name="sdnc-list", short_help="list all SDN controllers") |
| @click.option( |
| "--filter", |
| default=None, |
| multiple=True, |
| help="restricts the list to the SDN controllers matching the filter with format: 'k[.k..]=v[&k[.k]=v2]'", |
| ) |
| @click.pass_context |
| def sdnc_list(ctx, filter): |
| """list all SDN controllers""" |
| logger.debug("") |
| utils.check_client_version(ctx.obj, ctx.command.name) |
| if filter: |
| filter = "&".join(filter) |
| resp = ctx.obj.sdnc.list(filter) |
| table = PrettyTable(["sdnc name", "id"]) |
| for sdnc in resp: |
| table.add_row([sdnc["name"], sdnc["_id"]]) |
| table.align = "l" |
| print(table) |
| |
| |
| @click.command(name="sdnc-show", short_help="shows the details of an SDN controller") |
| @click.argument("name") |
| @click.pass_context |
| def sdnc_show(ctx, name): |
| """shows the details of an SDN controller |
| |
| NAME: name or ID of the SDN controller |
| """ |
| logger.debug("") |
| utils.check_client_version(ctx.obj, ctx.command.name) |
| resp = ctx.obj.sdnc.get(name) |
| |
| table = PrettyTable(["key", "attribute"]) |
| for k, v in list(resp.items()): |
| table.add_row([k, json.dumps(v, indent=2)]) |
| table.align = "l" |
| print(table) |