summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/api/metadata/base.py6
-rw-r--r--nova/api/openstack/compute/views/servers.py4
-rw-r--r--nova/tests/test_metadata.py1
-rw-r--r--nova/utils.py7
4 files changed, 13 insertions, 5 deletions
diff --git a/nova/api/metadata/base.py b/nova/api/metadata/base.py
index 425e5bf53..da0a50662 100644
--- a/nova/api/metadata/base.py
+++ b/nova/api/metadata/base.py
@@ -32,6 +32,8 @@ from nova.compute import flavors
from nova import conductor
from nova import context
from nova import network
+from nova import utils
+
from nova.openstack.common import timeutils
from nova.virt import netutils
@@ -127,9 +129,7 @@ class InstanceMetadata():
self.address = address
# expose instance metadata.
- self.launch_metadata = {}
- for item in instance.get('metadata', []):
- self.launch_metadata[item['key']] = item['value']
+ self.launch_metadata = utils.instance_meta(instance)
self.password = password.extract_password(instance)
diff --git a/nova/api/openstack/compute/views/servers.py b/nova/api/openstack/compute/views/servers.py
index 734bb647d..03b0a97a5 100644
--- a/nova/api/openstack/compute/views/servers.py
+++ b/nova/api/openstack/compute/views/servers.py
@@ -25,6 +25,7 @@ from nova.api.openstack.compute.views import images as views_images
from nova.compute import flavors
from nova.openstack.common import log as logging
from nova.openstack.common import timeutils
+from nova import utils
LOG = logging.getLogger(__name__)
@@ -132,8 +133,7 @@ class ViewBuilder(common.ViewBuilder):
@staticmethod
def _get_metadata(instance):
- metadata = instance.get("metadata", [])
- return dict((item['key'], item['value']) for item in metadata)
+ return utils.instance_meta(instance)
@staticmethod
def _get_vm_state(instance):
diff --git a/nova/tests/test_metadata.py b/nova/tests/test_metadata.py
index 8cdc3e7af..2aece7ac8 100644
--- a/nova/tests/test_metadata.py
+++ b/nova/tests/test_metadata.py
@@ -71,6 +71,7 @@ INSTANCES = (
'info_cache': {'network_info': []},
'hostname': 'test.novadomain',
'display_name': 'my_displayname',
+ 'metadata': {}
},
)
diff --git a/nova/utils.py b/nova/utils.py
index 5e968bd35..24823484e 100644
--- a/nova/utils.py
+++ b/nova/utils.py
@@ -973,6 +973,13 @@ def dict_to_metadata(metadata):
return result
+def instance_meta(instance):
+ if isinstance(instance['metadata'], dict):
+ return instance['metadata']
+ else:
+ return metadata_to_dict(instance['metadata'])
+
+
def instance_sys_meta(instance):
if isinstance(instance['system_metadata'], dict):
return instance['system_metadata']