opennebula-oca 3.8.0 → 3.9.0.beta

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.
Files changed (40) hide show
  1. data/lib/{OpenNebula/Acl.rb → opennebula/acl.rb} +0 -0
  2. data/lib/{OpenNebula/AclPool.rb → opennebula/acl_pool.rb} +1 -1
  3. data/lib/{OpenNebula.rb → opennebula/client.rb} +0 -73
  4. data/lib/{OpenNebula/Cluster.rb → opennebula/cluster.rb} +1 -1
  5. data/lib/{OpenNebula/ClusterPool.rb → opennebula/cluster_pool.rb} +1 -1
  6. data/lib/{OpenNebula/Datastore.rb → opennebula/datastore.rb} +23 -1
  7. data/lib/{OpenNebula/DatastorePool.rb → opennebula/datastore_pool.rb} +1 -1
  8. data/lib/{OpenNebula/Document.rb → opennebula/document.rb} +13 -2
  9. data/lib/{OpenNebula/DocumentJSON.rb → opennebula/document_json.rb} +0 -0
  10. data/lib/{OpenNebula/DocumentPool.rb → opennebula/document_pool.rb} +2 -2
  11. data/lib/{OpenNebula/DocumentPoolJSON.rb → opennebula/document_pool_json.rb} +0 -0
  12. data/lib/opennebula/error.rb +52 -0
  13. data/lib/{OpenNebula/Group.rb → opennebula/group.rb} +1 -1
  14. data/lib/{OpenNebula/GroupPool.rb → opennebula/group_pool.rb} +1 -1
  15. data/lib/{OpenNebula/Host.rb → opennebula/host.rb} +1 -1
  16. data/lib/{OpenNebula/HostPool.rb → opennebula/host_pool.rb} +1 -1
  17. data/lib/{OpenNebula/Image.rb → opennebula/image.rb} +20 -6
  18. data/lib/{OpenNebula/ImagePool.rb → opennebula/image_pool.rb} +1 -1
  19. data/lib/opennebula/ldap_auth.rb +99 -0
  20. data/lib/opennebula/ldap_auth_spec.rb +70 -0
  21. data/lib/opennebula/pool.rb +157 -0
  22. data/lib/{OpenNebula/Pool.rb → opennebula/pool_element.rb} +1 -138
  23. data/lib/opennebula/server_cipher_auth.rb +148 -0
  24. data/lib/opennebula/server_x509_auth.rb +104 -0
  25. data/lib/opennebula/ssh_auth.rb +139 -0
  26. data/lib/opennebula/system.rb +141 -0
  27. data/lib/{OpenNebula/Template.rb → opennebula/template.rb} +13 -2
  28. data/lib/{OpenNebula/TemplatePool.rb → opennebula/template_pool.rb} +1 -1
  29. data/lib/{OpenNebula/User.rb → opennebula/user.rb} +1 -1
  30. data/lib/{OpenNebula/UserPool.rb → opennebula/user_pool.rb} +1 -1
  31. data/lib/{OpenNebula/VirtualMachine.rb → opennebula/virtual_machine.rb} +45 -25
  32. data/lib/{OpenNebula/VirtualMachinePool.rb → opennebula/virtual_machine_pool.rb} +1 -1
  33. data/lib/{OpenNebula/VirtualNetwork.rb → opennebula/virtual_network.rb} +13 -2
  34. data/lib/{OpenNebula/VirtualNetworkPool.rb → opennebula/virtual_network_pool.rb} +1 -1
  35. data/lib/opennebula/x509_auth.rb +241 -0
  36. data/lib/{OpenNebula/XMLUtils.rb → opennebula/xml_element.rb} +12 -21
  37. data/lib/opennebula/xml_pool.rb +45 -0
  38. data/lib/opennebula/xml_utils.rb +34 -0
  39. data/lib/opennebula.rb +58 -0
  40. metadata +102 -63
File without changes
@@ -15,7 +15,7 @@
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
17
 
18
- require 'OpenNebula/Pool'
18
+ require 'opennebula/pool'
19
19
 
20
20
  module OpenNebula
21
21
  class AclPool < Pool
@@ -14,81 +14,9 @@
14
14
  # limitations under the License. #
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
-
18
- begin # require 'rubygems'
19
- require 'rubygems'
20
- rescue Exception
21
- end
22
-
23
17
  require 'xmlrpc/client'
24
- require 'digest/sha1'
25
- require 'rexml/document'
26
- require 'pp'
27
-
28
- require 'OpenNebula/XMLUtils'
29
- require 'OpenNebula/VirtualMachine'
30
- require 'OpenNebula/VirtualMachinePool'
31
- require 'OpenNebula/VirtualNetwork'
32
- require 'OpenNebula/VirtualNetworkPool'
33
- require 'OpenNebula/Image'
34
- require 'OpenNebula/ImagePool'
35
- require 'OpenNebula/User'
36
- require 'OpenNebula/UserPool'
37
- require 'OpenNebula/Host'
38
- require 'OpenNebula/HostPool'
39
- require 'OpenNebula/Template'
40
- require 'OpenNebula/TemplatePool'
41
- require 'OpenNebula/Group'
42
- require 'OpenNebula/GroupPool'
43
- require 'OpenNebula/Acl'
44
- require 'OpenNebula/AclPool'
45
- require 'OpenNebula/Datastore'
46
- require 'OpenNebula/DatastorePool'
47
- require 'OpenNebula/Cluster'
48
- require 'OpenNebula/ClusterPool'
49
- require 'OpenNebula/Document'
50
- require 'OpenNebula/DocumentPool'
51
18
 
52
19
  module OpenNebula
53
-
54
- # OpenNebula version
55
- VERSION = '3.8.0'
56
-
57
- # The Error Class represents a generic error in the OpenNebula
58
- # library. It contains a readable representation of the error.
59
- # Any function in the OpenNebula module will return an Error
60
- # object in case of error.
61
- class Error
62
- ESUCCESS = 0x0000
63
- EAUTHENTICATION = 0x0100
64
- EAUTHORIZATION = 0x0200
65
- ENO_EXISTS = 0x0400
66
- EACTION = 0x0800
67
- EXML_RPC_API = 0x1000
68
- EINTERNAL = 0x2000
69
- ENOTDEFINED = 0x1111
70
-
71
- attr_reader :message, :errno
72
-
73
- # +message+ Description of the error
74
- # +errno+ OpenNebula code error
75
- def initialize(message=nil, errno=0x1111)
76
- @message = message
77
- @errno = errno
78
- end
79
-
80
- def to_str()
81
- @message
82
- end
83
- end
84
-
85
- # Returns true if the object returned by a method of the OpenNebula
86
- # library is an Error
87
- def self.is_error?(value)
88
- value.class==OpenNebula::Error
89
- end
90
-
91
-
92
20
  if OpenNebula::NOKOGIRI
93
21
  class NokogiriStreamParser < XMLRPC::XMLParser::AbstractStreamParser
94
22
  def initialize
@@ -111,7 +39,6 @@ module OpenNebula
111
39
  end
112
40
  end
113
41
 
114
-
115
42
  # The client class, represents the connection with the core and handles the
116
43
  # xml-rpc calls.
117
44
  class Client
@@ -15,7 +15,7 @@
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
17
 
18
- require 'OpenNebula/Pool'
18
+ require 'opennebula/pool_element'
19
19
 
20
20
  module OpenNebula
21
21
  class Cluster < PoolElement
@@ -15,7 +15,7 @@
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
17
 
18
- require 'OpenNebula/Pool'
18
+ require 'opennebula/pool'
19
19
 
20
20
  module OpenNebula
21
21
  class ClusterPool < Pool
@@ -15,7 +15,7 @@
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
17
 
18
- require 'OpenNebula/Pool'
18
+ require 'opennebula/pool_element'
19
19
 
20
20
  module OpenNebula
21
21
  class Datastore < PoolElement
@@ -32,6 +32,14 @@ module OpenNebula
32
32
  :chmod => "datastore.chmod"
33
33
  }
34
34
 
35
+ DATASTORE_TYPES=%w{IMAGE SYSTEM FILE}
36
+
37
+ SHORT_DATASTORE_TYPES = {
38
+ "IMAGE" => "img",
39
+ "SYSTEM"=> "sys",
40
+ "FILE" => "fil"
41
+ }
42
+
35
43
  # Creates a Datastore description with just its identifier
36
44
  # this method should be used to create plain Datastore objects.
37
45
  # +id+ the id of the user
@@ -57,6 +65,20 @@ module OpenNebula
57
65
  #######################################################################
58
66
  # XML-RPC Methods for the Datastore Object
59
67
  #######################################################################
68
+ # Returns the datastore type
69
+ def type
70
+ self['TYPE'].to_i
71
+ end
72
+
73
+ # Returns the datastore type (string value)
74
+ def type_str
75
+ DATASTORE_TYPES[type]
76
+ end
77
+
78
+ # Returns the datastore type (string value)
79
+ def short_type_str
80
+ SHORT_DATASTORE_TYPES[type_str]
81
+ end
60
82
 
61
83
  # Retrieves the information of the given Datastore.
62
84
  def info()
@@ -15,7 +15,7 @@
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
17
 
18
- require 'OpenNebula/Pool'
18
+ require 'opennebula/pool'
19
19
 
20
20
  module OpenNebula
21
21
  class DatastorePool < Pool
@@ -14,14 +14,14 @@
14
14
  # limitations under the License. #
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
- require 'OpenNebula/Pool'
17
+ require 'opennebula/pool_element'
18
18
 
19
19
  module OpenNebula
20
20
 
21
21
  # All subclasses must define the DOCUMENT_TYPE constant.
22
22
  #
23
23
  # @example
24
- # require 'OpenNebula/Document'
24
+ # require 'opennebula/document'
25
25
  #
26
26
  # module OpenNebula
27
27
  # class CustomObject < Document
@@ -44,6 +44,7 @@ module OpenNebula
44
44
  :chown => "document.chown",
45
45
  :chmod => "document.chmod",
46
46
  :clone => "document.clone",
47
+ :rename => "document.rename"
47
48
  }
48
49
 
49
50
  # Creates a Document Object description with just its identifier
@@ -185,6 +186,16 @@ module OpenNebula
185
186
  return rc
186
187
  end
187
188
 
189
+ # Renames this Document
190
+ #
191
+ # @param name [String] New name for the Document.
192
+ #
193
+ # @return [nil, OpenNebula::Error] nil in case of success, Error
194
+ # otherwise
195
+ def rename(name)
196
+ return call(DOCUMENT_METHODS[:rename], @pe_id, name)
197
+ end
198
+
188
199
  #######################################################################
189
200
  # Helpers to get Document information
190
201
  #######################################################################
@@ -14,7 +14,7 @@
14
14
  # limitations under the License. #
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
- require 'OpenNebula/Pool'
17
+ require 'opennebula/pool'
18
18
 
19
19
  module OpenNebula
20
20
 
@@ -22,7 +22,7 @@ module OpenNebula
22
22
  # and the factory method.
23
23
  #
24
24
  # @example
25
- # require 'OpenNebula/DocumentPool'
25
+ # require 'opennebuña/document_pool'
26
26
  #
27
27
  # module OpenNebula
28
28
  # class CustomObjectPool < DocumentPool
@@ -0,0 +1,52 @@
1
+ # -------------------------------------------------------------------------- #
2
+ # Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
3
+ # #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
+ # not use this file except in compliance with the License. You may obtain #
6
+ # a copy of the License at #
7
+ # #
8
+ # http://www.apache.org/licenses/LICENSE-2.0 #
9
+ # #
10
+ # Unless required by applicable law or agreed to in writing, software #
11
+ # distributed under the License is distributed on an "AS IS" BASIS, #
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
13
+ # See the License for the specific language governing permissions and #
14
+ # limitations under the License. #
15
+ #--------------------------------------------------------------------------- #
16
+
17
+
18
+ module OpenNebula
19
+ # The Error Class represents a generic error in the OpenNebula
20
+ # library. It contains a readable representation of the error.
21
+ # Any function in the OpenNebula module will return an Error
22
+ # object in case of error.
23
+ class Error
24
+ ESUCCESS = 0x0000
25
+ EAUTHENTICATION = 0x0100
26
+ EAUTHORIZATION = 0x0200
27
+ ENO_EXISTS = 0x0400
28
+ EACTION = 0x0800
29
+ EXML_RPC_API = 0x1000
30
+ EINTERNAL = 0x2000
31
+ ENOTDEFINED = 0x1111
32
+
33
+ attr_reader :message, :errno
34
+
35
+ # +message+ Description of the error
36
+ # +errno+ OpenNebula code error
37
+ def initialize(message=nil, errno=0x1111)
38
+ @message = message
39
+ @errno = errno
40
+ end
41
+
42
+ def to_str()
43
+ @message
44
+ end
45
+ end
46
+
47
+ # Returns true if the object returned by a method of the OpenNebula
48
+ # library is an Error
49
+ def self.is_error?(value)
50
+ value.class==OpenNebula::Error
51
+ end
52
+ end
@@ -15,7 +15,7 @@
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
17
 
18
- require 'OpenNebula/Pool'
18
+ require 'opennebula/pool_element'
19
19
 
20
20
  module OpenNebula
21
21
  class Group < PoolElement
@@ -15,7 +15,7 @@
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
17
 
18
- require 'OpenNebula/Pool'
18
+ require 'opennebula/pool'
19
19
 
20
20
  module OpenNebula
21
21
  class GroupPool < Pool
@@ -15,7 +15,7 @@
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
17
 
18
- require 'OpenNebula/Pool'
18
+ require 'opennebula/pool_element'
19
19
 
20
20
  module OpenNebula
21
21
  class Host < PoolElement
@@ -15,7 +15,7 @@
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
17
 
18
- require 'OpenNebula/Pool'
18
+ require 'opennebula/pool'
19
19
 
20
20
  module OpenNebula
21
21
  class HostPool < Pool
@@ -15,7 +15,7 @@
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
17
 
18
- require 'OpenNebula/Pool'
18
+ require 'opennebula/pool_element'
19
19
  require 'fileutils'
20
20
 
21
21
  module OpenNebula
@@ -35,7 +35,8 @@ module OpenNebula
35
35
  :chown => "image.chown",
36
36
  :chmod => "image.chmod",
37
37
  :chtype => "image.chtype",
38
- :clone => "image.clone"
38
+ :clone => "image.clone",
39
+ :rename => "image.rename"
39
40
  }
40
41
 
41
42
  IMAGE_STATES=%w{INIT READY USED DISABLED LOCKED ERROR CLONE DELETE USED_PERS}
@@ -52,12 +53,15 @@ module OpenNebula
52
53
  "USED_PERS" => "used"
53
54
  }
54
55
 
55
- IMAGE_TYPES=%w{OS CDROM DATABLOCK}
56
+ IMAGE_TYPES=%w{OS CDROM DATABLOCK KERNEL RAMDISK CONTEXT}
56
57
 
57
58
  SHORT_IMAGE_TYPES={
58
- "OS" => "OS",
59
- "CDROM" => "CD",
60
- "DATABLOCK" => "DB"
59
+ "OS" => "OS",
60
+ "CDROM" => "CD",
61
+ "DATABLOCK" => "DB",
62
+ "KERNEL" => "KL",
63
+ "RAMDISK" => "RD",
64
+ "CONTEXT" => "CX"
61
65
  }
62
66
 
63
67
  # Creates an Image description with just its identifier
@@ -202,6 +206,16 @@ module OpenNebula
202
206
  return rc
203
207
  end
204
208
 
209
+ # Renames this Image
210
+ #
211
+ # @param name [String] New name for the Image.
212
+ #
213
+ # @return [nil, OpenNebula::Error] nil in case of success, Error
214
+ # otherwise
215
+ def rename(name)
216
+ return call(IMAGE_METHODS[:rename], @pe_id, name)
217
+ end
218
+
205
219
  #######################################################################
206
220
  # Helpers to get Image information
207
221
  #######################################################################
@@ -15,7 +15,7 @@
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
17
 
18
- require 'OpenNebula/Pool'
18
+ require 'opennebula/pool'
19
19
 
20
20
  module OpenNebula
21
21
  class ImagePool < Pool
@@ -0,0 +1,99 @@
1
+ # ---------------------------------------------------------------------------- #
2
+ # Copyright 2010-2012, C12G Labs S.L #
3
+ # #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
+ # not use this file except in compliance with the License. You may obtain #
6
+ # a copy of the License at #
7
+ # #
8
+ # http://www.apache.org/licenses/LICENSE-2.0 #
9
+ # #
10
+ # Unless required by applicable law or agreed to in writing, software #
11
+ # distributed under the License is distributed on an "AS IS" BASIS, #
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
13
+ # See the License for the specific language governing permissions and #
14
+ # limitations under the License. #
15
+ # ---------------------------------------------------------------------------- #
16
+
17
+ require 'rubygems'
18
+ require 'net/ldap'
19
+
20
+ module OpenNebula; end
21
+
22
+ class OpenNebula::LdapAuth
23
+ def initialize(options)
24
+ @options={
25
+ :host => 'localhost',
26
+ :port => 389,
27
+ :user => nil,
28
+ :password => nil,
29
+ :base => nil,
30
+ :auth_method => :simple,
31
+ :user_field => 'cn'
32
+ }.merge(options)
33
+
34
+ ops={}
35
+
36
+ if @options[:user]
37
+ ops[:auth] = {
38
+ :method => @options[:auth_method],
39
+ :username => @options[:user],
40
+ :password => @options[:password]
41
+ }
42
+ end
43
+
44
+ ops[:host]=@options[:host] if @options[:host]
45
+ ops[:port]=@options[:port].to_i if @options[:port]
46
+ ops[:encryption]=@options[:encryption] if @options[:encryption]
47
+
48
+ @ldap=Net::LDAP.new(ops)
49
+ end
50
+
51
+ def find_user(name)
52
+ begin
53
+ result=@ldap.search(
54
+ :base => @options[:base],
55
+ :filter => "#{@options[:user_field]}=#{name}")
56
+
57
+ if result && result.first
58
+ result.first.dn
59
+ else
60
+ result=@ldap.search(:base => name)
61
+
62
+ if result && result.first
63
+ name
64
+ else
65
+ nil
66
+ end
67
+ end
68
+ rescue
69
+ nil
70
+ end
71
+ end
72
+
73
+ def is_in_group?(user, group)
74
+ result=@ldap.search(:base => group, :filter => "(member=#{user})")
75
+
76
+ if result && result.first
77
+ true
78
+ else
79
+ false
80
+ end
81
+ end
82
+
83
+ def authenticate(user, password)
84
+ ldap=@ldap.clone
85
+
86
+ auth={
87
+ :method => @options[:auth_method],
88
+ :username => user,
89
+ :password => password
90
+ }
91
+
92
+ if ldap.bind(auth)
93
+ true
94
+ else
95
+ false
96
+ end
97
+ end
98
+ end
99
+
@@ -0,0 +1,70 @@
1
+ # ---------------------------------------------------------------------------- #
2
+ # Copyright 2010-2012, C12G Labs S.L #
3
+ # #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
+ # not use this file except in compliance with the License. You may obtain #
6
+ # a copy of the License at #
7
+ # #
8
+ # http://www.apache.org/licenses/LICENSE-2.0 #
9
+ # #
10
+ # Unless required by applicable law or agreed to in writing, software #
11
+ # distributed under the License is distributed on an "AS IS" BASIS, #
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
13
+ # See the License for the specific language governing permissions and #
14
+ # limitations under the License. #
15
+ # ---------------------------------------------------------------------------- #
16
+
17
+ $: << ".."
18
+
19
+ require 'ldap_auth'
20
+
21
+ options={
22
+ :host => 'ubuntu-test',
23
+ :base => 'dc=localdomain'
24
+ }
25
+
26
+ describe LdapAuth do
27
+ before(:all) do
28
+ @ldap=LdapAuth.new(options)
29
+ end
30
+
31
+ it 'should find user dn' do
32
+ name=@ldap.find_user('user01')
33
+ name.should=='cn=user01,dc=localdomain'
34
+
35
+ name=@ldap.find_user('user02')
36
+ name.should=='cn=user02,dc=localdomain'
37
+
38
+ name=@ldap.find_user('user03')
39
+ name.should==nil
40
+
41
+ name=@ldap.find_user('cn=user01,dc=localdomain')
42
+ name.should=='cn=user01,dc=localdomain'
43
+ end
44
+
45
+ it 'should tell if a user is in a group' do
46
+ group='cn=cloud,ou=groups,dc=localdomain'
47
+
48
+ result=@ldap.is_in_group?('cn=user01,dc=localdomain', group)
49
+ result.should==true
50
+
51
+ result=@ldap.is_in_group?('cn=user02,dc=localdomain', group)
52
+ result.should==false
53
+ end
54
+
55
+ it 'should authenticate user' do
56
+ result=@ldap.authenticate('cn=user01,dc=localdomain', 'password01')
57
+ result.should==true
58
+
59
+ result=@ldap.authenticate('cn=user02,dc=localdomain', 'password02')
60
+ result.should==true
61
+
62
+ result=@ldap.authenticate('cn=user01,dc=localdomain', 'password02')
63
+ result.should==false
64
+
65
+ result=@ldap.authenticate('user01,dc=localdomain', 'password01')
66
+ result.should==false
67
+ end
68
+
69
+ end
70
+