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):
|
||||
"""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."""
|
||||
|
Loading…
x
Reference in New Issue
Block a user