23
24
from wsme import types as wtypes
24
25
import wsmeext.pecan as wsme_pecan
26
from ironic.api.controllers.v1 import base
27
from ironic.api.controllers import base
28
from ironic.api.controllers import link
27
29
from ironic.api.controllers.v1 import collection
28
from ironic.api.controllers.v1 import link
29
30
from ironic.api.controllers.v1 import node
30
31
from ironic.api.controllers.v1 import types
31
32
from ironic.api.controllers.v1 import utils as api_utils
32
33
from ironic.common import exception
33
34
from ironic import objects
34
from ironic.openstack.common import excutils
35
from ironic.openstack.common import log
37
LOG = log.getLogger(__name__)
40
37
class ChassisPatchType(types.JsonPatchType):
70
67
setattr(self, k, kwargs.get(k))
73
def convert_with_links(cls, rpc_chassis, expand=True):
74
chassis = Chassis(**rpc_chassis.as_dict())
70
def _convert_with_links(cls, chassis, url, expand=True):
76
72
chassis.unset_fields_except(['uuid', 'description'])
78
74
chassis.nodes = [link.Link.make_link('self',
79
pecan.request.host_url,
81
77
chassis.uuid + "/nodes"),
82
78
link.Link.make_link('bookmark',
83
pecan.request.host_url,
85
81
chassis.uuid + "/nodes",
88
84
chassis.links = [link.Link.make_link('self',
89
pecan.request.host_url,
90
86
'chassis', chassis.uuid),
91
87
link.Link.make_link('bookmark',
92
pecan.request.host_url,
93
89
'chassis', chassis.uuid)
94
def convert_with_links(cls, rpc_chassis, expand=True):
95
chassis = Chassis(**rpc_chassis.as_dict())
96
return cls._convert_with_links(chassis, pecan.request.host_url,
100
def sample(cls, expand=True):
101
time = datetime.datetime(2000, 1, 1, 12, 0, 0)
102
sample = cls(uuid='eaaca217-e7d8-47b4-bb41-3f99f20eed89', extra={},
103
description='Sample chassis', created_at=time)
104
return cls._convert_with_links(sample, 'http://localhost:6385',
98
108
class ChassisCollection(collection.Collection):
99
109
"""API representation of a collection of chassis."""
114
124
collection.next = collection.get_next(limit, url=url, **kwargs)
115
125
return collection
128
def sample(cls, expand=True):
130
sample.chassis = [Chassis.sample(expand=False)]
118
134
class ChassisController(rest.RestController):
119
135
"""REST controller for Chassis."""
191
207
:param chassis: a chassis within the request body.
194
new_chassis = pecan.request.dbapi.create_chassis(chassis.as_dict())
195
except Exception as e:
196
with excutils.save_and_reraise_exception():
209
new_chassis = pecan.request.dbapi.create_chassis(chassis.as_dict())
198
211
return Chassis.convert_with_links(new_chassis)
200
213
@wsme.validate(types.uuid, [ChassisPatchType])