Merge "Fix block_device_mapping on compute creation"
This commit is contained in:
commit
5032dbdf08
|
@ -133,9 +133,7 @@ class Controller(ooi.api.base.Controller):
|
|||
l.get("target"),
|
||||
storage.StorageResource.kind)
|
||||
mapping = {
|
||||
"source_type": "volume",
|
||||
"uuid": vol_id,
|
||||
"delete_on_termination": False,
|
||||
"volume_id": vol_id,
|
||||
}
|
||||
try:
|
||||
device_name = l['attributes']['occi.storagelink.deviceid']
|
||||
|
@ -143,16 +141,6 @@ class Controller(ooi.api.base.Controller):
|
|||
except KeyError:
|
||||
pass
|
||||
mappings.append(mapping)
|
||||
# this needs to be there if we have a mapping
|
||||
if mappings:
|
||||
image = obj["schemes"][templates.OpenStackOSTemplate.scheme][0]
|
||||
mappings.insert(0, {
|
||||
"source_type": "image",
|
||||
"destination_type": "local",
|
||||
"boot_index": 0,
|
||||
"delete_on_termination": True,
|
||||
"uuid": image,
|
||||
})
|
||||
return mappings
|
||||
|
||||
def _get_network_from_req(self, req, obj):
|
||||
|
@ -237,7 +225,7 @@ class Controller(ooi.api.base.Controller):
|
|||
self.os_helper.keypair_create(req, key_name,
|
||||
public_key=key_data)
|
||||
|
||||
block_device_mapping_v2 = self._build_block_mapping(req, obj)
|
||||
block_device_mapping = self._build_block_mapping(req, obj)
|
||||
networks = self._get_network_from_req(req, obj)
|
||||
server = self.os_helper.create_server(
|
||||
req,
|
||||
|
@ -246,7 +234,7 @@ class Controller(ooi.api.base.Controller):
|
|||
flavor,
|
||||
user_data=user_data,
|
||||
key_name=key_name,
|
||||
block_device_mapping_v2=block_device_mapping_v2,
|
||||
block_device_mapping=block_device_mapping,
|
||||
networks=networks
|
||||
)
|
||||
# The returned JSON does not contain the server name
|
||||
|
|
|
@ -348,7 +348,7 @@ class OpenStackHelper(BaseHelper):
|
|||
def _get_create_server_req(self, req, name, image, flavor,
|
||||
user_data=None,
|
||||
key_name=None,
|
||||
block_device_mapping_v2=None,
|
||||
block_device_mapping=None,
|
||||
networks=None):
|
||||
tenant_id = self.tenant_from_req(req)
|
||||
path = "/%s/servers" % tenant_id
|
||||
|
@ -364,8 +364,8 @@ class OpenStackHelper(BaseHelper):
|
|||
body["server"]["user_data"] = user_data
|
||||
if key_name is not None:
|
||||
body["server"]["key_name"] = key_name
|
||||
if block_device_mapping_v2:
|
||||
body["server"]["block_device_mapping_v2"] = block_device_mapping_v2
|
||||
if block_device_mapping:
|
||||
body["server"]["block_device_mapping"] = block_device_mapping
|
||||
if networks:
|
||||
body["server"]["networks"] = networks
|
||||
|
||||
|
@ -377,7 +377,7 @@ class OpenStackHelper(BaseHelper):
|
|||
|
||||
def create_server(self, req, name, image, flavor,
|
||||
user_data=None, key_name=None,
|
||||
block_device_mapping_v2=None,
|
||||
block_device_mapping=None,
|
||||
networks=None):
|
||||
"""Create a server.
|
||||
|
||||
|
@ -395,7 +395,7 @@ class OpenStackHelper(BaseHelper):
|
|||
flavor,
|
||||
user_data=user_data,
|
||||
key_name=key_name,
|
||||
block_device_mapping_v2=block_device_mapping_v2,
|
||||
block_device_mapping=block_device_mapping,
|
||||
networks=networks)
|
||||
response = req.get_response(self.app)
|
||||
# We only get one server
|
||||
|
|
|
@ -332,7 +332,7 @@ class TestComputeController(base.TestController):
|
|||
m_create.assert_called_with(mock.ANY, "foo instance", "foo", "bar",
|
||||
user_data=None,
|
||||
key_name=None,
|
||||
block_device_mapping_v2=[],
|
||||
block_device_mapping=[],
|
||||
networks=net)
|
||||
|
||||
@mock.patch.object(helpers.OpenStackHelper, "create_server")
|
||||
|
@ -368,7 +368,7 @@ class TestComputeController(base.TestController):
|
|||
m_create.assert_called_with(mock.ANY, "foo instance", "foo", "bar",
|
||||
user_data="bazonk",
|
||||
key_name=None,
|
||||
block_device_mapping_v2=[],
|
||||
block_device_mapping=[],
|
||||
networks=net)
|
||||
|
||||
@mock.patch.object(helpers.OpenStackHelper, "create_server")
|
||||
|
@ -404,7 +404,7 @@ class TestComputeController(base.TestController):
|
|||
m_create.assert_called_with(mock.ANY, "foo instance", "foo", "bar",
|
||||
user_data="bazonk",
|
||||
key_name=None,
|
||||
block_device_mapping_v2=[],
|
||||
block_device_mapping=[],
|
||||
networks=net)
|
||||
|
||||
@mock.patch("ooi.occi.validator.Validator")
|
||||
|
@ -463,7 +463,7 @@ class TestComputeController(base.TestController):
|
|||
m_server.assert_called_with(mock.ANY, "foo instance", "foo", "bar",
|
||||
user_data=None,
|
||||
key_name="wtfoo",
|
||||
block_device_mapping_v2=[],
|
||||
block_device_mapping=[],
|
||||
networks=net)
|
||||
|
||||
@mock.patch.object(helpers.OpenStackHelper, "keypair_delete")
|
||||
|
@ -502,7 +502,7 @@ class TestComputeController(base.TestController):
|
|||
m_server.assert_called_with(mock.ANY, "foo instance", "foo", "bar",
|
||||
user_data=None,
|
||||
key_name=mock.ANY,
|
||||
block_device_mapping_v2=[],
|
||||
block_device_mapping=[],
|
||||
networks=net)
|
||||
m_keypair_delete.assert_called_with(mock.ANY, mock.ANY)
|
||||
|
||||
|
@ -542,7 +542,7 @@ class TestComputeController(base.TestController):
|
|||
m_server.assert_called_with(mock.ANY, "foo instance", "foo", "bar",
|
||||
user_data=None,
|
||||
key_name=mock.ANY,
|
||||
block_device_mapping_v2=[],
|
||||
block_device_mapping=[],
|
||||
networks=net)
|
||||
m_keypair_delete.assert_called_with(mock.ANY, mock.ANY)
|
||||
|
||||
|
@ -578,45 +578,24 @@ class TestComputeController(base.TestController):
|
|||
|
||||
@mock.patch("ooi.api.helpers.get_id_with_kind")
|
||||
def test_build_block_mapping(self, m_get_id):
|
||||
vol_id = uuid.uuid4().hex
|
||||
image_id = uuid.uuid4().hex
|
||||
vol_ids = [uuid.uuid4().hex, uuid.uuid4().hex]
|
||||
obj = {
|
||||
"links": {
|
||||
"http://schemas.ogf.org/occi/infrastructure#storage": [
|
||||
{
|
||||
"id": "l1",
|
||||
"target": vol_id,
|
||||
}
|
||||
]
|
||||
},
|
||||
"schemes": {
|
||||
templates.OpenStackOSTemplate.scheme: [image_id],
|
||||
"http://schemas.ogf.org/occi/infrastructure#storage":
|
||||
[{"id": i, "target": v} for i, v in enumerate(vol_ids)]
|
||||
}
|
||||
}
|
||||
m_get_id.return_value = (None, vol_id)
|
||||
m_get_id.side_effect = [(None, v) for v in vol_ids]
|
||||
ret = self.controller._build_block_mapping(None, obj)
|
||||
expected = [
|
||||
{
|
||||
"source_type": "image",
|
||||
"destination_type": "local",
|
||||
"boot_index": 0,
|
||||
"delete_on_termination": True,
|
||||
"uuid": image_id,
|
||||
},
|
||||
{
|
||||
"source_type": "volume",
|
||||
"uuid": vol_id,
|
||||
"delete_on_termination": False,
|
||||
}
|
||||
]
|
||||
expected = [{"volume_id": v} for v in vol_ids]
|
||||
self.assertEqual(expected, ret)
|
||||
m_get_id.assert_called_with(None, vol_id,
|
||||
occi_storage.StorageResource.kind)
|
||||
m_get_id.assert_has_calls(
|
||||
[mock.call(None, v, occi_storage.StorageResource.kind)
|
||||
for v in vol_ids])
|
||||
|
||||
@mock.patch("ooi.api.helpers.get_id_with_kind")
|
||||
def test_build_block_mapping_device_id(self, m_get_id):
|
||||
vol_id = uuid.uuid4().hex
|
||||
image_id = uuid.uuid4().hex
|
||||
obj = {
|
||||
"links": {
|
||||
"http://schemas.ogf.org/occi/infrastructure#storage": [
|
||||
|
@ -628,25 +607,13 @@ class TestComputeController(base.TestController):
|
|||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"schemes": {
|
||||
templates.OpenStackOSTemplate.scheme: [image_id],
|
||||
}
|
||||
}
|
||||
m_get_id.return_value = (None, vol_id)
|
||||
ret = self.controller._build_block_mapping(None, obj)
|
||||
expected = [
|
||||
{
|
||||
"source_type": "image",
|
||||
"destination_type": "local",
|
||||
"boot_index": 0,
|
||||
"delete_on_termination": True,
|
||||
"uuid": image_id,
|
||||
},
|
||||
{
|
||||
"source_type": "volume",
|
||||
"uuid": vol_id,
|
||||
"delete_on_termination": False,
|
||||
"volume_id": vol_id,
|
||||
"device_name": "baz",
|
||||
}
|
||||
]
|
||||
|
@ -684,7 +651,7 @@ class TestComputeController(base.TestController):
|
|||
m_server.assert_called_with(mock.ANY, "foo instance", "foo", "bar",
|
||||
user_data=None,
|
||||
key_name=mock.ANY,
|
||||
block_device_mapping_v2="mapping",
|
||||
block_device_mapping="mapping",
|
||||
networks=net)
|
||||
m_block.assert_called_with(req, obj)
|
||||
|
||||
|
@ -786,7 +753,7 @@ class TestComputeController(base.TestController):
|
|||
m_server.assert_called_with(mock.ANY, "foo instance", "foo", "bar",
|
||||
user_data=None,
|
||||
key_name=mock.ANY,
|
||||
block_device_mapping_v2=[],
|
||||
block_device_mapping=[],
|
||||
networks=net)
|
||||
m_net.assert_called_with(req, obj)
|
||||
|
||||
|
@ -818,6 +785,6 @@ class TestComputeController(base.TestController):
|
|||
m_server.assert_called_with(mock.ANY, "foo instance", "foo", "bar",
|
||||
user_data=None,
|
||||
key_name=mock.ANY,
|
||||
block_device_mapping_v2=[],
|
||||
block_device_mapping=[],
|
||||
networks=net)
|
||||
m_net.assert_called_with(req, obj)
|
||||
|
|
|
@ -632,11 +632,11 @@ class TestOpenStackHelper(TestBaseHelper):
|
|||
ret = self.helper.create_server(None, name, image, flavor,
|
||||
user_data=user_data,
|
||||
key_name=key_name,
|
||||
block_device_mapping_v2=bdm,
|
||||
block_device_mapping=bdm,
|
||||
networks=None)
|
||||
self.assertEqual("FOO", ret)
|
||||
m.assert_called_with(None, name, image, flavor, user_data=user_data,
|
||||
key_name=key_name, block_device_mapping_v2=bdm,
|
||||
key_name=key_name, block_device_mapping=bdm,
|
||||
networks=None)
|
||||
|
||||
@mock.patch("ooi.api.helpers.exception_from_response")
|
||||
|
@ -662,9 +662,9 @@ class TestOpenStackHelper(TestBaseHelper):
|
|||
flavor,
|
||||
user_data=user_data,
|
||||
key_name=key_name,
|
||||
block_device_mapping_v2=bdm)
|
||||
block_device_mapping=bdm)
|
||||
m.assert_called_with(None, name, image, flavor, user_data=user_data,
|
||||
key_name=key_name, block_device_mapping_v2=bdm,
|
||||
key_name=key_name, block_device_mapping=bdm,
|
||||
networks=None)
|
||||
m_exc.assert_called_with(resp)
|
||||
|
||||
|
|
Loading…
Reference in New Issue