1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-20 10:50:08 +03:00

F #5035: delete service when every role finished (#377)

This commit is contained in:
Alejandro Huertas Herrero 2020-10-29 17:12:17 +01:00 committed by GitHub
parent 16f5499fd6
commit 24c0dd5505
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 0 deletions

View File

@ -424,6 +424,10 @@ class ServiceLCM
recover_scale(client, service)
elsif Service::STATE['COOLDOWN'] == service.state
service.set_state(Service::STATE['RUNNING'])
service.roles.each do |_, role|
role.set_state(Role::STATE['RUNNING'])
end
else
break OpenNebula::Error.new(
'Service cannot be recovered in state: ' \
@ -722,6 +726,8 @@ class ServiceLCM
end
def done_wd_cb(client, service_id, role_name, node)
undeploy = false
rc = @srv_pool.get(service_id, client) do |service|
role = service.roles[role_name]
cardinality = role.cardinality - 1
@ -733,6 +739,9 @@ class ServiceLCM
role.nodes.delete_if {|n| n['deploy_id'] == node }
# If the role has 0 nodes, delete role
undeploy = service.check_role(role)
service.update
Log.info 'WD',
@ -742,6 +751,12 @@ class ServiceLCM
end
Log.error 'WD', rc.message if OpenNebula.is_error?(rc)
return unless undeploy
Log.info LOG_COMP, "Deleting automatically service #{service_id}"
undeploy_action(client, service_id)
end
def running_wd_cb(client, service_id, role_name, _node)

View File

@ -590,6 +590,25 @@ module OpenNebula
state == Service::STATE['RUNNING']
end
# Check if role is terminated or not
#
# @param role [OpenNebula::Role] Role information
#
# @return [Boolean]
# True if the service should be undeployed
# False otherwise
def check_role(role)
return unless @body['automatic_deletion']
return unless role.nodes.empty?
ret = true
@body['roles'].each {|r| ret &= r['nodes'].empty? }
ret
end
private
# Maximum number of log entries per service