
Fleets (CRUD actions) can be managed by the client. Change-Id: I97ae9f8c0af3cdf9cbd57acfc8b2a859cae52306
308 lines
7.7 KiB
Python
308 lines
7.7 KiB
Python
# Copyright 2014 Red Hat, Inc.
|
|
# 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.
|
|
|
|
from iotronicclient.common.i18n import _
|
|
|
|
|
|
class Resource(object):
|
|
"""Resource class
|
|
|
|
This class is used to manage the various fields that a resource (e.g.
|
|
Chassis, Board, Port) contains. An individual field consists of a
|
|
'field_id' (key) and a 'label' (value). The caller only provides the
|
|
'field_ids' when instantiating the object.
|
|
|
|
Ordering of the 'field_ids' will be preserved as specified by the caller.
|
|
|
|
It also provides the ability to exclude some of these fields when they are
|
|
being used for sorting.
|
|
"""
|
|
|
|
FIELDS = {
|
|
'name': 'Name',
|
|
'project': 'Project',
|
|
'uuid': 'UUID',
|
|
'extra': 'Extra',
|
|
'updated_at': 'Updated At',
|
|
'id': 'ID',
|
|
'created_at': 'Created At',
|
|
'status': 'Status',
|
|
'code': 'Code',
|
|
'mobile': 'Mobile',
|
|
'session': 'Session',
|
|
'location': 'Location',
|
|
'owner': 'Owner',
|
|
'type': 'Type',
|
|
'callable': 'Callable',
|
|
'public': 'Public',
|
|
'onboot': 'On Boot',
|
|
'board_uuid': 'Board uuid',
|
|
'plugin_uuid': 'Plugin uuid',
|
|
'service_uuid': 'Service uuid',
|
|
'plugin': 'Plugin',
|
|
'parameters': 'Parameters',
|
|
'service': 'Service',
|
|
'port': 'Port',
|
|
'public_port': 'Public Port',
|
|
'pid': 'Pid',
|
|
'protocol': 'Protocol',
|
|
'MAC_add': 'Mac Address',
|
|
'VIF_name': 'VIF',
|
|
'network': 'Network',
|
|
'ip': 'ip',
|
|
'description': 'Description',
|
|
|
|
#
|
|
# 'address': 'Address',
|
|
# 'async': 'Async',
|
|
# 'attach': 'Response is attachment',
|
|
# 'chassis_uuid': 'Chassis UUID',
|
|
# 'clean_step': 'Clean Step',
|
|
# 'console_enabled': 'Console Enabled',
|
|
# 'http_methods': 'Supported HTTP methods',
|
|
# 'inspection_finished_at': 'Inspection Finished At',
|
|
# 'inspection_started_at': 'Inspection Started At',
|
|
# 'instance_info': 'Instance Info',
|
|
# 'instance_uuid': 'Instance UUID',
|
|
# 'internal_info': 'Internal Info',
|
|
# 'last_error': 'Last Error',
|
|
# 'maintenance': 'Maintenance',
|
|
# 'maintenance_reason': 'Maintenance Reason',
|
|
# 'mode': 'Mode',
|
|
# 'power_state': 'Power State',
|
|
# 'properties': 'Properties',
|
|
# 'provision_state': 'Provisioning State',
|
|
# 'provision_updated_at': 'Provision Updated At',
|
|
# 'raid_config': 'Current RAID configuration',
|
|
# 'reservation': 'Reservation',
|
|
# 'resource_class': 'Resource Class',
|
|
# 'target_power_state': 'Target Power State',
|
|
# 'target_provision_state': 'Target Provision State',
|
|
# 'target_raid_config': 'Target RAID configuration',
|
|
# 'local_link_connection': 'Local Link Connection',
|
|
# 'pxe_enabled': 'PXE boot enabled',
|
|
# 'portgroup_uuid': 'Portgroup UUID',
|
|
# 'boot_interface': 'Boot Interface',
|
|
# 'console_interface': 'Console Interface',
|
|
# 'deploy_interface': 'Deploy Interface',
|
|
# 'inspect_interface': 'Inspect Interface',
|
|
# 'management_interface': 'Management Interface',
|
|
# 'network_interface': 'Network Interface',
|
|
# 'power_interface': 'Power Interface',
|
|
# 'raid_interface': 'RAID Interface',
|
|
# 'vendor_interface': 'Vendor Interface',
|
|
# 'standalone_ports_supported': 'Standalone Ports Supported',
|
|
|
|
}
|
|
|
|
def __init__(self, field_ids, sort_excluded=None):
|
|
"""Create a Resource object
|
|
|
|
:param field_ids: A list of strings that the Resource object will
|
|
contain. Each string must match an existing key in
|
|
FIELDS.
|
|
:param sort_excluded: Optional. A list of strings that will not be used
|
|
for sorting. Must be a subset of 'field_ids'.
|
|
|
|
:raises: ValueError if sort_excluded contains value not in field_ids
|
|
"""
|
|
self._fields = tuple(field_ids)
|
|
self._labels = tuple([self.FIELDS[x] for x in field_ids])
|
|
if sort_excluded is None:
|
|
sort_excluded = []
|
|
not_existing = set(sort_excluded) - set(field_ids)
|
|
if not_existing:
|
|
raise ValueError(
|
|
_("sort_excluded specified with value not contained in "
|
|
"field_ids. Unknown value(s): %s") % ','.join(not_existing))
|
|
self._sort_fields = tuple(
|
|
[x for x in field_ids if x not in sort_excluded])
|
|
self._sort_labels = tuple([self.FIELDS[x] for x in self._sort_fields])
|
|
|
|
@property
|
|
def fields(self):
|
|
return self._fields
|
|
|
|
@property
|
|
def labels(self):
|
|
return self._labels
|
|
|
|
@property
|
|
def sort_fields(self):
|
|
return self._sort_fields
|
|
|
|
@property
|
|
def sort_labels(self):
|
|
return self._sort_labels
|
|
|
|
|
|
# Boards
|
|
BOARD_DETAILED_RESOURCE = Resource(
|
|
[
|
|
'uuid',
|
|
'name',
|
|
'type',
|
|
'status',
|
|
'code',
|
|
'session',
|
|
'mobile',
|
|
'extra',
|
|
'created_at',
|
|
'updated_at',
|
|
'location',
|
|
'project',
|
|
'owner'
|
|
|
|
],
|
|
sort_excluded=[
|
|
'extra', 'location', 'session',
|
|
])
|
|
BOARD_RESOURCE = Resource(
|
|
['uuid',
|
|
'name',
|
|
'type',
|
|
'status',
|
|
'session',
|
|
])
|
|
|
|
# Plugins
|
|
PLUGIN_DETAILED_RESOURCE = Resource(
|
|
['uuid',
|
|
'name',
|
|
'owner',
|
|
'code',
|
|
'public',
|
|
'callable',
|
|
'created_at',
|
|
'updated_at',
|
|
'extra'
|
|
|
|
],
|
|
sort_excluded=[
|
|
'extra', 'code',
|
|
])
|
|
PLUGIN_RESOURCE = Resource(
|
|
['uuid',
|
|
'name',
|
|
'owner',
|
|
'public',
|
|
'callable',
|
|
])
|
|
|
|
PLUGIN_INJECT_RESOURCE_ON_BOARD = Resource(
|
|
[
|
|
'plugin',
|
|
'status',
|
|
'onboot',
|
|
'created_at',
|
|
'updated_at',
|
|
])
|
|
|
|
PLUGIN_INJECT_RESOURCE = Resource(
|
|
['board_uuid',
|
|
'plugin_uuid',
|
|
'status',
|
|
'onboot',
|
|
'created_at',
|
|
'updated_at',
|
|
])
|
|
|
|
# Service
|
|
SERVICE_DETAILED_RESOURCE = Resource(
|
|
['uuid',
|
|
'name',
|
|
'port',
|
|
'project',
|
|
'protocol',
|
|
'extra',
|
|
'created_at',
|
|
'updated_at',
|
|
],
|
|
sort_excluded=[
|
|
'extra',
|
|
])
|
|
|
|
SERVICE_RESOURCE = Resource(
|
|
['uuid',
|
|
'name',
|
|
'port',
|
|
'protocol'
|
|
])
|
|
|
|
EXPOSED_SERVICE_RESOURCE_ON_BOARD = Resource(
|
|
[
|
|
'service',
|
|
'public_port',
|
|
'created_at',
|
|
'updated_at',
|
|
])
|
|
|
|
EXPOSED_SERVICE_RESOURCE = Resource(
|
|
['board_uuid',
|
|
'service_uuid',
|
|
'public_port',
|
|
'created_at',
|
|
'updated_at',
|
|
])
|
|
|
|
# Port
|
|
|
|
PORT_RESOURCE = Resource(
|
|
['uuid',
|
|
'MAC_add',
|
|
'VIF_name',
|
|
'network',
|
|
'board_uuid',
|
|
'ip'
|
|
]
|
|
)
|
|
|
|
PORT_DETAILED_RESOURCE = Resource(
|
|
['uuid',
|
|
'MAC_add',
|
|
'VIF_name',
|
|
'network',
|
|
'ip',
|
|
'board_uuid',
|
|
'extra',
|
|
'created_at',
|
|
'updated_at',
|
|
],
|
|
sort_excluded=[
|
|
'extra',
|
|
])
|
|
|
|
# Fleet
|
|
|
|
FLEET_DETAILED_RESOURCE = Resource(
|
|
['uuid',
|
|
'name',
|
|
'project',
|
|
'description',
|
|
'extra',
|
|
'created_at',
|
|
'updated_at',
|
|
],
|
|
sort_excluded=[
|
|
'extra',
|
|
])
|
|
|
|
FLEET_RESOURCE = Resource(
|
|
['uuid',
|
|
'name',
|
|
'project',
|
|
'description'
|
|
])
|