diff --git a/drivers/deployment_drivers/openstack_nova_image_instance/drivermetadata.xml b/drivers/deployment_drivers/openstack_nova_image_instance/drivermetadata.xml index 407140c..b77e9e3 100644 --- a/drivers/deployment_drivers/openstack_nova_image_instance/drivermetadata.xml +++ b/drivers/deployment_drivers/openstack_nova_image_instance/drivermetadata.xml @@ -1,4 +1,4 @@ - + diff --git a/drivers/openstack_shell/src/drivermetadata.xml b/drivers/openstack_shell/src/drivermetadata.xml index 0c9aa49..b022856 100644 --- a/drivers/openstack_shell/src/drivermetadata.xml +++ b/drivers/openstack_shell/src/drivermetadata.xml @@ -1,4 +1,4 @@ - + diff --git a/drivers/version.txt b/drivers/version.txt index e484aaf..927734f 100644 --- a/drivers/version.txt +++ b/drivers/version.txt @@ -1 +1 @@ -0.0.16 \ No newline at end of file +0.0.17 \ No newline at end of file diff --git a/package/cloudshell/cp/openstack/command/operations/deploy_operation.py b/package/cloudshell/cp/openstack/command/operations/deploy_operation.py index 6361125..227e297 100644 --- a/package/cloudshell/cp/openstack/command/operations/deploy_operation.py +++ b/package/cloudshell/cp/openstack/command/operations/deploy_operation.py @@ -32,7 +32,7 @@ def deploy(self, os_session, name, reservation, cp_resource_model, deploy_req_mo :param DeployDataHolder deploy_req_model: :param OpenStackResourceModel cp_resource_model: :param cloudshell.shell.core.context.CancellationContext cancellation_context: - :param LoggingSessionContext logger: + :param logging.Logger logger: :rtype DeployResultModel: """ logger.info("Inside Deploy Operation.") @@ -73,9 +73,10 @@ def deploy(self, os_session, name, reservation, cp_resource_model, deploy_req_mo else: floating_ip_subnet_uuid = cp_resource_model.floating_ip_subnet_uuid - floating_ip_dict = self.network_service.create_floating_ip(floating_ip_subnet_id=floating_ip_subnet_uuid, - openstack_session=os_session, - logger=logger) + floating_ip_dict = self.network_service.create_floating_ip( + floating_ip_subnet_id=floating_ip_subnet_uuid, + openstack_session=os_session, + logger=logger) if floating_ip_dict: floating_ip_str = floating_ip_dict['floating_ip_address'] if floating_ip_str: @@ -104,18 +105,40 @@ def deploy(self, os_session, name, reservation, cp_resource_model, deploy_req_mo # If any Exception is raised during deploy or assign floating IP - clean up OpenStack side and re-raise except Exception as e: logger.error(traceback.format_exc()) - if instance: - instance_id = instance.id - # This calls detach and delete floating IP and instance terminate (handles empty floating IP) - self.instance_service.detach_floating_ip(openstack_session=os_session, - instance=instance, - floating_ip=floating_ip_str, - logger=logger) - self.network_service.delete_floating_ip(openstack_session=os_session, - floating_ip=floating_ip_str, - logger=logger) - self.instance_service.terminate_instance(openstack_session=os_session, - instance_id=instance_id, - logger=logger) + + self._rollback_failed_instance(logger=logger, + os_session=os_session, + floating_ip=floating_ip_str, + instance=instance) + # Re-raise for the UI raise + + def _rollback_failed_instance(self, logger, os_session, floating_ip, instance): + """ + + :param logging.Logger logger: + :param keystoneauth1.session.Session os_session: + :param str floating_ip: + :param novaclient.Client.servers.Server instance: + :return: + """ + if not instance: + return + instance_id = instance.id + + # This calls detach and delete floating IP and instance terminate (handles empty floating IP) + try: + self.instance_service.detach_floating_ip(openstack_session=os_session, + instance=instance, + floating_ip=floating_ip, + logger=logger) + self.network_service.delete_floating_ip(openstack_session=os_session, + floating_ip=floating_ip, + logger=logger) + except Exception: + logger.exception("Failed to remove floating ip {}. ".format(floating_ip)) + + self.instance_service.terminate_instance(openstack_session=os_session, + instance_id=instance_id, + logger=logger) diff --git a/package/version.txt b/package/version.txt index e484aaf..927734f 100644 --- a/package/version.txt +++ b/package/version.txt @@ -1 +1 @@ -0.0.16 \ No newline at end of file +0.0.17 \ No newline at end of file diff --git a/version.txt b/version.txt index e484aaf..927734f 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.0.16 \ No newline at end of file +0.0.17 \ No newline at end of file