config/sysinv/sysinv/sysinv/sysinv/api/controllers/v1/servicegroup.py

78 lines
2.4 KiB
Python

#
# Copyright (c) 2013-2016 Wind River Systems, Inc.
#
# SPDX-License-Identifier: Apache-2.0
#
# this file is used for service group requests. Keeping naming consistent with sm client
from pecan import rest
import wsme
from wsme import types as wtypes
import wsmeext.pecan as wsme_pecan
from sysinv.api.controllers.v1 import base
from sysinv.api.controllers.v1 import sm_api
from sysinv.openstack.common.gettextutils import _
from sysinv.openstack.common import log
LOG = log.getLogger(__name__)
class SMServiceGroup(base.APIBase):
status = wtypes.text
state = wtypes.text
desired_state = wtypes.text
name = wtypes.text
service_group_name = wtypes.text
node_name = wtypes.text
condition = wtypes.text
uuid = wtypes.text
def __init__(self, **kwargs):
self.fields = ['status', 'state', 'desired_state', 'name',
'service_group_name', 'node_name', 'condition', 'uuid']
for k in self.fields:
setattr(self, k, kwargs.get(k))
class SMServiceGroupCollection(base.APIBase):
"""API representation of a collection of SM service group."""
sm_servicegroup = [SMServiceGroup]
"A list containing SmServiceGroup objects"
def __init__(self, **kwargs):
self._type = 'SmService'
@classmethod
def convert(cls, smservicegroups):
collection = SMServiceGroupCollection()
collection.sm_servicegroup = [SMServiceGroup(**n) for n in smservicegroups]
return collection
class SMServiceGroupController(rest.RestController):
@wsme_pecan.wsexpose(SMServiceGroup, unicode)
def get_one(self, uuid):
sm_servicegroup = sm_api.sm_servicegroup_show(uuid)
if sm_servicegroup is None:
raise wsme.exc.ClientSideError(_(
"Service group %s could not be found") % uuid)
return SMServiceGroup(**sm_servicegroup)
@wsme_pecan.wsexpose(SMServiceGroupCollection)
def get(self):
sm_servicegroups = sm_api.sm_servicegroup_list()
# sm_api returns {'sm_servicegroup':[list of sm_servicegroups]}
if isinstance(sm_servicegroups, dict):
if 'sm_servicegroup' in sm_servicegroups:
sm_servicegroups = sm_servicegroups['sm_servicegroup']
return SMServiceGroupCollection.convert(sm_servicegroups)
LOG.error("Bad response from SM API")
raise wsme.exc.ClientSideError(_(
"Bad response from SM API"))