Skip to content

Commit 151ee7e

Browse files
author
Gabriel Monroy
committed
Merge pull request #165 from opdemand/151-update-flavors
Allow updating of flavors (size, region, etc). LGTM.
2 parents c618af9 + 7fc1413 commit 151ee7e

2 files changed

Lines changed: 70 additions & 0 deletions

File tree

api/tests/flavor.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,48 @@ def test_flavor_contents(self):
6969
self.assertEqual(params['zone'], 'any')
7070
self.assertEqual(params['size'], 'm1.medium')
7171
self.assertTrue(params['image'])
72+
73+
def test_flavor_update(self):
74+
"""Tests that flavors can be updated by the client."""
75+
url = '/api/flavors'
76+
params = {
77+
'region': 'us-west-2',
78+
'size': 't1.micro',
79+
}
80+
body = {'id': 'autotest', 'provider': 'autotest', 'params': json.dumps(params)}
81+
response = self.client.post(url, json.dumps(body), content_type='application/json')
82+
self.assertEqual(response.status_code, 201)
83+
flavor_id = response.data['id']
84+
response = self.client.get('/api/flavors')
85+
self.assertEqual(response.status_code, 200)
86+
self.assertEqual(len(response.data['results']), 1)
87+
url = "/api/flavors/{flavor_id}".format(**locals())
88+
response = self.client.get(url)
89+
self.assertEqual(response.status_code, 200)
90+
uuid = response.data['uuid']
91+
self.assertRegexpMatches(uuid, r'^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$')
92+
params = json.loads(response.data['params'])
93+
self.assertEqual(params['region'], 'us-west-2')
94+
self.assertEqual(params['zone'], 'any')
95+
self.assertEqual(params['size'], 't1.micro')
96+
self.assertTrue(params['image'])
97+
params = {
98+
'size': 'c1.xlarge',
99+
'image': 'ami-c98d1bf9',
100+
}
101+
body = {'id': flavor_id, 'params': json.dumps(params)}
102+
response = self.client.patch(url, json.dumps(body), content_type='application/json')
103+
self.assertEqual(response.status_code, 200)
104+
flavor_id = response.data['id']
105+
response = self.client.get('/api/flavors')
106+
self.assertEqual(response.status_code, 200)
107+
self.assertEqual(len(response.data['results']), 1)
108+
url = "/api/flavors/{flavor_id}".format(**locals())
109+
response = self.client.get(url)
110+
self.assertEqual(response.status_code, 200)
111+
self.assertEqual(response.data['uuid'], uuid)
112+
params = json.loads(response.data['params'])
113+
self.assertNotIn('region', params)
114+
self.assertNotIn('zone', params)
115+
self.assertEqual(params['size'], 'c1.xlarge')
116+
self.assertEqual(params['image'], 'ami-c98d1bf9')

client/deis.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -626,6 +626,7 @@ def flavors(self, args):
626626
Valid commands for flavors:
627627
628628
flavors:create create a new node flavor
629+
flavors:update update an existing node flavor
629630
flavors:info print information about a node flavor
630631
flavors:list list available flavors
631632
flavors:delete delete a node flavor
@@ -658,6 +659,30 @@ def flavors_create(self, args):
658659
else:
659660
print('Error!', response.text)
660661

662+
def flavors_update(self, args):
663+
"""
664+
Create an existing node flavor
665+
666+
Usage: deis flavors:update <id> --params=<params> [options]
667+
668+
Options:
669+
670+
--params=PARAMS provider-specific parameters (size, region, zone, etc.)
671+
--init=INIT override Ubuntu cloud-init with custom YAML
672+
"""
673+
flavor = args.get('<id>')
674+
body = {'id': flavor}
675+
fields = ('params', 'init')
676+
for fld in fields:
677+
opt = args.get('--' + fld)
678+
if opt:
679+
body.update({fld: opt})
680+
response = self._dispatch('patch', '/api/flavors/{}'.format(flavor), json.dumps(body))
681+
if response.status_code == requests.codes.ok: # @UndefinedVariable
682+
print("{0[id]}".format(response.json()))
683+
else:
684+
print('Error!', response.text)
685+
661686
def flavors_delete(self, args):
662687
"""
663688
Delete a node flavor

0 commit comments

Comments
 (0)