summaryrefslogtreecommitdiff
path: root/nova/conductor/rpcapi.py
diff options
context:
space:
mode:
Diffstat (limited to 'nova/conductor/rpcapi.py')
-rw-r--r--nova/conductor/rpcapi.py26
1 files changed, 23 insertions, 3 deletions
diff --git a/nova/conductor/rpcapi.py b/nova/conductor/rpcapi.py
index 28311af31b..a5f0cf0094 100644
--- a/nova/conductor/rpcapi.py
+++ b/nova/conductor/rpcapi.py
@@ -286,6 +286,8 @@ class ComputeTaskAPI(object):
1.21 - Added cache_images()
1.22 - Added confirm_snapshot_based_resize()
1.23 - Added revert_snapshot_based_resize()
+ 1.24 - Add reimage_boot_volume parameter to rebuild_instance()
+ 1.25 - Add target_state parameter to rebuild_instance()
"""
def __init__(self):
@@ -426,8 +428,9 @@ class ComputeTaskAPI(object):
def rebuild_instance(self, ctxt, instance, new_pass, injected_files,
image_ref, orig_image_ref, orig_sys_metadata, bdms,
recreate=False, on_shared_storage=False, host=None,
- preserve_ephemeral=False, request_spec=None):
- version = '1.12'
+ preserve_ephemeral=False, request_spec=None,
+ reimage_boot_volume=False, target_state=None):
+ version = '1.25'
kw = {'instance': instance,
'new_pass': new_pass,
'injected_files': injected_files,
@@ -440,8 +443,25 @@ class ComputeTaskAPI(object):
'preserve_ephemeral': preserve_ephemeral,
'host': host,
'request_spec': request_spec,
+ 'reimage_boot_volume': reimage_boot_volume,
+ 'target_state': target_state,
}
if not self.client.can_send_version(version):
+ if kw['target_state']:
+ raise exception.UnsupportedRPCVersion(
+ api="rebuild_instance", required="1.25")
+ else:
+ del kw['target_state']
+ version = '1.24'
+ if not self.client.can_send_version(version):
+ if kw['reimage_boot_volume']:
+ raise exception.NovaException(
+ 'Conductor RPC version does not support '
+ 'reimage_boot_volume parameter.')
+ else:
+ del kw['reimage_boot_volume']
+ version = '1.12'
+ if not self.client.can_send_version(version):
version = '1.8'
del kw['request_spec']
cctxt = self.client.prepare(version=version)
@@ -473,4 +493,4 @@ class ComputeTaskAPI(object):
raise exception.ServiceTooOld(_('nova-conductor too old'))
kw = {'instance': instance, 'migration': migration}
cctxt = self.client.prepare(version=version)
- return cctxt.cast(ctxt, 'revert_snapshot_based_resize', **kw)
+ cctxt.cast(ctxt, 'revert_snapshot_based_resize', **kw)