diff --git a/src/flow/lib/LifeCycleManager.rb b/src/flow/lib/LifeCycleManager.rb index 17b9b9d876..0e83a0ffb7 100644 --- a/src/flow/lib/LifeCycleManager.rb +++ b/src/flow/lib/LifeCycleManager.rb @@ -960,7 +960,11 @@ class ServiceLCM end def running_wd_cb(client, service_id, role_name, _node) + undeploy = false + rc = @srv_pool.get(service_id, client) do |service| + role = service.roles[role_name] + if service.roles[role_name].state != Role::STATE['RUNNING'] service.roles[role_name].set_state(Role::STATE['RUNNING']) end @@ -970,10 +974,19 @@ class ServiceLCM service.set_state(Service::STATE['RUNNING']) end + # If the role has 0 nodes, delete role + undeploy = service.check_role(role) + service.update end Log.error 'WD', rc.message if OpenNebula.is_error?(rc) + + return unless undeploy + + Log.info LOG_COMP, "Automatically deleting service #{service_id}" + + undeploy_action(client, service_id) end ############################################################################ diff --git a/src/flow/lib/ServiceWatchDog.rb b/src/flow/lib/ServiceWatchDog.rb index bca7f3bf1f..5eb9e9ce93 100644 --- a/src/flow/lib/ServiceWatchDog.rb +++ b/src/flow/lib/ServiceWatchDog.rb @@ -214,6 +214,16 @@ class ServiceWD next unless nodes_ids + if nodes_ids.empty? + # If there are no VM, the role should be running + @lcm.trigger_action(:running_wd_cb, + service.id, + client, + service.id, + name, + []) + end + nodes_ids.each do |node| check_role_state(client, service.id, name, node) end