Add logging for mcagent erase_node module,

also removed unused code.

Closes-bug: #1255537
Change-Id: Ic80eb700101a1bfa544f1690d7f687e5f166e24c
This commit is contained in:
Evgeniy L
2013-12-17 12:15:44 +04:00
parent 75aa0877cb
commit f1c1949255

View File

@@ -19,7 +19,8 @@ require 'fileutils'
module MCollective
module Agent
class Erase_node<RPC::Agent
class Erase_node < RPC::Agent
action "erase_node" do
erase_node
end
@@ -28,7 +29,7 @@ module MCollective
reboot
end
private
private
def erase_node
request_reboot = request.data[:reboot]
@@ -42,6 +43,7 @@ module MCollective
get_boot_devices.each do |dev|
erase_data(dev) unless dry_run
end
reply[:erased] = true
rescue Exception => e
reply[:erased] = false
@@ -73,7 +75,7 @@ module MCollective
basename_dir = File.basename(block_device_dir)
major = `udevadm info --query=property --name=#{basename_dir} | grep MAJOR`.strip.split(/\=/)[-1]
if File.exists?("/sys/block/#{basename_dir}/removable")
removable = File.open("/sys/block/#{basename_dir}/removable"){|f| f.read_nonblock(1024).strip}
removable = File.open("/sys/block/#{basename_dir}/removable") { |f| f.read_nonblock(1024).strip }
end
# look at https://github.com/torvalds/linux/blob/master/Documentation/devices.txt
blocks << basename_dir if major =~ /^(3|8|202|252)$/ && removable =~ /^0$/
@@ -81,63 +83,36 @@ module MCollective
end
end
def get_boot_device_obsolete
dev_map = '/boot/grub/device.map'
grub_conf = '/boot/grub/grub.conf'
# Look boot device at GRUB device.map file
if File.file?(dev_map) and File.readable?(dev_map)
open(dev_map).readlines.each do |l|
line = l.strip
unless line.start_with?('#')
grub_dev, kernel_dev = line.split(%r{[ |\t]+})
return kernel_dev if grub_dev == '(hd0)'
end
end
end
# Look boot device at GRUB config autogenerated file
if File.file?(grub_conf) and File.readable?(grub_conf)
open(grub_conf).readlines.each do |l|
line = l.strip
if line.start_with?('#boot=')
grub_dev, kernel_dev = line.split('=')
return kernel_dev
end
end
end
# If nothing found
raise 'Boot device not found.'
end
def reboot
cmd = "/bin/sleep 5; /sbin/reboot --force"
cmd = '/bin/sleep 5; /sbin/reboot --force'
debug_msg("Run node rebooting command '#{cmd}'")
pid = fork { system(cmd) }
Process.detach(pid)
end
def get_data(file, length, offset=0)
fd = open(file)
fd.seek(offset)
ret = fd.sysread(length)
fd.close
ret
end
def erase_data(dev, length=1, offset=0)
system("dd if=/dev/zero of=/dev/#{dev} bs=1M count=#{length} skip=#{offset}")
cmd = "dd if=/dev/zero of=/dev/#{dev} bs=1M count=#{length} skip=#{offset}"
status = system(cmd)
debug_msg("Run device erasing command '#{cmd}' returned '#{status}'")
status
end
def erase_data_obsolete(file, length, offset=0)
fd = open(file, 'w')
fd.seek(offset)
ret = fd.syswrite("\000"*length)
fd.close
system('/bin/sync')
end
# Prevent discover by agent while node rebooting.
# Prevent discover by agent while node rebooting
def prevent_discover
FileUtils.touch '/var/run/nodiscover'
lock_path = '/var/run/nodiscover'
debug_msg("Create file for discovery preventing #{lock_path}")
FileUtils.touch(lock_path)
end
# In case of node erasing we can lose all
# debug messages, lets send them to orchestrator
def debug_msg(msg)
reply[:debug_msg] = [] unless reply[:debug_msg]
Log.debug(msg)
reply[:debug_msg] << msg
end
end
end
end