Add chassis-create and chassis-delete
Change-Id: I404c513fc39a18967d96f67fc1a7cc68329adb75
This commit is contained in:
parent
92903077b2
commit
2547342ab1
ironicclient
@ -161,3 +161,7 @@ class NoTokenLookupException(Exception):
|
|||||||
class EndpointNotFound(Exception):
|
class EndpointNotFound(Exception):
|
||||||
"""DEPRECATED."""
|
"""DEPRECATED."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class InvalidAttribute(ClientException):
|
||||||
|
pass
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
import copy
|
||||||
import testtools
|
import testtools
|
||||||
|
|
||||||
from ironicclient.tests import utils
|
from ironicclient.tests import utils
|
||||||
@ -27,6 +28,10 @@ CHASSIS = {'id': 42,
|
|||||||
'extra': {},
|
'extra': {},
|
||||||
'description': 'data-center-1-chassis'}
|
'description': 'data-center-1-chassis'}
|
||||||
|
|
||||||
|
CREATE_CHASSIS = copy.deepcopy(CHASSIS)
|
||||||
|
del CREATE_CHASSIS['id']
|
||||||
|
del CREATE_CHASSIS['uuid']
|
||||||
|
|
||||||
fixtures = {
|
fixtures = {
|
||||||
'/v1/chassis':
|
'/v1/chassis':
|
||||||
{
|
{
|
||||||
@ -34,6 +39,10 @@ fixtures = {
|
|||||||
{},
|
{},
|
||||||
{"chassis": [CHASSIS]},
|
{"chassis": [CHASSIS]},
|
||||||
),
|
),
|
||||||
|
'POST': (
|
||||||
|
{},
|
||||||
|
CREATE_CHASSIS,
|
||||||
|
),
|
||||||
},
|
},
|
||||||
'/v1/chassis/%s' % CHASSIS['uuid']:
|
'/v1/chassis/%s' % CHASSIS['uuid']:
|
||||||
{
|
{
|
||||||
@ -41,6 +50,10 @@ fixtures = {
|
|||||||
{},
|
{},
|
||||||
CHASSIS,
|
CHASSIS,
|
||||||
),
|
),
|
||||||
|
'DELETE': (
|
||||||
|
{},
|
||||||
|
None,
|
||||||
|
),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,3 +81,19 @@ class ChassisManagerTest(testtools.TestCase):
|
|||||||
self.assertEqual(self.api.calls, expect)
|
self.assertEqual(self.api.calls, expect)
|
||||||
self.assertEqual(chassis.uuid, CHASSIS['uuid'])
|
self.assertEqual(chassis.uuid, CHASSIS['uuid'])
|
||||||
self.assertEqual(chassis.description, CHASSIS['description'])
|
self.assertEqual(chassis.description, CHASSIS['description'])
|
||||||
|
|
||||||
|
def test_create(self):
|
||||||
|
chassis = self.mgr.create(**CREATE_CHASSIS)
|
||||||
|
expect = [
|
||||||
|
('POST', '/v1/chassis', {}, CREATE_CHASSIS),
|
||||||
|
]
|
||||||
|
self.assertEqual(self.api.calls, expect)
|
||||||
|
self.assertTrue(chassis)
|
||||||
|
|
||||||
|
def test_delete(self):
|
||||||
|
chassis = self.mgr.delete(chassis_id=CHASSIS['uuid'])
|
||||||
|
expect = [
|
||||||
|
('DELETE', '/v1/chassis/%s' % CHASSIS['uuid'], {}, None),
|
||||||
|
]
|
||||||
|
self.assertEqual(self.api.calls, expect)
|
||||||
|
self.assertTrue(chassis is None)
|
||||||
|
@ -15,6 +15,10 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
from ironicclient.common import base
|
from ironicclient.common import base
|
||||||
|
from ironicclient import exc
|
||||||
|
|
||||||
|
|
||||||
|
CREATION_ATTRIBUTES = ['description', 'extra']
|
||||||
|
|
||||||
|
|
||||||
class Chassis(base.Resource):
|
class Chassis(base.Resource):
|
||||||
@ -37,3 +41,15 @@ class ChassisManager(base.Manager):
|
|||||||
return self._list(self._path(chassis_id))[0]
|
return self._list(self._path(chassis_id))[0]
|
||||||
except IndexError:
|
except IndexError:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def create(self, **kwargs):
|
||||||
|
new = {}
|
||||||
|
for (key, value) in kwargs.items():
|
||||||
|
if key in CREATION_ATTRIBUTES:
|
||||||
|
new[key] = value
|
||||||
|
else:
|
||||||
|
raise exc.InvalidAttribute()
|
||||||
|
return self._create(self._path(), new)
|
||||||
|
|
||||||
|
def delete(self, chassis_id):
|
||||||
|
return self._delete(self._path(chassis_id))
|
||||||
|
@ -35,6 +35,36 @@ def do_chassis_list(self, args):
|
|||||||
utils.print_list(chassis, fields, field_labels, sortby=1)
|
utils.print_list(chassis, fields, field_labels, sortby=1)
|
||||||
|
|
||||||
|
|
||||||
|
@utils.arg('--description',
|
||||||
|
metavar='<DESCRIPTION>',
|
||||||
|
help='Free text description of the chassis')
|
||||||
|
@utils.arg('--extra',
|
||||||
|
metavar="<key=value>",
|
||||||
|
action='append',
|
||||||
|
help="Record arbitrary key/value metadata. "
|
||||||
|
"Can be specified multiple times.")
|
||||||
|
def do_chassis_create(self, args):
|
||||||
|
"""Create a new chassis."""
|
||||||
|
field_list = ['description', 'extra']
|
||||||
|
fields = dict((k, v) for (k, v) in vars(args).items()
|
||||||
|
if k in field_list and not (v is None))
|
||||||
|
fields = utils.args_array_to_dict(fields, 'extra')
|
||||||
|
chassis = self.chassis.create(**fields)
|
||||||
|
|
||||||
|
field_list.append('uuid')
|
||||||
|
data = dict([(f, getattr(chassis, f, '')) for f in field_list])
|
||||||
|
utils.print_dict(data, wrap=72)
|
||||||
|
|
||||||
|
|
||||||
|
@utils.arg('chassis', metavar='<chassis>', help="ID of chassis")
|
||||||
|
def do_chassis_delete(self, args):
|
||||||
|
"""Delete a chassis."""
|
||||||
|
try:
|
||||||
|
self.chassis.delete(args.chassis)
|
||||||
|
except exc.HTTPNotFound:
|
||||||
|
raise exc.CommandError('Chassis not found: %s' % args.chassis)
|
||||||
|
|
||||||
|
|
||||||
@utils.arg('port', metavar='<port>', help="ID of port")
|
@utils.arg('port', metavar='<port>', help="ID of port")
|
||||||
def do_port_show(self, args):
|
def do_port_show(self, args):
|
||||||
"""Show a port."""
|
"""Show a port."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user