From 480dc02de0d8413aa518a23b22a0140013df1350 Mon Sep 17 00:00:00 2001 From: Feodor Tersin Date: Wed, 28 Dec 2016 18:03:00 +0300 Subject: [PATCH] Switch to Nova v2.32 API At v2.33 new bdm field 'tag' was introduced. This field is automatically created by snapshot operation for volume backed instance (ebs). The result of the operation - bdm - is stored in metadata of the snapshot image. When ec2api user requires to run an instance with this image changing some attributes of the attached volume (e.g. delete_on_termination), this bdm is merged with user defined parameters and sent to Nova. As the result the new 'tag' field is sent to Nova since v2.32. However the used API version is v2.10, which does not support 'tag' field. This did not lead to faults (until I56348dc2) because Nova verified the first bdm only, but the first bdm for ebs instances was a bdm for the image. With the noted fix this no more works. This patch swithes ec2api to use v2.32 to get 'tag' field supported. Change-Id: I68329bbffeeff5d460f3fca1a212ba20b35fc284 --- ec2api/clients.py | 5 ++++- ec2api/tests/unit/test_clients.py | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/ec2api/clients.py b/ec2api/clients.py index 6703dea9..b21b25a4 100644 --- a/ec2api/clients.py +++ b/ec2api/clients.py @@ -91,7 +91,10 @@ LEGACY_NOVA_API_VERSION = '2' # properties # Nova API's 2.10 microversion provides admin access to users keypairs, # which allows metadata service to expose openssh part of an instance key -REQUIRED_NOVA_API_MICROVERSION = '2.10' +# Nova API's 2.32 microversion allows 'tag' field of bdm v2, which may be +# contained in image bdms, defined by users or autocreated with instance +# snapshot +REQUIRED_NOVA_API_MICROVERSION = '2.32' _nova_api_version = None diff --git a/ec2api/tests/unit/test_clients.py b/ec2api/tests/unit/test_clients.py index 06371719..1ba92dff 100644 --- a/ec2api/tests/unit/test_clients.py +++ b/ec2api/tests/unit/test_clients.py @@ -54,7 +54,7 @@ class ClientsTestCase(base.BaseTestCase): links=[{'href': 'http://host:port/path/v2/'}]) v2_1 = mock.NonCallableMock() v2_1.configure_mock(id='v2.1', - version='2.11', + version='2.40', links=[{'href': 'http://host:port/path/v2.1/'}]) # test normal flow