diff --git a/lib/astute/task_deployment.rb b/lib/astute/task_deployment.rb index efe24744..f95bee8a 100644 --- a/lib/astute/task_deployment.rb +++ b/lib/astute/task_deployment.rb @@ -234,23 +234,25 @@ module Astute uids.delete('virtual_sync_node') # In case of big amount of nodes we should do several calls to be sure # about node status - Astute.config.mc_retries.times.each do - systemtype = Astute::MClient.new( - @ctx, - "systemtype", - uids, - _check_result=false, - 10 - ) - available_nodes = systemtype.get_type.select do |node| - node.results[:data][:node_type].chomp == "target" + if !uids.empty? + Astute.config.mc_retries.times.each do + systemtype = Astute::MClient.new( + @ctx, + "systemtype", + uids, + _check_result=false, + 10 + ) + available_nodes = systemtype.get_type.select do |node| + node.results[:data][:node_type].chomp == "target" + end + + available_uids += available_nodes.map { |node| node.results[:sender] } + uids -= available_uids + break if uids.empty? + + sleep Astute.config.mc_retry_interval end - - available_uids += available_nodes.map { |node| node.results[:sender] } - uids -= available_uids - break if uids.empty? - - sleep Astute.config.mc_retry_interval end Astute.logger.warn "Offline node #{uids}" if uids.present? diff --git a/spec/unit/task_deployment_spec.rb b/spec/unit/task_deployment_spec.rb index 7c010c95..153b0bed 100644 --- a/spec/unit/task_deployment_spec.rb +++ b/spec/unit/task_deployment_spec.rb @@ -67,6 +67,20 @@ describe Astute::TaskDeployment do } end + let(:tasks_graph_2) do + {"master"=> + [{ + "type"=>"noop", + "fail_on_error"=>true, + "required_for"=>[], + "requires"=> [], + "id"=>"ironic_post_swift_key", + "parameters"=>{}, + }], + "null"=> [] + } + end + let(:tasks_directory) do {"ironic_post_swift_key"=>{ "parameters"=>{ @@ -148,6 +162,20 @@ describe Astute::TaskDeployment do tasks_directory: tasks_directory) end + it 'should not fail if there are no nodes to check for offline nodes' do + Astute::TaskPreDeploymentActions.any_instance.stubs(:process) + task_deployment.stubs(:write_graph_to_file) + ctx.stubs(:report) + + task_deployment.expects(:fail_offline_nodes).returns([]) + + Astute::TaskCluster.any_instance.stubs(:run).returns({:success => true}) + task_deployment.deploy( + tasks_metadata: tasks_metadata, + tasks_graph: tasks_graph_2, + tasks_directory: tasks_directory) + end + it 'should setup stop condition' do Astute::TaskPreDeploymentActions.any_instance.stubs(:process) task_deployment.stubs(:write_graph_to_file)