python-openstackclient/openstackclient/network/v2/network_auto_allocated_topology.py
Ankur Gupta 1169434f42 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
2017-02-22 15:38:16 -05:00

137 lines
4.6 KiB
Python

# 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)