Project

General

Profile

Download (3.38 KB) Statistics
| Branch: | Tag: | Revision:
module ProxyAPI
class BMC < Resource

def initialize args
@target = args[:host_ip] || '127.0.0.1'
@url = args[:url] + "/bmc"
super args
end

# gets a list of supported providers
def providers
parse get("providers")
end

# gets a list of supported providers installed on the proxy
def providers_installed
parse get("providers/installed")
end

# Perform a boot operation on the bmc device
def boot args
valid_boot_devices = %w[disk cdrom pxe bios]
# valid additional arguments args[:reboot] = true|false, args[:persistent] = true|false
# put "/bmc/:host/chassis/config/?:function?/?:action?" do
case args[:function]
when "bootdevice"
if valid_boot_devices.include?(args[:device])
parse put(args, bmc_url_for('config',"#{args[:function]}/#{args[:device]}"))
else
raise NoMethodError
end
else
raise NoMethodError
end
end

# Perform a power operation on the bmc device
def power args
# get "/bmc/:host/chassis/power/:action"
# put "/bmc/:host/chassis/power/:action"
case args[:action]
when "on?", "off?", "status"
args[:action].chop! if args[:action].include?('?')
response = parse(get(bmc_url_for('power',args[:action]), args))
response.is_a?(Hash) ? response['result'] : response
when "on", "off", "cycle", "soft"
res = parse put(args, bmc_url_for('power',args[:action]))
# This is a simple action, just return the result of the action
res && res['result'] == true
else
raise NoMethodError
end
end

# perform an identify operation on the bmc device
def identify args
# get "/bmc/:host/chassis/identify/:action"
# put "/bmc/:host/chassis/identify/:action"
case args[:action]
when "status"
parse get(bmc_url_for('identify',args[:action]), args)
when "on", "off"
parse put(args, bmc_url_for('identify',args[:action]))
else
raise NoMethodError
end

end

# perform a lan get operation on the bmc device
def lan args
# get "/bmc/:host/lan/:action"
case args[:action]
when "ip", "netmask", "mac", "gateway"
response = parse(get(bmc_url_for('lan',args[:action]), args))
response.is_a?(Hash) ? response['result'] : response
else
raise NoMethodError
end
end

private

def bmc_url_for controller,action
case controller
when "lan"
"/#{@target}/lan/#{action}"
else
"/#{@target}/chassis/#{controller}/#{action}"
end
end

def method_missing(method, *args, &block)
begin
super(method, *args, &block)
rescue NoMethodError
margs = args.first
farg = method.to_s.split('_')
# method must contain 2 parts, ie: power_on, boot_disk
raise NoMethodError unless farg.length == 2

case farg.first
when "power"
margs[:action] = farg.last
power(margs)
when "boot"
margs[:function] = "bootdevice"
margs[:device] = farg.last
boot(margs)
when "identify"
margs[:action] = farg.last
identify(margs)
when "lan"
margs[:action] = farg.last
lan(margs)
else
raise NoMethodError
end
end
end
end
end
(1-1/8)