summaryrefslogtreecommitdiff
path: root/openstackclient/network
diff options
context:
space:
mode:
authorRichard Theis <rtheis@us.ibm.com>2016-03-08 15:18:16 -0600
committerRichard Theis <rtheis@us.ibm.com>2016-05-27 12:58:25 -0500
commit6a55e05cbf72509898ccc490ca894d766f34d9dc (patch)
tree72924bf2e12354ad2de51db1b33e3cc9a3e09a93 /openstackclient/network
parent9da02d14eadc39da6f97b3df095af8b0c452a5b4 (diff)
downloadpython-openstackclient-6a55e05cbf72509898ccc490ca894d766f34d9dc.tar.gz
Add network segment command object
Add network segment command object in support of routed networks. This patch set includes documentation, unit tests and functional tests (currently skipped until segments enabled in neutron by default) for the following new commands: - "os network segment list" - "os network segment show" These new commands are currently marked as beta commands. Change-Id: I1a79b48dc6820fe2a39fcceb11c8cae3bda413a0 Partially-Implements: blueprint routed-networks
Diffstat (limited to 'openstackclient/network')
-rw-r--r--openstackclient/network/v2/network_segment.py124
1 files changed, 124 insertions, 0 deletions
diff --git a/openstackclient/network/v2/network_segment.py b/openstackclient/network/v2/network_segment.py
new file mode 100644
index 00000000..d8a91fd2
--- /dev/null
+++ b/openstackclient/network/v2/network_segment.py
@@ -0,0 +1,124 @@
+# 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.
+#
+
+"""Network segment action implementations"""
+
+# TODO(rtheis): Add description and name properties when support is available.
+
+from openstackclient.common import command
+from openstackclient.common import exceptions
+from openstackclient.common import utils
+from openstackclient.i18n import _
+
+
+class ListNetworkSegment(command.Lister):
+ """List network segments
+
+ (Caution: This is a beta command and subject to change.
+ Use global option --enable-beta-commands to enable
+ this command)
+ """
+
+ def get_parser(self, prog_name):
+ parser = super(ListNetworkSegment, self).get_parser(prog_name)
+ parser.add_argument(
+ '--long',
+ action='store_true',
+ default=False,
+ help=_('List additional fields in output'),
+ )
+ parser.add_argument(
+ '--network',
+ metavar='<network>',
+ help=_('List network segments that belong to this '
+ 'network (name or ID)'),
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ if not self.app.options.enable_beta_commands:
+ msg = _('Caution: This is a beta command and subject to '
+ 'change. Use global option --enable-beta-commands '
+ 'to enable this command.')
+ raise exceptions.CommandError(msg)
+
+ network_client = self.app.client_manager.network
+
+ filters = {}
+ if parsed_args.network:
+ _network = network_client.find_network(
+ parsed_args.network,
+ ignore_missing=False
+ )
+ filters = {'network_id': _network.id}
+ data = network_client.segments(**filters)
+
+ headers = (
+ 'ID',
+ 'Network',
+ 'Network Type',
+ 'Segment',
+ )
+ columns = (
+ 'id',
+ 'network_id',
+ 'network_type',
+ 'segmentation_id',
+ )
+ if parsed_args.long:
+ headers = headers + (
+ 'Physical Network',
+ )
+ columns = columns + (
+ 'physical_network',
+ )
+
+ return (headers,
+ (utils.get_item_properties(
+ s, columns,
+ formatters={},
+ ) for s in data))
+
+
+class ShowNetworkSegment(command.ShowOne):
+ """Display network segment details
+
+ (Caution: This is a beta command and subject to change.
+ Use global option --enable-beta-commands to enable
+ this command)
+ """
+
+ def get_parser(self, prog_name):
+ parser = super(ShowNetworkSegment, self).get_parser(prog_name)
+ parser.add_argument(
+ 'network_segment',
+ metavar='<network-segment>',
+ help=_('Network segment to display (ID only)'),
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ if not self.app.options.enable_beta_commands:
+ msg = _('Caution: This is a beta command and subject to '
+ 'change. Use global option --enable-beta-commands '
+ 'to enable this command.')
+ raise exceptions.CommandError(msg)
+
+ client = self.app.client_manager.network
+ obj = client.find_segment(
+ parsed_args.network_segment,
+ ignore_missing=False
+ )
+ columns = tuple(sorted(obj.keys()))
+ data = utils.get_item_properties(obj, columns)
+ return (columns, data)