diff --git a/CHANGES.rst b/CHANGES.rst index c9e999187d..e7d062e740 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -28,6 +28,11 @@ Common Compute ~~~~~~~ +- [OpenStack] Add metadata fields ``os_distro`` and ``os_version`` provided + by OpenStack Image API (if set) to the ``extra`` field of the OpenStack NodeImage. + (#1982) + [Miguel Caballer - @micafer] + - [LINODE] Add support for cloud-init metadata support to create_node() Add new functions ``create_key_pair``, ``list_key_pairs``, and ``get_image`` (#1946) diff --git a/libcloud/compute/drivers/openstack.py b/libcloud/compute/drivers/openstack.py index 5d286e4439..360d32ebd0 100644 --- a/libcloud/compute/drivers/openstack.py +++ b/libcloud/compute/drivers/openstack.py @@ -1565,6 +1565,8 @@ def _to_image(self, api_image): progress=api_image.get("progress"), metadata=api_image.get("metadata"), os_type=api_image.get("os_type"), + os_distro=api_image.get("os_distro"), + os_version=api_image.get("os_version"), serverId=server.get("id"), minDisk=min_disk, minRam=min_ram, diff --git a/libcloud/test/compute/fixtures/openstack_v1.1/_images_v2.json b/libcloud/test/compute/fixtures/openstack_v1.1/_images_v2.json index 9ce8eb49c3..6517a33200 100644 --- a/libcloud/test/compute/fixtures/openstack_v1.1/_images_v2.json +++ b/libcloud/test/compute/fixtures/openstack_v1.1/_images_v2.json @@ -1 +1 @@ -{"images": [{"status": "active", "image_location": "snapshot", "image_state": "available", "tags": [], "kernel_id": null, "container_format": "bare", "min_ram": 0, "ramdisk_id": null, "locations": [{"url": "file:///var/lib/glance/images/f24a3c1b-d52a-4116-91da-25b3eee8f55e", "metadata": {"mountpoint": "/var/lib/glance/images", "type": "nfs", "id": "NetApp1", "share_location": "nfs://some.ip.somewhere/com_osp_data001"}}], "visibility": "shared", "updated_at": "2017-11-28T10:19:49Z", "owner": "d85e344900774f5aad27e4e8e91205d6", "schema": "/v2/schemas/image", "file": "/v2/images/f24a3c1b-d52a-4116-91da-25b3eee8f55e/file", "min_disk": 40, "virtual_size": null, "base_image_ref": "5be2b652-a965-4ecb-a2b4-b9f83d7779e6", "size": 1256259584, "instance_uuid": "24f0a531-e45f-491b-86f2-3708dd45a478", "os_distro": "ubuntu", "user_id": "b0d846d9ac93452bb93857e0305584bd", "name": "hypernode", "image_type": "snapshot", "checksum": "3530464d095c9d62771b99ebecd2d70b", "created_at": "2017-09-11T13:00:05Z", "disk_format": "qcow2", "id": "f24a3c1b-d52a-4116-91da-25b3eee8f55e", "protected": false, "os_type": "linux", "direct_url": "file:///var/lib/glance/images/f24a3c1b-d52a-4116-91da-25b3eee8f55e", "self": "/v2/images/f24a3c1b-d52a-4116-91da-25b3eee8f55e", "owner_id": "d85e344900774f5aad27e4e8e91205d6"}, {"status": "active", "image_location": "snapshot", "image_state": "available", "tags": [], "kernel_id": null, "container_format": "bare", "min_ram": 0, "ramdisk_id": null, "locations": [{"url": "file:///var/lib/glance/images/4bd743f8-7e7d-4568-8f31-b3f06b90e70a", "metadata": {"mountpoint": "/var/lib/glance/images", "type": "nfs", "id": "NetApp1", "share_location": "nfs://some.ip.somewhere/com_osp_data001"}}], "visibility": "private", "updated_at": "2017-09-07T13:07:33Z", "owner": "d85e344900774f5aad27e4e8e91205d6", "schema": "/v2/schemas/image", "file": "/v2/images/4bd743f8-7e7d-4568-8f31-b3f06b90e70a/file", "min_disk": 40, "virtual_size": null, "base_image_ref": "5be2b652-a965-4ecb-a2b4-b9f83d7779e6", "size": 1248264192, "instance_uuid": "b4166e71-f40b-4a5b-a489-87601ab8a600", "os_distro": "ubuntu", "user_id": "b0d846d9ac93452bb93857e0305584bd", "name": "hypernode", "image_type": "snapshot", "checksum": "1969ec22f73d524eb766b4c308e2192a", "created_at": "2017-09-07T13:06:24Z", "disk_format": "qcow2", "id": "4bd743f8-7e7d-4568-8f31-b3f06b90e70a", "protected": false, "os_type": "linux", "direct_url": "file:///var/lib/glance/images/4bd743f8-7e7d-4568-8f31-b3f06b90e70a", "self": "/v2/images/4bd743f8-7e7d-4568-8f31-b3f06b90e70a", "owner_id": "d85e344900774f5aad27e4e8e91205d6"}], "next": "/v2/images?marker=e7a40226-3523-4f0f-87d8-d8dc91bbf4a3", "schema": "/v2/schemas/images", "first": "/v2/images"} +{"images": [{"status": "active", "image_location": "snapshot", "image_state": "available", "tags": [], "kernel_id": null, "container_format": "bare", "min_ram": 0, "ramdisk_id": null, "locations": [{"url": "file:///var/lib/glance/images/f24a3c1b-d52a-4116-91da-25b3eee8f55e", "metadata": {"mountpoint": "/var/lib/glance/images", "type": "nfs", "id": "NetApp1", "share_location": "nfs://some.ip.somewhere/com_osp_data001"}}], "visibility": "shared", "updated_at": "2017-11-28T10:19:49Z", "owner": "d85e344900774f5aad27e4e8e91205d6", "schema": "/v2/schemas/image", "file": "/v2/images/f24a3c1b-d52a-4116-91da-25b3eee8f55e/file", "min_disk": 40, "virtual_size": null, "base_image_ref": "5be2b652-a965-4ecb-a2b4-b9f83d7779e6", "size": 1256259584, "instance_uuid": "24f0a531-e45f-491b-86f2-3708dd45a478", "os_distro": "ubuntu", "os_version": "16.04", "user_id": "b0d846d9ac93452bb93857e0305584bd", "name": "hypernode", "image_type": "snapshot", "checksum": "3530464d095c9d62771b99ebecd2d70b", "created_at": "2017-09-11T13:00:05Z", "disk_format": "qcow2", "id": "f24a3c1b-d52a-4116-91da-25b3eee8f55e", "protected": false, "os_type": "linux", "direct_url": "file:///var/lib/glance/images/f24a3c1b-d52a-4116-91da-25b3eee8f55e", "self": "/v2/images/f24a3c1b-d52a-4116-91da-25b3eee8f55e", "owner_id": "d85e344900774f5aad27e4e8e91205d6"}, {"status": "active", "image_location": "snapshot", "image_state": "available", "tags": [], "kernel_id": null, "container_format": "bare", "min_ram": 0, "ramdisk_id": null, "locations": [{"url": "file:///var/lib/glance/images/4bd743f8-7e7d-4568-8f31-b3f06b90e70a", "metadata": {"mountpoint": "/var/lib/glance/images", "type": "nfs", "id": "NetApp1", "share_location": "nfs://some.ip.somewhere/com_osp_data001"}}], "visibility": "private", "updated_at": "2017-09-07T13:07:33Z", "owner": "d85e344900774f5aad27e4e8e91205d6", "schema": "/v2/schemas/image", "file": "/v2/images/4bd743f8-7e7d-4568-8f31-b3f06b90e70a/file", "min_disk": 40, "virtual_size": null, "base_image_ref": "5be2b652-a965-4ecb-a2b4-b9f83d7779e6", "size": 1248264192, "instance_uuid": "b4166e71-f40b-4a5b-a489-87601ab8a600", "os_distro": "ubuntu", "user_id": "b0d846d9ac93452bb93857e0305584bd", "name": "hypernode", "image_type": "snapshot", "checksum": "1969ec22f73d524eb766b4c308e2192a", "created_at": "2017-09-07T13:06:24Z", "disk_format": "qcow2", "id": "4bd743f8-7e7d-4568-8f31-b3f06b90e70a", "protected": false, "os_type": "linux", "direct_url": "file:///var/lib/glance/images/4bd743f8-7e7d-4568-8f31-b3f06b90e70a", "self": "/v2/images/4bd743f8-7e7d-4568-8f31-b3f06b90e70a", "owner_id": "d85e344900774f5aad27e4e8e91205d6"}], "next": "/v2/images?marker=e7a40226-3523-4f0f-87d8-d8dc91bbf4a3", "schema": "/v2/schemas/images", "first": "/v2/images"} diff --git a/libcloud/test/compute/test_openstack.py b/libcloud/test/compute/test_openstack.py index fcb135ded1..f81da0cdc7 100644 --- a/libcloud/test/compute/test_openstack.py +++ b/libcloud/test/compute/test_openstack.py @@ -2041,6 +2041,8 @@ def test_list_images(self): self.assertEqual(image.extra["created"], "2017-09-11T13:00:05Z") self.assertEqual(image.extra["status"], "active") self.assertEqual(image.extra["os_type"], "linux") + self.assertEqual(image.extra["os_version"], "16.04") + self.assertEqual(image.extra["os_distro"], "ubuntu") self.assertIsNone(image.extra["serverId"]) self.assertEqual(image.extra["minDisk"], 40) self.assertEqual(image.extra["minRam"], 0)