Add create upgrade release handler
Required for create new release just for upgrade, that have overwrited params. This params are valid for orig cluster release. Change-Id: Ib2387b9c2b74902c7289ee8f69a5f5d323ec82ca
This commit is contained in:
parent
7cf3fe9b3a
commit
17ab5a3aaa
|
@ -33,6 +33,9 @@ class ClusterUpgradeExtension(extensions.BaseExtension):
|
||||||
'handler': handlers.NodeReassignHandler},
|
'handler': handlers.NodeReassignHandler},
|
||||||
{'uri': r'/clusters/(?P<cluster_id>\d+)/upgrade/vips/?$',
|
{'uri': r'/clusters/(?P<cluster_id>\d+)/upgrade/vips/?$',
|
||||||
'handler': handlers.CopyVIPsHandler},
|
'handler': handlers.CopyVIPsHandler},
|
||||||
|
{'uri': r'/clusters/(?P<cluster_id>\d+)/upgrade/clone_release/'
|
||||||
|
r'(?P<release_id>\d+)/?$',
|
||||||
|
'handler': handlers.CreateUpgradeReleaseHandler},
|
||||||
]
|
]
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|
|
@ -143,3 +143,45 @@ class CopyVIPsHandler(base.BaseHandler):
|
||||||
|
|
||||||
upgrade.UpgradeHelper.copy_vips(orig_cluster_adapter,
|
upgrade.UpgradeHelper.copy_vips(orig_cluster_adapter,
|
||||||
seed_cluster_adapter)
|
seed_cluster_adapter)
|
||||||
|
|
||||||
|
|
||||||
|
class CreateUpgradeReleaseHandler(base.BaseHandler):
|
||||||
|
@staticmethod
|
||||||
|
def merge_network_roles(base_nets, orig_nets):
|
||||||
|
"""Create network metadata based on two releases.
|
||||||
|
|
||||||
|
Overwrite base default_mapping by orig default_maping values.
|
||||||
|
"""
|
||||||
|
orig_network_dict = {n['id']: n for n in orig_nets}
|
||||||
|
for base_net in base_nets:
|
||||||
|
orig_net = orig_network_dict.get(base_net['id'])
|
||||||
|
if orig_net is None:
|
||||||
|
orig_net = base_net
|
||||||
|
base_net['default_mapping'] = orig_net['default_mapping']
|
||||||
|
return base_net
|
||||||
|
|
||||||
|
@base.serialize
|
||||||
|
def POST(self, cluster_id, release_id):
|
||||||
|
"""Create release for upgrade purposes.
|
||||||
|
|
||||||
|
Creates a new release with network_roles_metadata based the given
|
||||||
|
release and re-use network parameters from the given cluster.
|
||||||
|
|
||||||
|
:returns: JSON representation of the created cluster
|
||||||
|
:http: * 200 (OK)
|
||||||
|
* 404 (Cluster or release not found.)
|
||||||
|
"""
|
||||||
|
base_release = self.get_object_or_404(objects.Release, release_id)
|
||||||
|
orig_cluster = self.get_object_or_404(objects.Cluster, cluster_id)
|
||||||
|
orig_release = orig_cluster.release
|
||||||
|
|
||||||
|
network_metadata = self.merge_network_roles(
|
||||||
|
base_release.network_roles_metadata,
|
||||||
|
orig_release.network_roles_metadata)
|
||||||
|
data = objects.Release.to_dict(base_release)
|
||||||
|
data['network_roles_metadata'] = network_metadata
|
||||||
|
data['name'] = '{0} Upgrade ({1})'.format(
|
||||||
|
base_release.name, orig_release.id)
|
||||||
|
del data['id']
|
||||||
|
new_release = objects.Release.create(data)
|
||||||
|
return new_release.to_dict()
|
||||||
|
|
Loading…
Reference in New Issue