wbem 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,173 @@
1
+ #
2
+ # Type conversion
3
+ #
4
+
5
+ require 'openwsman'
6
+
7
+ module Wbem
8
+ class Conversion
9
+ #
10
+ # Convert CIM DateTime string representation (see DSP0004, 2.2.1)
11
+ # to Ruby Time (timestamp) or Float (interval, as seconds with fraction)
12
+ # 00000000001111111111222222
13
+ # 01234567890123456789012345
14
+ # East: yyyymmddhhmmss.mmmmmm+utc -> Time (utc = offset in minutes)
15
+ # West: yyyymmddhhmmss.mmmmmm-utc -> Time
16
+ # 2011-11-01T00:00:00Z
17
+ # Interval: ddddddddhhmmss.mmmmmm:000 -> Float (interval in seconds, with fraction)
18
+ #
19
+ def self.cimdatetime_to_ruby str
20
+ # puts "Cmpi.cimdatetime_to_ruby(#{str})"
21
+ case str[21,1]
22
+ when '+', '-'
23
+ # create Time from yyyymmddhhmmss and utc
24
+ t = Time.new(str[0,4].to_i, str[4,2].to_i, str[6,2].to_i, str[8,2].to_i, str[10,2].to_i, str[12,2].to_i, str[22,3].to_i * ((str[21,1]=='+')?60:-60))
25
+ off = str[15,6].to_i / 1000
26
+ # Add fractional part
27
+ return t + off
28
+ when ':'
29
+ # time offset
30
+ off = str[0,8].to_i * 24 * 60 * 60
31
+ off += str[8,2].to_i * 60 * 60 + str[10,2].to_i * 60 + str[12,2].to_i
32
+ off += str[15,6].to_i / 1000
33
+ return off
34
+ when nil
35
+ # 2011-11-01T00:00:00Z
36
+ t = Time.new(str[0,4].to_i, str[5,2].to_i, str[8,2].to_i, str[11,2].to_i, str[14,2].to_i, str[17,2].to_i, (str[19,1] == 'Z')?0:0)
37
+ else
38
+ begin
39
+ require 'date'
40
+ DateTime.parse str
41
+ rescue
42
+ raise ::TypeError.new("Invalid CIM DateTime '#{str}'")
43
+ end
44
+ end
45
+ end
46
+
47
+ #
48
+ # Convert Ruby value to CIM DateTime string representation (see DSP0004, 2.2.1)
49
+ # 00000000001111111111222222
50
+ # 01234567890123456789012345
51
+ # East: yyyymmddhhmmss.mmmmmm+utc -> Time (utc = offset in minutes, mmmmmm is the microsecond within the second
52
+ # West: yyyymmddhhmmss.mmmmmm-utc -> Time
53
+ # Interval: ddddddddhhmmss.mmmmmm:000 -> Float (interval in seconds, with fraction)
54
+ #
55
+ def self.ruby_to_cimdatetime val
56
+ require 'date'
57
+ # puts "Cmpi.ruby_to_cimdatetime(#{val}[#{val.class}])"
58
+ t = nil
59
+ case val
60
+ when Time
61
+ s = val.strftime "%Y%m%d%H%M%S.%6N"
62
+ utc = val.utc_offset # offset in seconds
63
+ if utc < 0
64
+ s << "-"
65
+ utc = -utc
66
+ else
67
+ s << "+"
68
+ end
69
+ val = s + ("%03d" % (utc/60))
70
+ when Numeric
71
+ if val < 0
72
+ # treat it as seconds before epoch
73
+ val = self.ruby_to_cimdatetime( Time.at(val) )
74
+ else
75
+ # treat as interval in microseconds
76
+ secs = (val / 1000000).to_i
77
+ usecs = (val % 1000000).to_i
78
+ days = secs / (24 * 60 * 60)
79
+ secs = secs % (24 * 60 * 60) # seconds within the day
80
+ hours = (secs / (60 * 60)).to_i
81
+ secs = secs % (60 * 60)
82
+ mins = (secs / 60).to_i
83
+ secs = secs % 60
84
+ val = "%08d%02d%02d%02d.%06d:000" % [ days, hours, mins, secs, usecs ]
85
+ end
86
+ when /^\d{14}\.\d{6}[-+:]\d{3}$/
87
+ # fallthru
88
+ when String
89
+ val = self.ruby_to_cimdatetime val.to_f # retry as Numeric
90
+ else
91
+ val = self.ruby_to_cimdatetime val.to_s # retry as string
92
+ end
93
+ val
94
+ end
95
+
96
+ # generic type conversion
97
+ # CIM -> Ruby
98
+ #
99
+ def self.to_ruby type, value
100
+ text = case value
101
+ when Openwsman::XmlNode
102
+ value.text
103
+ when String
104
+ value
105
+ else
106
+ value.to_s
107
+ end
108
+ case type
109
+ when :null,:void
110
+ nil
111
+ when :boolean
112
+ text == 'true'
113
+ when :char16
114
+ text.to_i
115
+ when :string
116
+ text
117
+ when :uint8,:sint8,:uint16,:sint16,:uint32,:sint32,:uint64,:sint64
118
+ text.to_i
119
+ when :real32,:real64
120
+ text.to_f
121
+ when :dateTime
122
+ Wbem::Conversion.cimdatetime_to_ruby text
123
+ when :class
124
+ # puts "to_ruby :class, #{value.to_xml}"
125
+ uri = value.ResourceURI
126
+ if uri # assume ResourceURI and SelectorSet
127
+ # puts "to_ruby :class uri #{uri.text}"
128
+ epr = Openwsman::EndPointReference.new(uri.text)
129
+ value.SelectorSet.each do |s|
130
+ k = s.attr("Name").value
131
+ v = s.text
132
+ epr.add_selector(k, v)
133
+ end
134
+ epr
135
+ else
136
+ # try EndpointReference
137
+ Openwsman::EndPointReference.new(value.to_xml)
138
+ end
139
+ # when :class
140
+ # when :reference
141
+ # when :array
142
+ else
143
+ raise "Unhandled type in to_ruby #{type.inspect}"
144
+ end
145
+ end
146
+ # generic type conversion
147
+ # Ruby -> CIM
148
+ #
149
+ def self.from_ruby type, value
150
+ case type
151
+ when :null,:void
152
+ ""
153
+ when :boolean
154
+ (value)?'true':'false'
155
+ when :char16
156
+ value.to_s
157
+ when :string
158
+ value.to_s
159
+ when :uint8,:sint8,:uint16,:sint16,:uint32,:sint32,:uint64,:sint64
160
+ value.to_i.to_s
161
+ when :real32,:real64
162
+ value.to_f.to_s
163
+ when :dateTime
164
+ Wbem::Conversion.ruby_to_cimdatetime value
165
+ # when :class
166
+ # when :reference
167
+ # when :array
168
+ else
169
+ raise "Unhandled type in from_ruby #{type.inspect}"
170
+ end
171
+ end
172
+ end # class Conversion
173
+ end # module Wbem
@@ -0,0 +1,51 @@
1
+ #
2
+ # Openwsman helper methods for wbem/wsman-instance
3
+ #
4
+
5
+ module Openwsman
6
+ class Transport
7
+ def Transport.auth_request_callback( client, auth_type )
8
+ STDERR.puts "\t *** Transport.auth_request_callback"
9
+ return nil
10
+ end
11
+ end
12
+ #
13
+ # Capture Fault as Exception
14
+ #
15
+ class Exception < ::RuntimeError
16
+ def initialize fault
17
+ unless fault.is_a? Openwsman::Fault
18
+ raise "#{fault} is not a fault" unless fault.fault?
19
+ fault = Openwsman::Fault.new fault
20
+ end
21
+ @fault = fault
22
+ end
23
+ def to_s
24
+ "Fault code #{@fault.code}, subcode #{@fault.subcode}" +
25
+ "\n\treason \"#{@fault.reason}\"" +
26
+ "\n\tdetail \"#{@fault.detail}\""
27
+ end
28
+ end
29
+ #
30
+ # Capture namespace, classname, and properties as ObjectPath
31
+ #
32
+ class ObjectPath
33
+ attr_reader :namespace, :classname, :properties
34
+ def initialize namespace, classname = nil, properties = {}
35
+ @namespace = namespace
36
+ @classname = classname
37
+ @properties = properties
38
+ end
39
+ end
40
+ #
41
+ # Provide Cim::ObjectPath like accessors for EndPointReference
42
+ #
43
+ class EndPointReference
44
+ alias :keys :selector_names
45
+ alias :key_count :selector_count
46
+ alias :add_key :add_selector
47
+ def each_key
48
+ keys.each { |key| yield key }
49
+ end
50
+ end
51
+ end
@@ -1,3 +1,3 @@
1
1
  module Wbem
2
- VERSION = "0.3.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -8,6 +8,10 @@
8
8
  # Licensed under the MIT license
9
9
  #
10
10
  module Wbem
11
+ # class forward declaration
12
+ class WbemClient; end
13
+ class WsmanClient < WbemClient; end
14
+ class CimxmlClient < WbemClient; end
11
15
  #
12
16
  # WbemClient - base class for CimxmlClient and WsmanClient
13
17
  #
@@ -23,6 +27,10 @@ module Wbem
23
27
  @auth_scheme = auth_scheme.to_s.to_sym rescue nil
24
28
  end
25
29
 
30
+ def factory
31
+ @factory ||= Wbem::ClassFactory.new
32
+ end
33
+
26
34
  def response_code
27
35
  @client.response_code
28
36
  end
@@ -44,7 +52,59 @@ public
44
52
  def class_names op, deep_inheritance=false
45
53
  raise "#{self.class}.class_names not implemented"
46
54
  end
47
-
55
+
56
+ #
57
+ # Enumerate class refs
58
+ # Returns Array of Instance References (Sfcc::Cim::ObjectPath or Openwsman::EndPointReference)
59
+ #
60
+ def enumerate classname
61
+ raise "#{self.class}.enumerate not implemented"
62
+ end
63
+
64
+ #
65
+ # get instance by reference
66
+ #
67
+ # call-seq
68
+ # get Openwsman::EndPointReference -> Wbem::Instance
69
+ # get Sfcc::Cim::ObjectPath -> Wbem::Instance
70
+ # get EndPointReference-as-String -> Wbem::Instance
71
+ # get ObjectPath-as-String -> Wbem::Instance
72
+ # get "ClassName", "key" => "value", :namespace => "root/interop"
73
+ #
74
+ def get instance_reference, keys = nil
75
+ if keys
76
+ if self.class == Wbem::WsmanClient
77
+ uri = Openwsman.epr_uri_for "", instance_reference
78
+ instance_reference = Openwsman::EndPointReference.new(uri, nil, keys)
79
+ elsif self.class == Wbem::CimxmlClient
80
+ namespace = keys.delete(:namespace) || "root/cimv2"
81
+ instance_reference = Sfcc::Cim::ObjectPath.new(namespace, instance_reference)
82
+ keys.each do |k,v|
83
+ instance_reference.add_key k, v
84
+ end
85
+ end
86
+ end
87
+ puts "@client.get #{instance_reference.class}..." if Wbem.debug
88
+ case instance_reference
89
+ when Openwsman::EndPointReference
90
+ get_by_epr instance_reference
91
+ when Sfcc::Cim::ObjectPath
92
+ get_by_objectpath instance_reference
93
+ when String
94
+ if self.class == WsmanClient
95
+ get_by_epr Openwsman::EndPointReference.new(instance_reference)
96
+ elsif self.class == CimxmlClient
97
+ get_by_objectpath CimxmlClient.parse_object_path(instance_reference)
98
+ else
99
+ raise "Unsupported Wbem::get #{instance_reference.class} for #{self.class}"
100
+ end
101
+ else
102
+ raise "Unsupported Wbem::get #{instance_reference.class}"
103
+ end
104
+ end
105
+ #
106
+ # ComputerSystem
107
+ #
48
108
  def system_class_name
49
109
  case @product
50
110
  when :winrm then "Win32_ComputerSystem"
@@ -56,7 +116,10 @@ public
56
116
  ns = "" if @product == :iamt
57
117
  instance_names ns, system_class_name
58
118
  end
59
-
119
+
120
+ #
121
+ # RegisteredProfile
122
+ #
60
123
  def profile_class_name
61
124
  "CIM_RegisteredProfile"
62
125
  end
@@ -64,7 +127,10 @@ public
64
127
  ns = "" if @product == :iamt
65
128
  instance_names ns, profile_class_name
66
129
  end
67
-
130
+
131
+ #
132
+ # Service
133
+ #
68
134
  def service_class_name
69
135
  case @product
70
136
  when :winrm then "Win32_Service"
@@ -80,6 +146,10 @@ public
80
146
  ns = "" if @product == :iamt
81
147
  instance_names ns, (@product == :winrm) ? "Win32_Process" : "CIM_Process"
82
148
  end
149
+
150
+ #
151
+ # NetworkAdapter, NetworkPort
152
+ #
83
153
  def network_class_name
84
154
  case @product
85
155
  when :winrm then "Win32_NetworkAdapter"
@@ -92,6 +162,10 @@ public
92
162
  ns = "" if @product == :iamt
93
163
  instance_names ns, network_class_name
94
164
  end
165
+
166
+ #
167
+ # DiskDrive, StorageExtent
168
+ #
95
169
  def storage_class_name
96
170
  case @product
97
171
  when :winrm then "Win32_DiskDrive"
@@ -105,5 +179,35 @@ public
105
179
  instance_names ns, storage_class_name
106
180
  end
107
181
 
108
- end # Class
182
+ end # Class WbemClient
183
+
184
+ #
185
+ # Instance class
186
+ #
187
+ # Represents instance of a CIM object on a client
188
+ #
189
+ # *ABSTRACT*
190
+ #
191
+ # Gets instantiated via a CIM class generated by 'genclassinfo'
192
+ #
193
+ #
194
+ class Instance
195
+ private
196
+ #
197
+ #
198
+ #
199
+ def initialize client, reference, data = nil
200
+ case client
201
+ when Wbem::WsmanClient
202
+ require "wbem/wsman_instance"
203
+ self.extend(WsmanInstance)
204
+ wsman_initialize client, reference, data
205
+ when Wbem::CimxmlClient
206
+ self.extend(CimxmlInstance)
207
+ cimxml_initialize client, reference, data
208
+ else
209
+ STDERR.puts "Unkwown client class #{client.class}"
210
+ end
211
+ end
212
+ end
109
213
  end # Module
@@ -8,164 +8,13 @@
8
8
  # Licensed under the MIT license
9
9
  #
10
10
  require "wbem/wbem"
11
+ require "wbem/wsman_instance"
11
12
  require "openwsman"
12
-
13
- class AuthError < StandardError
14
- end
15
-
16
- module Openwsman
17
- class Transport
18
- def Transport.auth_request_callback( client, auth_type )
19
- STDERR.puts "\t *** Transport.auth_request_callback"
20
- return nil
21
- end
22
- end
23
- #
24
- # Capture Fault as Exception
25
- #
26
- class Exception < ::RuntimeError
27
- def initialize fault
28
- unless fault.is_a? Openwsman::Fault
29
- raise "#{fault} is not a fault" unless fault.fault?
30
- fault = Openwsman::Fault.new fault
31
- end
32
- @fault = fault
33
- end
34
- def to_s
35
- "Fault code #{@fault.code}, subcode #{@fault.subcode}" +
36
- "\n\treason #{@fault.reason}" +
37
- "\n\tdetail #{@fault.detail}"
38
- end
39
- end
40
- #
41
- # Capture namespace, classname, and properties as ObjectPath
42
- #
43
- class ObjectPath
44
- attr_reader :namespace, :classname, :properties
45
- def initialize namespace, classname = nil, properties = {}
46
- @namespace = namespace
47
- @classname = classname
48
- @properties = properties
49
- end
50
- end
51
- #
52
- # Provide Cim::ObjectPath like accessors for EndPointReference
53
- #
54
- class EndPointReference
55
- alias :keys :selector_names
56
- alias :key_count :selector_count
57
- alias :add_key :add_selector
58
- def each_key
59
- keys.each { |key| yield key }
60
- end
61
- end
62
- #
63
- # Capture XmlDoc + WsmanClient as Instance
64
- #
65
- class Instance
66
- def initialize node, client, epr_or_uri
67
- @node = (node.is_a? Openwsman::XmlDoc) ? node.body : node
68
- @epr = (epr_or_uri.is_a? Openwsman::EndPointReference) ? epr_or_uri : Openwsman::EndPointReference.new(epr_or_uri)
69
- @client = client
70
- end
71
- #
72
- #
73
- #
74
- def to_s
75
- "Instance #{@client}\n\t#{@epr}\n\t#{@node.to_xml}"
76
- end
77
- #
78
- # Instance#<property>
79
- # Instance#<method>(<args>)
80
- #
81
- def method_missing name, *args
82
- if args.empty?
83
- # try property first
84
- res = @node.send name
85
- return res.text if res
86
- end
87
- # try as method invocation
88
- options = Openwsman::ClientOptions.new
89
- options.set_dump_request
90
- selectors = {}
91
- @epr.each do |k,v|
92
- selectors[k] = v
93
- end
94
- options.selectors = selectors # instance key properties
95
- uri = @epr.resource_uri
96
-
97
- #
98
- # get method input parameter information
99
- #
100
- classname = @epr.classname
101
- s = "mof/#{classname}"
102
- begin
103
- require s
104
- rescue LoadError
105
- raise RuntimeError.new "Cannot load #{s} for type information"
106
- end
107
- methods = MOF.class_eval "#{classname}::METHODS"
108
- method = methods[name.to_s]
109
- raise RuntimeError.new("Unknown method #{name} for #{classname}") unless method
110
- result_type = method[:type]
111
- parameters = method[:parameters] || {}
112
- input = parameters[:in]
113
- output = parameters[:out]
114
- argsin = {}
115
- i = 0
116
- if input
117
- while i < input.size
118
- value = args.shift
119
- raise "Argument for #{input[i]} is nil, not allowed !" unless value
120
- argsin[input[i]] = value
121
- # FIXME more typecheck of args ?
122
- i += 2
123
- end
124
- end
125
- STDERR.puts "\n\tproperties #{argsin.inspect}\n"
126
- options.properties = argsin
127
- #
128
- # output parameters ?
129
- #
130
- argsout = nil
131
- if output
132
- if args.empty?
133
- raise "Function #{name} has output arguments, please add an empty hash to the call"
134
- end
135
- argsout = args.shift
136
- unless argsout.kind_of? Hash
137
- raise "Function #{name} has output arguments, last argument must be a Hash"
138
- end
139
- unless args.empty?
140
- raise "Function call to #{name} has excess arguments"
141
- end
142
- end
143
- STDERR.puts "\n\targsout #{argsout.inspect}\n"
144
- Openwsman.debug = -1
145
- STDERR.puts "\n\tinvoke #{uri}.#{name}\n"
146
- res = @client.client.invoke(options, uri, name.to_s)
147
- raise Openwsman::Exception.new(res) if res.fault?
148
- STDERR.puts "\n\tresult #{res.to_xml}\n"
149
- result = res.find(uri, "#{name}_OUTPUT").find(uri, "ReturnValue").text
150
- case result_type
151
- when :boolean
152
- result == "true" ? true : false
153
- when :uint8, :uint16, :uint32, :uint64
154
- result.to_i
155
- when :string
156
- result
157
- when :float
158
- result.to_f
159
- when :datetime
160
- else
161
- raise "Unsupported result_type #{result_type.inspect}"
162
- end
163
- end
164
- end
165
- end
166
-
13
+ require "wbem/openwsman"
14
+ require "cim"
167
15
 
168
16
  module Wbem
17
+
169
18
  class WsmanClient < WbemClient
170
19
  private
171
20
  #
@@ -221,13 +70,32 @@ private
221
70
  # STDERR.puts "Return #{doc.to_xml}"
222
71
  doc
223
72
  end
73
+ #
74
+ # Get Wbem::Instance by EndPointReference
75
+ #
76
+ def get_by_epr epr
77
+ options = Openwsman::ClientOptions.new
78
+ options.set_dump_request if Wbem.debug
79
+ # puts "***\t@client.get_by_epr #{epr.GroupComponent}\n"
80
+ doc = @client.get_from_epr( options, epr )
81
+ unless doc
82
+ raise RuntimeError.new "Identify failed: HTTP #{@client.response_code}, Err #{@client.last_error}:#{@client.fault_string}"
83
+ end
84
+ puts doc.to_xml if Wbem.debug
85
+ if doc.fault?
86
+ raise Openwsman::Fault.new(doc).to_s
87
+ end
88
+ klass = factory.class_for epr.classname
89
+ klass.new self, epr, doc
90
+ end
91
+
224
92
  public
225
93
  attr_reader :client
226
94
 
227
95
  def initialize uri, auth_scheme = nil
228
96
  super uri, auth_scheme
229
97
  @url.path = "/wsman" if @url.path.nil? || @url.path.empty?
230
- # Openwsman::debug = -1
98
+ Openwsman::debug = -1 if Wbem.debug
231
99
  STDERR.puts "WsmanClient connecting to #{uri}, auth #{@auth_scheme.inspect}" if Wbem.debug
232
100
 
233
101
  @client = Openwsman::Client.new @url.to_s
@@ -254,7 +122,7 @@ public
254
122
  raise "Unknown auth_scheme #{@auth_scheme.inspect}"
255
123
  end
256
124
  @options = Openwsman::ClientOptions.new
257
-
125
+
258
126
  # STDERR.puts "auth #{@auth_scheme.inspect} -> #{@client.transport.auth_method}"
259
127
 
260
128
  doc = _identify
@@ -356,7 +224,7 @@ public
356
224
  items = result.Items rescue nil
357
225
  if items
358
226
  items.each do |inst|
359
- yield Openwsman::Instance.new(inst, self, uri)
227
+ yield Wbem::Instance.new(self, uri, inst)
360
228
  end
361
229
  end
362
230
  context = result.context
@@ -450,14 +318,13 @@ public
450
318
  else
451
319
  uri = epr_uri_for(namespace, classname)
452
320
  end
453
- @options.flags = Openwsman::FLAG_ENUMERATION_ENUM_EPR # get EPRs
454
- @options.flags = Openwsman::FLAG_ENUMERATION_OPTIMIZATION
321
+ @options.flags = Openwsman::FLAG_ENUMERATION_ENUM_EPR | Openwsman::FLAG_ENUMERATION_OPTIMIZATION
455
322
  @options.max_elements = 999
456
323
  @options.cim_namespace = namespace if @product == :openwsman
457
- @options.set_dump_request
324
+ @options.set_dump_request if Wbem.debug
458
325
  @options.selectors = properties unless properties.empty?
459
326
  start = Time.now
460
- STDERR.puts "instance_names enumerate (#{uri})"
327
+ STDERR.puts "instance_names enumerate (#{uri})" if Wbem.debug
461
328
  result = @client.enumerate( @options, nil, uri )
462
329
  names = []
463
330
  loop do
@@ -475,10 +342,33 @@ public
475
342
  break unless context
476
343
  result = @client.pull( @options, nil, uri, context )
477
344
  end
478
- STDERR.puts "Enumerated #{names.size} items in #{Time.now-start} seconds"
345
+ STDERR.puts "Enumerated #{names.size} items in #{Time.now-start} seconds" if Wbem.debug
479
346
  return names
480
347
  end
481
348
 
349
+ #
350
+ # get instance by reference
351
+ #
352
+ # call-seq
353
+ # get Openwsman::EndPointReference -> Wbem::Instance
354
+ # get EndPointReference-as-String -> Wbem::Instance
355
+ # get "ClassName", "key" => "value", :namespace => "root/interop"
356
+ #
357
+ def get instance_reference, keys = nil
358
+ if keys
359
+ uri = Openwsman.epr_uri_for "", instance_reference
360
+ instance_reference = Openwsman::EndPointReference.new(uri, nil, keys)
361
+ end
362
+ puts "@client.get #{instance_reference.class}..." if Wbem.debug
363
+ case instance_reference
364
+ when Openwsman::EndPointReference
365
+ get_by_epr instance_reference
366
+ when String
367
+ get_by_epr Openwsman::EndPointReference.new(instance_reference)
368
+ else
369
+ raise "Unsupported Wbem::get #{instance_reference.class}"
370
+ end
371
+ end
482
372
  #
483
373
  # Return matching Wbem::Instance for first instance
484
374
  # matching namespace, classname, properties
@@ -503,14 +393,14 @@ public
503
393
  else
504
394
  uri = epr_uri_for(namespace, classname)
505
395
  end
506
- @options.set_dump_request
396
+ @options.set_dump_request if Wbem.debug
507
397
  @options.cim_namespace = namespace if @product == :openwsman
508
398
  @options.selectors = properties unless properties.empty?
509
- STDERR.puts "@client.get(namepace '#{@options.cim_namespace}', props #{properties.inspect}, uri #{uri}"
399
+ STDERR.puts "@client.get(namepace '#{@options.cim_namespace}', props #{properties.inspect}, uri #{uri}" if Wbem.debug
510
400
  res = @client.get(@options, uri)
511
401
  raise Openwsman::Exception.new res if res.fault?
512
- Openwsman::Instance.new res, self, Openwsman::EndPointReference.new(uri, "", properties)
402
+ Wbem::Instance.new self, Openwsman::EndPointReference.new(uri, "", properties), res
513
403
  end
514
404
 
515
- end
516
- end # module
405
+ end # class WsmanClient
406
+ end # module Wbem