Use mcollective instead of Cobbler fence_ssh to reboot nodes
Change-Id: Ia761dd4a8d2f3a077647dc2e5292628b793e30be Closes-Bug: #1528574 (cherry picked from commit330ac35b26
) (cherry picked from commitb81577a5b7
)
This commit is contained in:
parent
016be055f6
commit
a51a24aa4d
|
@ -61,5 +61,22 @@ module Astute
|
|||
ctx.reporter.report({'status' => 'error', 'error' => msg, 'progress' => 100})
|
||||
end
|
||||
|
||||
def self.reboot(ctx, node_ids, task_id="reboot_provisioned_nodes")
|
||||
Astute::NailgunHooks.new(
|
||||
[{
|
||||
"priority" => 100,
|
||||
"type" => "reboot",
|
||||
"fail_on_error" => false,
|
||||
"id" => task_id,
|
||||
"uids" => node_ids,
|
||||
"parameters" => {
|
||||
"timeout" => Astute.config.reboot_timeout
|
||||
}
|
||||
}],
|
||||
ctx,
|
||||
'provision'
|
||||
).process
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
@ -92,10 +92,6 @@ module Astute
|
|||
raise e
|
||||
end
|
||||
|
||||
def image_provision(reporter, task_id, nodes)
|
||||
ImageProvision.provision(Context.new(task_id, reporter), nodes)
|
||||
end
|
||||
|
||||
def provision_and_watch_progress(reporter,
|
||||
task_id,
|
||||
nodes_to_provision,
|
||||
|
@ -250,13 +246,18 @@ module Astute
|
|||
cobbler.netboot_nodes(provisioned_nodes, false)
|
||||
|
||||
# in case of IBP we reboot only those nodes which we managed to provision
|
||||
reboot_events = cobbler.reboot_nodes(provisioned_nodes)
|
||||
soft_reboot(
|
||||
reporter,
|
||||
task_id,
|
||||
provisioned_nodes.map{ |n| n['uid'] },
|
||||
'reboot_provisioned_nodes'
|
||||
)
|
||||
else
|
||||
reboot_events = cobbler.reboot_nodes(nodes)
|
||||
not_rebooted = cobbler.check_reboot_nodes(reboot_events)
|
||||
not_rebooted = nodes.select { |n| not_rebooted.include?(n['slave_name'])}
|
||||
failed_uids |= not_rebooted.map { |n| n['uid']}
|
||||
end
|
||||
not_rebooted = cobbler.check_reboot_nodes(reboot_events)
|
||||
not_rebooted = nodes.select { |n| not_rebooted.include?(n['slave_name'])}
|
||||
failed_uids |= not_rebooted.map { |n| n['uid']}
|
||||
|
||||
# control reboot for nodes which still in bootstrap state
|
||||
# Note: if the image based provisioning is used nodes are already
|
||||
|
@ -291,6 +292,14 @@ module Astute
|
|||
|
||||
private
|
||||
|
||||
def image_provision(reporter, task_id, nodes)
|
||||
ImageProvision.provision(Context.new(task_id, reporter), nodes)
|
||||
end
|
||||
|
||||
def soft_reboot(reporter, task_id, nodes, task_name)
|
||||
ImageProvision.reboot(Context.new(task_id, reporter), nodes, task_name)
|
||||
end
|
||||
|
||||
def report_result(result, reporter)
|
||||
default_result = {'status' => 'ready', 'progress' => 100}
|
||||
|
||||
|
@ -525,20 +534,12 @@ module Astute
|
|||
)
|
||||
|
||||
if existent_nodes.present?
|
||||
Astute::NailgunHooks.new(
|
||||
[{
|
||||
"priority" => 100,
|
||||
"type" => "reboot",
|
||||
"fail_on_error" => false,
|
||||
"diagnostic_name" => "reboot_reprovisioned_nodes",
|
||||
"uids" => existent_nodes.map { |n| n['uid'] },
|
||||
"parameters" => {
|
||||
"timeout" => Astute.config.reboot_timeout
|
||||
}
|
||||
}],
|
||||
Context.new(task_id, reporter),
|
||||
'provision'
|
||||
).process
|
||||
soft_reboot(
|
||||
reporter,
|
||||
task_id,
|
||||
existent_nodes.map{ |n| n['uid'] },
|
||||
"reboot_reprovisioned_nodes"
|
||||
)
|
||||
end
|
||||
|
||||
cobbler.remove_nodes(nodes)
|
||||
|
|
|
@ -241,24 +241,23 @@ describe Astute::Provisioner do
|
|||
Astute::Provision::Cobbler.any_instance do
|
||||
expects(:power_reboot).with('controller-1')
|
||||
end
|
||||
Astute::CobblerManager.any_instance.stubs(:check_reboot_nodes).returns([])
|
||||
Astute::CobblerManager.any_instance.stubs(:netboot_nodes)
|
||||
Astute::CobblerManager.any_instance.stubs(:edit_nodes)
|
||||
@provisioner.stubs(:change_nodes_type)
|
||||
@provisioner.stubs(:image_provision).returns([])
|
||||
|
||||
Astute::CobblerManager.any_instance.expects(:check_reboot_nodes).never
|
||||
@provisioner.expects(:soft_reboot).returns()
|
||||
|
||||
@provisioner.provision_piece(@reporter, data['task_uuid'], data['engine'], data['nodes'], 'image')
|
||||
end
|
||||
|
||||
it "does not reboot nodes which failed during provisioning" do
|
||||
Astute::Provision::Cobbler.any_instance do
|
||||
expects(:power_reboot).never
|
||||
end
|
||||
Astute::CobblerManager.any_instance.stubs(:check_reboot_nodes).returns([])
|
||||
Astute::CobblerManager.any_instance.stubs(:netboot_nodes)
|
||||
Astute::CobblerManager.any_instance.stubs(:edit_nodes)
|
||||
@provisioner.stubs(:change_nodes_type)
|
||||
@provisioner.stubs(:image_provision).returns(['1'])
|
||||
@provisioner.stubs(:soft_reboot).returns()
|
||||
|
||||
expect(@provisioner.provision_piece(@reporter, data['task_uuid'], data['engine'], data['nodes'], 'image')).to eql(['1'])
|
||||
end
|
||||
|
@ -270,11 +269,11 @@ describe Astute::Provisioner do
|
|||
{'profile' => Astute.config.bootstrap_profile}
|
||||
)
|
||||
end
|
||||
Astute::CobblerManager.any_instance.stubs(:check_reboot_nodes).returns([])
|
||||
Astute::CobblerManager.any_instance.stubs(:netboot_nodes)
|
||||
Astute::CobblerManager.any_instance.stubs(:edit_nodes)
|
||||
@provisioner.stubs(:change_nodes_type)
|
||||
@provisioner.stubs(:image_provision).returns([])
|
||||
@provisioner.stubs(:soft_reboot).returns()
|
||||
|
||||
@provisioner.provision_piece(@reporter, data['task_uuid'], data['engine'], data['nodes'], 'image')
|
||||
end
|
||||
|
@ -283,10 +282,10 @@ describe Astute::Provisioner do
|
|||
Astute::CobblerManager.any_instance do
|
||||
expects(:netboot_nodes).with([], false)
|
||||
end
|
||||
Astute::CobblerManager.any_instance.stubs(:check_reboot_nodes).returns([])
|
||||
Astute::CobblerManager.any_instance.stubs(:edit_nodes)
|
||||
Astute::CobblerManager.any_instance.stubs(:netboot_nodes)
|
||||
@provisioner.stubs(:change_nodes_type)
|
||||
@provisioner.stubs(:soft_reboot).returns()
|
||||
@provisioner.stubs(:image_provision).returns([1])
|
||||
|
||||
@provisioner.provision_piece(@reporter, data['task_uuid'], data['engine'], data['nodes'], 'image')
|
||||
|
@ -302,6 +301,7 @@ describe Astute::Provisioner do
|
|||
.returns([Time.now.to_f, 'controller-1', 'complete'])
|
||||
Astute::CobblerManager.any_instance.stubs(:netboot_nodes)
|
||||
@provisioner.stubs(:change_nodes_type)
|
||||
@provisioner.stubs(:soft_reboot).returns()
|
||||
@provisioner.stubs(:image_provision).returns([])
|
||||
|
||||
@provisioner.provision_piece(@reporter, data['task_uuid'], data['engine'], data['nodes'], 'image')
|
||||
|
@ -1066,11 +1066,11 @@ describe Astute::Provisioner do
|
|||
|
||||
it 'return failed nodes if image provision return failed uid' do
|
||||
Astute::CobblerManager.any_instance.stubs(:netboot_nodes)
|
||||
Astute::CobblerManager.any_instance.stubs(:reboot_nodes)
|
||||
Astute::CobblerManager.any_instance.stubs(:check_reboot_nodes).returns(['node1'])
|
||||
@provisioner.stubs(:change_nodes_type)
|
||||
@provisioner.stubs(:control_reboot_using_ssh)
|
||||
Astute::ImageProvision.stubs(:provision).returns(['1'])
|
||||
result = @provisioner.provision_piece(@reporter, 'task_uuid', engine_attrs, nodes, 'image')
|
||||
result = @provisioner.provision_piece(@reporter, 'task_uuid', engine_attrs, nodes, 'native')
|
||||
result.should eql(['1'])
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue