summaryrefslogtreecommitdiff
path: root/openstackclient/network
diff options
context:
space:
mode:
authorAnkur Gupta <ankur.gupta@intel.com>2016-10-27 23:37:27 -0500
committerAkihiro Motoki <amotoki@gmail.com>2017-02-22 15:38:16 -0500
commit1169434f42a751ca9ef37fed2fa2fd04fe8b6f8b (patch)
tree938bc5354945edfd4134e422c01c19f3e7664ab9 /openstackclient/network
parent3746fd2caf1dd3853a4def5f8f5f228bb1b1871a (diff)
downloadpython-openstackclient-1169434f42a751ca9ef37fed2fa2fd04fe8b6f8b.tar.gz
Auto allocated topology for OSC
Implementation of Auto-allocated topology into OSC. Dependency merged and released in SDK v. 0.9.11 Partially Implements: blueprint network-auto-allocated-topology Change-Id: I16120910893b0b26b0f7f77a184b0378448458c5
Diffstat (limited to 'openstackclient/network')
-rw-r--r--openstackclient/network/v2/network_auto_allocated_topology.py136
1 files changed, 136 insertions, 0 deletions
diff --git a/openstackclient/network/v2/network_auto_allocated_topology.py b/openstackclient/network/v2/network_auto_allocated_topology.py
new file mode 100644
index 00000000..36f39200
--- /dev/null
+++ b/openstackclient/network/v2/network_auto_allocated_topology.py
@@ -0,0 +1,136 @@
+# 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.
+#
+
+"""Auto-allocated Topology Implementations"""
+
+import logging
+
+from osc_lib.command import command
+from osc_lib import utils
+
+from openstackclient.i18n import _
+from openstackclient.identity import common as identity_common
+from openstackclient.network import sdk_utils
+
+LOG = logging.getLogger(__name__)
+
+
+def _get_columns(item):
+ column_map = {
+ 'tenant_id': 'project_id',
+ }
+ return sdk_utils.get_osc_show_columns_for_sdk_resource(item, column_map)
+
+
+def _format_check_resource_columns():
+ return ('dry_run',)
+
+
+def _format_check_resource(item):
+ item_id = getattr(item, 'id', False)
+ if item_id == 'dry-run=pass':
+ item.check_resource = 'pass'
+ return item
+
+
+def _get_attrs(client_manager, parsed_args):
+ attrs = {}
+ if parsed_args.project:
+ identity_client = client_manager.identity
+ project_id = identity_common.find_project(
+ identity_client,
+ parsed_args.project,
+ parsed_args.project_domain,
+ ).id
+ attrs['tenant_id'] = project_id
+ if parsed_args.check_resources:
+ attrs['check_resources'] = True
+
+ return attrs
+
+
+# TODO(ankur-gupta-f): Use the SDK resource mapped attribute names once the
+# OSC minimum requirements include SDK 1.0.
+class CreateAutoAllocatedTopology(command.ShowOne):
+ _description = _("Create the auto allocated topology for project")
+
+ def get_parser(self, prog_name):
+ parser = super(CreateAutoAllocatedTopology, self).get_parser(prog_name)
+ parser.add_argument(
+ '--project',
+ metavar='<project>',
+ help=_("Return the auto allocated topology for a given project. "
+ "Default is current project")
+ )
+ identity_common.add_project_domain_option_to_parser(parser)
+ parser.add_argument(
+ '--check-resources',
+ action='store_true',
+ help=_("Validate the requirements for auto allocated topology. "
+ "Does not return a topology.")
+ )
+ parser.add_argument(
+ '--or-show',
+ action='store_true',
+ default=True,
+ help=_("If topology exists returns the topology's "
+ "information (Default)")
+ )
+
+ return parser
+
+ def check_resource_topology(self, client, parsed_args):
+ obj = client.validate_auto_allocated_topology(parsed_args.project)
+
+ columns = _format_check_resource_columns()
+ data = utils.get_item_properties(_format_check_resource(obj),
+ columns,
+ formatters={})
+
+ return (columns, data)
+
+ def get_topology(self, client, parsed_args):
+ obj = client.get_auto_allocated_topology(parsed_args.project)
+ display_columns, columns = _get_columns(obj)
+ data = utils.get_item_properties(obj, columns, formatters={})
+ return (display_columns, data)
+
+ def take_action(self, parsed_args):
+ client = self.app.client_manager.network
+ if parsed_args.check_resources:
+ columns, data = self.check_resource_topology(client, parsed_args)
+ else:
+ columns, data = self.get_topology(client, parsed_args)
+ return (columns, data)
+
+
+# TODO(ankur-gupta-f): Use the SDK resource mapped attribute names once the
+# OSC minimum requirements include SDK 1.0.
+class DeleteAutoAllocatedTopology(command.Command):
+ _description = _("Delete auto allocated topology for project")
+
+ def get_parser(self, prog_name):
+ parser = super(DeleteAutoAllocatedTopology, self).get_parser(prog_name)
+ parser.add_argument(
+ '--project',
+ metavar='<project>',
+ help=_('Delete auto allocated topology for a given project. '
+ 'Default is the current project')
+ )
+ identity_common.add_project_domain_option_to_parser(parser)
+
+ return parser
+
+ def take_action(self, parsed_args):
+ client = self.app.client_manager.network
+ client.delete_auto_allocated_topology(parsed_args.project)