wbem 0.2.0 → 0.2.3

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.
data/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,13 @@
1
+ == 0.2.3
2
+
3
+ * Make #instance_names return generic result
4
+ * Implement #systems, #services, #processes, #networks and #storages
5
+
6
+ == 0.2.1
7
+
8
+ * add 'auth_scheme' to client connection
9
+ * support Intel AMT
10
+
1
11
  == 0.2.0
2
12
 
3
13
  * add 'class_names', supporting WINRM
data/lib/wbem.rb CHANGED
@@ -16,6 +16,7 @@ module Wbem
16
16
  def Wbem.debug= level
17
17
  @@debug = (level == 0) ? nil : level
18
18
  end
19
+
19
20
  class Client
20
21
  require 'uri'
21
22
  require 'wbem/wsman'
@@ -30,8 +31,8 @@ module Wbem
30
31
  # :wsman - connect via WS-Management
31
32
  # else - probe connection (cim/xml first)
32
33
  #
33
- def self.connect uri, protocol = nil
34
- STDERR.puts "Wbem::Client.connect(#{uri},#{protocol})"
34
+ def self.connect uri, protocol = nil, auth_scheme = nil
35
+ STDERR.puts "Wbem::Client.connect(#{uri},#{protocol},#{auth_scheme})"
35
36
  unless uri.is_a?(URI)
36
37
  u = URI.parse(uri)
37
38
  protocol_given = uri.match(/:\d/)
@@ -39,12 +40,12 @@ module Wbem
39
40
  u = uri
40
41
  protocol_given = uri.port
41
42
  end
42
- case protocol
43
+ case protocol.to_sym
43
44
  when :wsman
44
45
  unless protocol_given
45
46
  u.port = (u.scheme == "http") ? 5985 : 5986
46
47
  end
47
- return WsmanClient.new u
48
+ return WsmanClient.new u, auth_scheme
48
49
  when :cimxml
49
50
  unless protocol_given
50
51
  u.port = (u.scheme == "http") ? 5988 : 5989
@@ -54,7 +55,7 @@ module Wbem
54
55
  # no connect, check known ports
55
56
  case u.port
56
57
  when 8888, 8889, 5985, 5986
57
- return WsmanClient.new u
58
+ return WsmanClient.new u, auth_scheme
58
59
  when 5988, 5989
59
60
  return CimxmlClient.new u
60
61
  end
@@ -68,7 +69,7 @@ module Wbem
68
69
  if port == 443 && u.scheme == 'https' # https://hostname
69
70
  u.port = (protocol == :cimxml) ? 5989: 5986
70
71
  end
71
- c = Wbem::Client.connect u, protocol
72
+ c = Wbem::Client.connect u, protocol, auth_scheme
72
73
  if c
73
74
  # STDERR.puts "Connect #{u} as #{c}"
74
75
  return c
data/lib/wbem/cimxml.rb CHANGED
@@ -34,9 +34,10 @@ private
34
34
  end
35
35
  public
36
36
 
37
- def initialize url
38
- super url
39
- @client = Sfcc::Cim::Client.connect url
37
+ def initialize url, auth_scheme = nil
38
+ super url, auth_scheme
39
+ STDERR.puts "CIMXML.connect >#{url}<"
40
+ @client = Sfcc::Cim::Client.connect( { :uri => url, :verify => false } )
40
41
  STDERR.puts "CIMXML.connect #{url} -> #{@client}" if Wbem.debug
41
42
  _identify
42
43
  end
@@ -76,13 +77,16 @@ public
76
77
  end
77
78
 
78
79
  #
79
- # Return list of instance_names (object pathes) for given objectpath
80
+ # Return list of Wbem::EndpointReference (object pathes) for instances
81
+ # of namespace, classname
80
82
  #
81
- def instance_names objectpath
83
+ def instance_names namespace, classname
84
+ objectpath = Sfcc::Cim::ObjectPath.new(namespace,classname)
82
85
  STDERR.puts "#{@client}.instance_names(#{objectpath})"
83
86
  ret = []
84
87
  begin
85
88
  @client.instance_names(objectpath).each do |path|
89
+ path.namespace = namespace # add missing data
86
90
  ret << path
87
91
  end
88
92
  rescue Sfcc::Cim::ErrorInvalidClass, Sfcc::Cim::ErrorInvalidNamespace
data/lib/wbem/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Wbem
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.3"
3
3
  end
data/lib/wbem/wbem.rb CHANGED
@@ -16,9 +16,11 @@ module Wbem
16
16
 
17
17
  attr_reader :url, :response
18
18
  attr_reader :product
19
+ attr_accessor :auth_scheme
19
20
 
20
- def initialize url
21
+ def initialize url, auth_scheme = :basic
21
22
  @url = (url.is_a? URI) ? url : URI.parse(url)
23
+ @auth_scheme = auth_scheme.to_s.to_sym
22
24
  end
23
25
 
24
26
  def response_code
@@ -66,8 +68,21 @@ public
66
68
  raise "#{self.class}.class_names not implemented"
67
69
  end
68
70
 
69
- def instance_names classname
70
- raise "#{self.class}.instance_names not implemented"
71
+ def systems ns="root/cimv2"
72
+ instance_names ns, (@product == :winrm) ? "Win32_ComputerSystem" : "CIM_ComputerSystem"
71
73
  end
74
+ def services ns="root/cimv2"
75
+ instance_names ns, (@product == :winrm) ? "Win32_Service" : "CIM_Service"
76
+ end
77
+ def processes ns="root/cimv2"
78
+ instance_names ns, (@product == :winrm) ? "Win32_Process" : "CIM_Process"
79
+ end
80
+ def networks ns="root/cimv2"
81
+ instance_names ns, (@product == :winrm) ? "Win32_NetworkAdapter" : "CIM_NetworkAdapter"
82
+ end
83
+ def storages ns="root/cimv2"
84
+ instance_names ns, (@product == :winrm) ? "Win32_DiskDrive" : "CIM_DiskDrive"
85
+ end
86
+
72
87
  end # Class
73
88
  end # Module
data/lib/wbem/wsman.rb CHANGED
@@ -52,21 +52,38 @@ private
52
52
  end
53
53
  public
54
54
 
55
- def initialize uri
56
- super uri
55
+ def initialize uri, auth_scheme = nil
56
+ super uri, auth_scheme
57
57
  @url.path = "/wsman" if @url.path.nil? || @url.path.empty?
58
58
  # Openwsman::debug = -1
59
- STDERR.puts "WsmanClient connecting to #{uri}" if Wbem.debug
59
+ STDERR.puts "WsmanClient connecting to #{uri}, auth #{@auth_scheme.inspect}" if Wbem.debug
60
60
 
61
61
  @client = Openwsman::Client.new @url.to_s
62
62
  raise "Cannot create Openwsman client" unless @client
63
63
  @client.transport.timeout = 5
64
64
  @client.transport.verify_peer = 0
65
65
  @client.transport.verify_host = 0
66
- # FIXME
67
- # @client.transport.auth_method = (@url.scheme == 'http') ? Openwsman::BASIC_AUTH_STR : Openwsman::DIGEST_AUTH_STR
68
- @client.transport.auth_method = Openwsman::BASIC_AUTH_STR
66
+ case @auth_scheme
67
+ when nil, ""
68
+ @client.transport.auth_method = nil # negotiate
69
+ when /none/i
70
+ @client.transport.auth_method = Openwsman::NO_AUTH_STR
71
+ when /basic/i
72
+ @client.transport.auth_method = Openwsman::BASIC_AUTH_STR
73
+ when /digest/i
74
+ @client.transport.auth_method = Openwsman::DIGEST_AUTH_STR
75
+ when /pass/i
76
+ @client.transport.auth_method = Openwsman::PASS_AUTH_STR
77
+ when /ntlm/i
78
+ @client.transport.auth_method = Openwsman::NTLM_AUTH_STR
79
+ when /gss/i
80
+ @client.transport.auth_method = Openwsman::GSSNEGOTIATE_AUTH_STR
81
+ else
82
+ raise "Unknown auth_scheme #{@auth_scheme.inspect}"
83
+ end
69
84
  @options = Openwsman::ClientOptions.new
85
+
86
+ # STDERR.puts "auth #{@auth_scheme.inspect} -> #{@client.transport.auth_method}"
70
87
 
71
88
  doc = _identify
72
89
  # STDERR.puts doc.to_xml
@@ -76,7 +93,7 @@ public
76
93
  if Wbem.debug
77
94
  STDERR.puts "Protocol_version '#{@protocol_version}'"
78
95
  STDERR.puts "Product vendor '#{@product_vendor}'"
79
- STDERR.puts "Product version '#{@product_version}'"
96
+ STDERR.puts "Product version '#{@product_version}'"
80
97
  end
81
98
  #
82
99
  # Windows winrm 2.0
@@ -100,7 +117,7 @@ public
100
117
  end
101
118
 
102
119
  case @product_vendor
103
- when "Microsoft Corporation"
120
+ when /Microsoft/i
104
121
  @prefix = "http://schemas.microsoft.com/wbem/wsman/1/wmi/"
105
122
  if @product_version =~ /^OS:\s([\d\.]+)\sSP:\s([\d\.]+)\sStack:\s([\d\.]+)$/
106
123
  @product_version = $3
@@ -108,9 +125,15 @@ public
108
125
  STDERR.puts "Unrecognized product version #{@product_version}"
109
126
  end
110
127
  @product = :winrm
111
- when "Openwsman Project"
128
+ when /Openwsman/i
112
129
  @prefix = "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/"
113
130
  @product = :openwsman
131
+ when /Intel/i
132
+ @prefix = "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/"
133
+ @product = :iamt
134
+ if @product_version =~ /^AMT\s(\d\.\d)$/
135
+ @product_version = $1
136
+ end
114
137
  else
115
138
  STDERR.puts "Unsupported WS-Management vendor #{@product_vendor}"
116
139
  @prefix = "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/"
@@ -195,28 +218,25 @@ public
195
218
  return classes
196
219
  end
197
220
 
198
- def instance_names object_path
221
+ def instance_names namespace, classname
199
222
  @options.flags = Openwsman::FLAG_ENUMERATION_OPTIMIZATION
200
223
  @options.max_elements = 999
201
- @options.cim_namespace = object_path.namespace
202
- # http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/
203
- # CIM=http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2
204
- # OpenWBEM=http://schema.openwbem.org/wbem/wscim/1/cim-schema/2
205
- # Linux=http://sblim.sf.net/wbem/wscim/1/cim-schema/2
206
- # OMC=http://schema.omc-project.org/wbem/wscim/1/cim-schema/2
207
- # PG=http://schema.openpegasus.org/wbem/wscim/1/cim-schema/2
208
- uri = "http://schemas.dmtf.org/wbem/wscim/1/cim-schema/2/"+object_path.classname
224
+ @options.cim_namespace = namespace
225
+ uri = Openwsman::epr_prefix_for(classname, namespace) + "/#{classname}"
209
226
  result = @client.enumerate( @options, nil, uri )
210
227
  if result.fault?
211
228
  puts "Enumerate instances (#{uri}) failed:\n\tResult code #{@client.response_code}, Fault: #{@client.fault_string}"
212
229
  return []
213
230
  end
214
- output = result.body[method]
231
+
215
232
  instances = []
216
- output.each do |i|
217
- instances << i.to_s
233
+ result.Items.each do |item|
234
+ item.add(nil, "namespace", namespace)
235
+ item.add(nil, "classname", classname)
236
+ instances << item
218
237
  end
219
238
  return instances
220
239
  end
240
+
221
241
  end
222
242
  end # module
metadata CHANGED
@@ -1,64 +1,45 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: wbem
3
- version: !ruby/object:Gem::Version
4
- hash: 23
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.3
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 2
9
- - 0
10
- version: 0.2.0
11
6
  platform: ruby
12
- authors:
13
- - "Klaus K\xC3\xA4mpf"
7
+ authors:
8
+ - Klaus Kämpf
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-02-10 00:00:00 +01:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2012-03-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: yard
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &3187880 !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 1
30
- segments:
31
- - 0
32
- - 5
33
- version: "0.5"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0.5'
34
22
  type: :development
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: sfcc
38
23
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *3187880
25
+ - !ruby/object:Gem::Dependency
26
+ name: sfcc
27
+ requirement: &3187220 !ruby/object:Gem::Requirement
40
28
  none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- hash: 17
45
- segments:
46
- - 0
47
- - 3
48
- - 1
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
49
32
  version: 0.3.1
50
33
  type: :runtime
51
- version_requirements: *id002
34
+ prerelease: false
35
+ version_requirements: *3187220
52
36
  description: ruby-wbem allows to access a CIMOM transparently through CIM/XML or WS-Management
53
- email:
37
+ email:
54
38
  - kkaempf@suse.de
55
39
  executables: []
56
-
57
40
  extensions: []
58
-
59
41
  extra_rdoc_files: []
60
-
61
- files:
42
+ files:
62
43
  - lib/wbem.rb
63
44
  - lib/wbem/wbem.rb
64
45
  - lib/wbem/cimxml.rb
@@ -66,43 +47,29 @@ files:
66
47
  - lib/wbem/wsman.rb
67
48
  - CHANGELOG.rdoc
68
49
  - README.rdoc
69
- has_rdoc: true
70
50
  homepage: http://www.github.com/kkaempf/ruby-wbem
71
51
  licenses: []
72
-
73
- post_install_message: " ____\n\
74
- /@ ~-.\n\
75
- / __ .- | remember to have fun! \n // // @ \n\n"
52
+ post_install_message: ! " ____\n/@ ~-.\n/ __ .- | remember to have fun! \n //
53
+ // @ \n\n"
76
54
  rdoc_options: []
77
-
78
- require_paths:
55
+ require_paths:
79
56
  - lib
80
- required_ruby_version: !ruby/object:Gem::Requirement
57
+ required_ruby_version: !ruby/object:Gem::Requirement
81
58
  none: false
82
- requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- hash: 3
86
- segments:
87
- - 0
88
- version: "0"
89
- required_rubygems_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
64
  none: false
91
- requirements:
92
- - - ">="
93
- - !ruby/object:Gem::Version
94
- hash: 23
95
- segments:
96
- - 1
97
- - 3
98
- - 6
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
99
68
  version: 1.3.6
100
69
  requirements: []
101
-
102
70
  rubyforge_project:
103
- rubygems_version: 1.5.0
71
+ rubygems_version: 1.8.15
104
72
  signing_key:
105
73
  specification_version: 3
106
74
  summary: WBEM client for Ruby based on ruby-sfcc and openwsman
107
75
  test_files: []
108
-