Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions dwarf/compute/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,18 @@ def _route_version():
# -----------------------------------------------------------------------------
# Bottle Flavors API routes

@exception.catchall
def _route_flavors_id_extra(flavor_id):
"""
Route: /compute/v2.0/flavors/<flavor_id>/os-extra_specs
Method: GET
"""
utils.show_request(bottle.request)

# nova flavor-show <flavor_id>
return api_response.show_flavor_extra(FLAVORS.show(flavor_id))


@exception.catchall
def _route_flavors_id(flavor_id):
"""
Expand Down Expand Up @@ -240,6 +252,9 @@ def set_routes(app):
app.route('/compute/v2.0/servers/<server_id>/action',
method='POST',
callback=_route_servers_id_action)
app.route('/compute/v2.0/flavors/<flavor_id>/os-extra_specs',
method=('GET'),
callback=_route_flavors_id_extra)
app.route('/compute/v2.0/flavors/<flavor_id>',
method=('GET', 'DELETE'),
callback=_route_flavors_id)
Expand Down
8 changes: 8 additions & 0 deletions dwarf/compute/api_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,10 @@ def list_versions():
"name": "{{name}}"
}"""

FLAVOR_EXTRA = """{
"extra_specs": {}
}"""


def create_flavor(data):
return {'flavor': utils.json_render(FLAVOR, data, _details=True)}
Expand All @@ -81,6 +85,10 @@ def show_flavor(data):
return {'flavor': utils.json_render(FLAVOR, data, _details=True)}


def show_flavor_extra(data):
return {'extra_specs': utils.json_render(FLAVOR_EXTRA, data)}


# -----------------------------------------------------------------------------
# Keypairs

Expand Down
14 changes: 14 additions & 0 deletions tests/api/test_compute_flavors.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,11 @@ def create_flavor_req(flavor):
}"""


FLAVOR_EXTRA_RESP = """{
"extra_specs": {}
}"""


def list_flavors_resp(flavor, details=False):
return {'flavors': [utils.json_render(FLAVOR_RESP, f, _details=details)
for f in flavor]}
Expand All @@ -65,6 +70,10 @@ def show_flavor_resp(flavor):
return {'flavor': utils.json_render(FLAVOR_RESP, flavor, _details=True)}


def show_flavor_extra_resp(flavor):
return {'flavor': utils.json_render(FLAVOR_REXTRA_ESP, flavor)}


def create_flavor_resp(flavor):
return {'flavor': utils.json_render(FLAVOR_RESP, flavor, _details=True)}

Expand Down Expand Up @@ -101,6 +110,11 @@ def test_show_flavor(self):
status=200)
self.assertEqual(json.loads(resp.body), show_flavor_resp(flavor1))

def test_show_flavor_extra(self):
resp = self.app.get('/compute/v2.0/flavors/%s/os-extra_specs' %
flavor1['id'], status=200)
self.assertEqual(json.loads(resp.body), show_flavor_resp(flavor1))

def test_delete_flavor(self):
# Delete flavor[0]
resp = self.app.delete('/compute/v2.0/flavors/%s' % flavor1['id'],
Expand Down