
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
137 lines
4.6 KiB
Python
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)
|