Add chassis-create and chassis-delete

Change-Id: I404c513fc39a18967d96f67fc1a7cc68329adb75
This commit is contained in:
Lucas Alvares Gomes 2013-09-25 16:53:59 +01:00 committed by Devananda van der Veen
parent 92903077b2
commit 2547342ab1
4 changed files with 79 additions and 0 deletions

@ -161,3 +161,7 @@ class NoTokenLookupException(Exception):
class EndpointNotFound(Exception):
"""DEPRECATED."""
pass
class InvalidAttribute(ClientException):
pass

@ -17,6 +17,7 @@
# License for the specific language governing permissions and limitations
# under the License.
import copy
import testtools
from ironicclient.tests import utils
@ -27,6 +28,10 @@ CHASSIS = {'id': 42,
'extra': {},
'description': 'data-center-1-chassis'}
CREATE_CHASSIS = copy.deepcopy(CHASSIS)
del CREATE_CHASSIS['id']
del CREATE_CHASSIS['uuid']
fixtures = {
'/v1/chassis':
{
@ -34,6 +39,10 @@ fixtures = {
{},
{"chassis": [CHASSIS]},
),
'POST': (
{},
CREATE_CHASSIS,
),
},
'/v1/chassis/%s' % CHASSIS['uuid']:
{
@ -41,6 +50,10 @@ fixtures = {
{},
CHASSIS,
),
'DELETE': (
{},
None,
),
},
}
@ -68,3 +81,19 @@ class ChassisManagerTest(testtools.TestCase):
self.assertEqual(self.api.calls, expect)
self.assertEqual(chassis.uuid, CHASSIS['uuid'])
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.
from ironicclient.common import base
from ironicclient import exc
CREATION_ATTRIBUTES = ['description', 'extra']
class Chassis(base.Resource):
@ -37,3 +41,15 @@ class ChassisManager(base.Manager):
return self._list(self._path(chassis_id))[0]
except IndexError:
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.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")
def do_port_show(self, args):
"""Show a port."""