blob: 70cfcbab42deef125ac34d029aed5891abd9a8d5 [file] [log] [blame]
#
# openwsmanplugin.rb
#
# Generic openwsman server plugin
#
module Openwsman
class XmlDoc
def self.method_missing method, *args
STDERR.puts "#{self.class}.#{method} not implemented"
end
end
class XmlNode
def self.method_missing method, *args
STDERR.puts "#{self.class}.#{method} not implemented"
end
end
def self.create_plugin
Sample.new
end
#
# identify
#
def self.identify context
STDERR.puts "OpenwsmanPlugin.identify, context #{context}"
end
#
# enumerate
#
def self.enumerate context, enum_info, status
STDERR.puts "OpenwsmanPlugin.enumerate, context #{context}, enum_info #{enum_info}, status #{status}"
STDERR.puts "to #{enum_info.epr_to}, uri #{enum_info.epr_uri}"
STDERR.puts "class #{context.classname}, method #{context.method}"
STDERR.puts "action #{context.action}, resource_uri #{context.resource_uri}"
selectors = context.selectors
STDERR.puts "selectors #{selectors}"
enum_info.index = 0;
enum_info.total_items = 10
# error
# enumInfo.pull_result = nil
# end
enum_info.enum_results = 1
enum_info.enum_context = 1
true
end
#
# pull
#
def self.pull context, enum_info, status
STDERR.puts "OpenwsmanPlugin.pull, context #{context}, enum_info #{enum_info}, status #{status}"
STDERR.puts "enum_info.index #{enum_info.index} enum_info.total_items #{enum_info.total_items}"
if enum_info.index < enum_info.total_items then
out_doc = context.indoc.create_response_envelope
body = out_doc.body
response = body.add(XML_NS_ENUMERATION, WSENUM_PULL_RESP)
response = response.add(XML_NS_ENUMERATION, WSENUM_ITEMS)
response.add(nil, "item#{enum_info.index}", "#{enum_info.index}")
STDERR.puts "pull response #{out_doc}"
enum_info.pull_result = out_doc
return true
else
enum_info.enum_results = nil
enum_info.enum_context = nil
STDERR.puts "pull failed"
end
end
#
# release
#
def self.release context, enum_info, status
STDERR.puts "OpenwsmanPlugin.release, context #{context}"
true
end
#
# create
#
def self.create op
STDERR.puts "OpenwsmanPlugin.create, op #{op}"
end
#
# delete
#
def self.delete op
STDERR.puts "OpenwsmanPlugin.delete, op #{op}"
end
#
# get
#
def self.get op
STDERR.puts "OpenwsmanPlugin.get, op #{op}"
soap = op.soap
STDERR.puts "soap #{soap}"
indoc = op.indoc
STDERR.puts "indoc #{indoc}"
context = soap.create_ep_context(indoc)
STDERR.puts "context #{context}"
# retrieve custom action
msg = op.msg
STDERR.puts "msg #{msg}"
selectors = context.selectors
STDERR.puts "selectors #{selectors}"
uri = context.resource_uri
STDERR.puts "uri #{uri}"
op.outdoc = indoc.create_response_envelope
body = op.outdoc.body
response = body.add(XML_NS_TRANSFER, TRANSFER_GET_RESP)
response = response.add(XML_NS_TRANSFER, "foo", "bar")
true
end
#
# put
#
def self.put op
STDERR.puts "OpenwsmanPlugin.put, op #{op}"
end
#
# custom
#
def self.custom op
STDERR.puts "OpenwsmanPlugin.custom, op #{op}"
status.code = WSA_ENDPOINT_UNAVAILABLE
status.detail = WSMAN_DETAIL_LOCALE
status.msg = "This Ruby plugin does not implement 'get'"
doc = XmlDoc.new "fault"
status.generate_fault(doc)
end
#
# catch missing methods
#
def self.method_missing method, *args
STDERR.puts "#{self.class}.#{method} not implemented"
end
class Sample
SCHEMA = "http://schema.opensuse.org/swig/wsman-schema/1-0"
def initialize *args
STDERR.puts "OpenwsmanPlugin.new #{args}"
end
def namespaces
[ [SCHEMA, "Ruby"] ]
end
def identify context
STDERR.puts "OpenwsmanPlugin.identify, context #{context}"
end
def enumerate context, enum_info, status
STDERR.puts "OpenwsmanPlugin.enumerate, context #{context}"
end
def release context, enum_info, status
STDERR.puts "OpenwsmanPlugin.release, context #{context}"
end
def pull context, enum_info, status
STDERR.puts "OpenwsmanPlugin.pull, op #{op}"
end
def get op
STDERR.puts "OpenwsmanPlugin.get, op #{op}"
end
def custom op
STDERR.puts "OpenwsmanPlugin.custom, op #{op}"
end
def put op
STDERR.puts "OpenwsmanPlugin.put, op #{op}"
end
def create op
STDERR.puts "OpenwsmanPlugin.create, op #{op}"
end
def delete op
STDERR.puts "OpenwsmanPlugin.delete, op #{op}"
end
end
end