oca 3.0.1 → 3.2.1

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.
@@ -1,5 +1,5 @@
1
1
  # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2011, OpenNebula Project Leads (OpenNebula.org) #
2
+ # Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
3
3
  # #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
5
  # not use this file except in compliance with the License. You may obtain #
@@ -14,6 +14,7 @@
14
14
  # limitations under the License. #
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
+
17
18
  begin # require 'rubygems'
18
19
  require 'rubygems'
19
20
  rescue Exception
@@ -44,18 +45,27 @@ require 'OpenNebula/AclPool'
44
45
 
45
46
  module OpenNebula
46
47
 
47
- # -------------------------------------------------------------------------
48
48
  # The Error Class represents a generic error in the OpenNebula
49
49
  # library. It contains a readable representation of the error.
50
50
  # Any function in the OpenNebula module will return an Error
51
51
  # object in case of error.
52
- # -------------------------------------------------------------------------
53
52
  class Error
54
- attr_reader :message
55
-
56
- # +message+ a description of the error
57
- def initialize(message=nil)
58
- @message=message
53
+ ESUCCESS = 0x0000
54
+ EAUTHENTICATION = 0x0100
55
+ EAUTHORIZATION = 0x0200
56
+ ENO_EXISTS = 0x0400
57
+ EACTION = 0x0800
58
+ EXML_RPC_API = 0x1000
59
+ EINTERNAL = 0x2000
60
+ ENOTDEFINED = 0x1111
61
+
62
+ attr_reader :message, :errno
63
+
64
+ # +message+ Description of the error
65
+ # +errno+ OpenNebula code error
66
+ def initialize(message=nil, errno=0x1111)
67
+ @message = message
68
+ @errno = errno
59
69
  end
60
70
 
61
71
  def to_str()
@@ -63,18 +73,14 @@ module OpenNebula
63
73
  end
64
74
  end
65
75
 
66
- # -------------------------------------------------------------------------
67
76
  # Returns true if the object returned by a method of the OpenNebula
68
77
  # library is an Error
69
- # -------------------------------------------------------------------------
70
78
  def self.is_error?(value)
71
79
  value.class==OpenNebula::Error
72
80
  end
73
81
 
74
- # -------------------------------------------------------------------------
75
82
  # The client class, represents the connection with the core and handles the
76
83
  # xml-rpc calls.
77
- # -------------------------------------------------------------------------
78
84
  class Client
79
85
  attr_accessor :one_auth
80
86
 
@@ -85,41 +91,28 @@ module OpenNebula
85
91
  XMLPARSER=false
86
92
  end
87
93
 
88
- def initialize(secret=nil, endpoint=nil, hash=true)
94
+ def initialize(secret=nil, endpoint=nil)
89
95
  if secret
90
- one_secret = secret
96
+ @one_auth = secret
91
97
  elsif ENV["ONE_AUTH"] and !ENV["ONE_AUTH"].empty? and File.file?(ENV["ONE_AUTH"])
92
- one_secret=File.read(ENV["ONE_AUTH"])
98
+ @one_auth = File.read(ENV["ONE_AUTH"])
93
99
  elsif File.file?(ENV["HOME"]+"/.one/one_auth")
94
- one_secret=File.read(ENV["HOME"]+"/.one/one_auth")
100
+ @one_auth = File.read(ENV["HOME"]+"/.one/one_auth")
95
101
  else
96
102
  raise "ONE_AUTH file not present"
97
103
  end
98
104
 
99
- tokens = one_secret.chomp.split(':')
100
-
101
- if tokens.length > 2
102
- @one_auth = one_secret
103
- elsif tokens.length == 2
104
- if hash
105
- pass = Digest::SHA1.hexdigest(tokens[1])
106
- else
107
- pass = tokens[1]
108
- end
109
- @one_auth = "#{tokens[0]}:#{pass}"
110
- else
111
- raise "Authorization file malformed"
112
- end
105
+ @one_auth.rstrip!
113
106
 
114
107
  if endpoint
115
- @one_endpoint=endpoint
108
+ @one_endpoint = endpoint
116
109
  elsif ENV["ONE_XMLRPC"]
117
- @one_endpoint=ENV["ONE_XMLRPC"]
110
+ @one_endpoint = ENV["ONE_XMLRPC"]
118
111
  else
119
- @one_endpoint="http://localhost:2633/RPC2"
112
+ @one_endpoint = "http://localhost:2633/RPC2"
120
113
  end
121
114
 
122
- @server=XMLRPC::Client.new2(@one_endpoint)
115
+ @server = XMLRPC::Client.new2(@one_endpoint)
123
116
  end
124
117
 
125
118
  def call(action, *args)
@@ -132,7 +125,7 @@ module OpenNebula
132
125
  response = @server.call_async("one."+action, @one_auth, *args)
133
126
 
134
127
  if response[0] == false
135
- Error.new(response[1])
128
+ Error.new(response[1], response[2])
136
129
  else
137
130
  response[1] #response[1..-1]
138
131
  end
@@ -1,5 +1,5 @@
1
1
  # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2011, OpenNebula Project Leads (OpenNebula.org) #
2
+ # Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
3
3
  # #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
5
  # not use this file except in compliance with the License. You may obtain #
@@ -14,7 +14,9 @@
14
14
  # limitations under the License. #
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
+
17
18
  module OpenNebula
19
+
18
20
  # Abstract rules of the type USER RESOURCE RIGHTS
19
21
  # which are:
20
22
  # USER -> #<num>
@@ -30,16 +32,10 @@ module OpenNebula
30
32
  # GROUP
31
33
  # ACL
32
34
  # RIGHTS -> + separated list
33
- # CREATE
34
- # DELETE
35
35
  # USE
36
36
  # MANAGE
37
- # INFO
38
- # INFO_POOL
39
- # INFO_POOL_MINE
40
- # INSTANTIATE
41
- # CHOWN
42
- # DEPLOY
37
+ # ADMIN
38
+ # CREATE
43
39
  class Acl < PoolElement
44
40
 
45
41
  USERS = {
@@ -61,16 +57,10 @@ module OpenNebula
61
57
 
62
58
  RIGHTS =
63
59
  {
64
- "CREATE" => 0x1, # Auth. to create an object
65
- "DELETE" => 0x2, # Auth. to delete an object
66
- "USE" => 0x4, # Auth. to use an object
67
- "MANAGE" => 0x8, # Auth. to manage an object
68
- "INFO" => 0x10, # Auth. to view an object
69
- "INFO_POOL" => 0x20, # Auth. to view any object in the pool
70
- "INFO_POOL_MINE"=> 0x40, # Auth. to view user and/or group objects
71
- "INSTANTIATE" => 0x80, # Auth. to instantiate a VM from a TEMPLATE
72
- "CHOWN" => 0x100,# Auth. to change ownership of an object
73
- "DEPLOY" => 0x200 # Auth. to deploy a VM in a Host
60
+ "USE" => 0x1, # Auth. to use an object
61
+ "MANAGE" => 0x2, # Auth. to perform management actions
62
+ "ADMIN" => 0x4, # Auth. to perform administrative actions
63
+ "CREATE" => 0x8 # Auth. to create an object
74
64
  }
75
65
 
76
66
  # Constructor
@@ -1,5 +1,5 @@
1
1
  # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2011, OpenNebula Project Leads (OpenNebula.org) #
2
+ # Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
3
3
  # #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
5
  # not use this file except in compliance with the License. You may obtain #
@@ -14,6 +14,7 @@
14
14
  # limitations under the License. #
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
+
17
18
  require 'OpenNebula/Pool'
18
19
 
19
20
  module OpenNebula
@@ -22,15 +23,15 @@ module OpenNebula
22
23
  #######################################################################
23
24
  # Constants and Class Methods
24
25
  #######################################################################
26
+
27
+
25
28
  ACL_POOL_METHODS = {
26
29
  :info => "acl.info",
27
30
  :addrule => "acl.addrule",
28
31
  :delrule => "acl.delrule"
29
32
  }
30
33
 
31
- #######################################################################
32
34
  # Class constructor
33
- #######################################################################
34
35
  def initialize(client)
35
36
  super('ACL_POOL','ACL',client)
36
37
  end
@@ -1,5 +1,5 @@
1
1
  # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2011, OpenNebula Project Leads (OpenNebula.org) #
2
+ # Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
3
3
  # #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
5
  # not use this file except in compliance with the License. You may obtain #
@@ -14,13 +14,16 @@
14
14
  # limitations under the License. #
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
+
17
18
  require 'OpenNebula/Pool'
18
19
 
19
20
  module OpenNebula
20
21
  class Group < PoolElement
21
- # ---------------------------------------------------------------------
22
+ #######################################################################
22
23
  # Constants and Class Methods
23
- # ---------------------------------------------------------------------
24
+ #######################################################################
25
+
26
+
24
27
  GROUP_METHODS = {
25
28
  :info => "group.info",
26
29
  :allocate => "group.allocate",
@@ -54,18 +57,14 @@ module OpenNebula
54
57
  XMLElement.build_xml(group_xml,'GROUP')
55
58
  end
56
59
 
57
- # ---------------------------------------------------------------------
58
60
  # Class constructor
59
- # ---------------------------------------------------------------------
60
61
  def initialize(xml, client)
61
62
  super(xml,client)
62
-
63
- @client = client
64
63
  end
65
-
66
- # --------------------------------------------------------------------
64
+
65
+ #######################################################################
67
66
  # Group utils
68
- # --------------------------------------------------------------------
67
+ #######################################################################
69
68
 
70
69
  # Creates ACLs for the group. The ACL rules are described in a file
71
70
  def create_acls(filename = GROUP_DEFAULT)
@@ -74,7 +73,7 @@ module OpenNebula
74
73
  end
75
74
 
76
75
  msg = String.new
77
-
76
+
78
77
  File.open(filename).each_line{ |l|
79
78
  next if l.match(/^#/)
80
79
 
@@ -100,9 +99,9 @@ module OpenNebula
100
99
  return 0, msg
101
100
  end
102
101
 
103
- # ---------------------------------------------------------------------
102
+ #######################################################################
104
103
  # XML-RPC Methods for the Group Object
105
- # ---------------------------------------------------------------------
104
+ #######################################################################
106
105
 
107
106
  # Retrieves the information of the given Group.
108
107
  def info()
@@ -127,8 +126,8 @@ module OpenNebula
127
126
 
128
127
  # Returns whether or not the user with id 'uid' is part of this group
129
128
  def contains(uid)
130
- # This doesn't work in ruby 1.8.5
131
- # return self["USERS/ID[.=#{uid}]"] != nil
129
+ #This doesn't work in ruby 1.8.5
130
+ #return self["USERS/ID[.=#{uid}]"] != nil
132
131
 
133
132
  id_array = retrieve_elements('USERS/ID')
134
133
  return id_array != nil && id_array.include?(uid.to_s)
@@ -1,5 +1,5 @@
1
1
  # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2011, OpenNebula Project Leads (OpenNebula.org) #
2
+ # Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
3
3
  # #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
5
  # not use this file except in compliance with the License. You may obtain #
@@ -14,21 +14,23 @@
14
14
  # limitations under the License. #
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
+
17
18
  require 'OpenNebula/Pool'
18
19
 
19
20
  module OpenNebula
20
21
  class GroupPool < Pool
21
- # ---------------------------------------------------------------------
22
+ #######################################################################
22
23
  # Constants and Class attribute accessors
23
- # ---------------------------------------------------------------------
24
+ #######################################################################
25
+
24
26
 
25
27
  GROUP_POOL_METHODS = {
26
28
  :info => "grouppool.info"
27
29
  }
28
30
 
29
- # ---------------------------------------------------------------------
31
+ #######################################################################
30
32
  # Class constructor & Pool Methods
31
- # ---------------------------------------------------------------------
33
+ #######################################################################
32
34
 
33
35
  # +client+ a Client object that represents a XML-RPC connection
34
36
  def initialize(client)
@@ -40,13 +42,13 @@ module OpenNebula
40
42
  OpenNebula::Group.new(element_xml,@client)
41
43
  end
42
44
 
43
- # ---------------------------------------------------------------------
45
+ #######################################################################
44
46
  # XML-RPC Methods for the User Object
45
- # ---------------------------------------------------------------------
47
+ #######################################################################
46
48
 
47
49
  # Retrieves all the Groups in the pool.
48
50
  def info()
49
51
  super(GROUP_POOL_METHODS[:info])
50
52
  end
51
53
  end
52
- end
54
+ end
@@ -1,5 +1,5 @@
1
1
  # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2011, OpenNebula Project Leads (OpenNebula.org) #
2
+ # Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
3
3
  # #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
5
  # not use this file except in compliance with the License. You may obtain #
@@ -14,6 +14,7 @@
14
14
  # limitations under the License. #
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
+
17
18
  require 'OpenNebula/Pool'
18
19
 
19
20
  module OpenNebula
@@ -21,6 +22,8 @@ module OpenNebula
21
22
  #######################################################################
22
23
  # Constants and Class Methods
23
24
  #######################################################################
25
+
26
+
24
27
  HOST_METHODS = {
25
28
  :info => "host.info",
26
29
  :allocate => "host.allocate",
@@ -56,9 +59,7 @@ module OpenNebula
56
59
  XMLElement.build_xml(host_xml, 'HOST')
57
60
  end
58
61
 
59
- #######################################################################
60
62
  # Class constructor
61
- #######################################################################
62
63
  def initialize(xml, client)
63
64
  super(xml,client)
64
65
 
@@ -77,15 +78,15 @@ module OpenNebula
77
78
 
78
79
  # Allocates a new Host in OpenNebula
79
80
  #
80
- # +hostname+ A string containing the name of the new Host.
81
- #
82
- # +im+ A string containing the name of the im_driver
83
- #
84
- # +vmm+ A string containing the name of the vmm_driver
81
+ # @param hostname [String] Name of the new Host.
82
+ # @param im [String] Name of the im_driver
83
+ # @param vmm [String] Name of the vmm_driver
84
+ # @param tm [String] Name of the tm_driver
85
85
  #
86
- # +tm+ A string containing the name of the tm_driver
87
- def allocate(hostname,im,vmm,tm)
88
- super(HOST_METHODS[:allocate],hostname,im,vmm,tm)
86
+ # @return [Integer, OpenNebula::Error] the new VM ID in case of
87
+ # success, error otherwise
88
+ def allocate(hostname,im,vmm,vnm,tm)
89
+ super(HOST_METHODS[:allocate],hostname,im,vmm,vnm,tm)
89
90
  end
90
91
 
91
92
  # Deletes the Host
@@ -1,5 +1,5 @@
1
1
  # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2011, OpenNebula Project Leads (OpenNebula.org) #
2
+ # Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
3
3
  # #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
5
  # not use this file except in compliance with the License. You may obtain #
@@ -14,6 +14,7 @@
14
14
  # limitations under the License. #
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
+
17
18
  require 'OpenNebula/Pool'
18
19
 
19
20
  module OpenNebula
@@ -22,6 +23,7 @@ module OpenNebula
22
23
  # Constants and Class attribute accessors
23
24
  #######################################################################
24
25
 
26
+
25
27
  HOST_POOL_METHODS = {
26
28
  :info => "hostpool.info"
27
29
  }
@@ -29,7 +31,8 @@ module OpenNebula
29
31
  #######################################################################
30
32
  # Class constructor & Pool Methods
31
33
  #######################################################################
32
-
34
+
35
+
33
36
  # +client+ a Client object that represents a XML-RPC connection
34
37
  def initialize(client)
35
38
  super('HOST_POOL','HOST',client)
@@ -1,5 +1,5 @@
1
1
  # -------------------------------------------------------------------------- #
2
- # Copyright 2002-2011, OpenNebula Project Leads (OpenNebula.org) #
2
+ # Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org) #
3
3
  # #
4
4
  # Licensed under the Apache License, Version 2.0 (the "License"); you may #
5
5
  # not use this file except in compliance with the License. You may obtain #
@@ -14,23 +14,27 @@
14
14
  # limitations under the License. #
15
15
  #--------------------------------------------------------------------------- #
16
16
 
17
+
17
18
  require 'OpenNebula/Pool'
18
19
  require 'fileutils'
19
20
 
20
21
  module OpenNebula
21
22
  class Image < PoolElement
22
- # ---------------------------------------------------------------------
23
+ #######################################################################
23
24
  # Constants and Class Methods
24
- # ---------------------------------------------------------------------
25
+ #######################################################################
26
+
27
+
25
28
  IMAGE_METHODS = {
26
29
  :info => "image.info",
27
30
  :allocate => "image.allocate",
28
31
  :update => "image.update",
29
32
  :enable => "image.enable",
30
- :publish => "image.publish",
31
33
  :persistent => "image.persistent",
32
34
  :delete => "image.delete",
33
- :chown => "image.chown"
35
+ :chown => "image.chown",
36
+ :chmod => "image.chmod",
37
+ :chtype => "image.chtype"
34
38
  }
35
39
 
36
40
  IMAGE_STATES=%w{INIT READY USED DISABLED LOCKED ERROR}
@@ -118,7 +122,7 @@ module OpenNebula
118
122
  def unpublish
119
123
  set_publish(false)
120
124
  end
121
-
125
+
122
126
  # Makes the Image persistent
123
127
  def persistent
124
128
  set_persistent(true)
@@ -142,6 +146,39 @@ module OpenNebula
142
146
  super(IMAGE_METHODS[:chown], uid, gid)
143
147
  end
144
148
 
149
+ # Changes the Image permissions.
150
+ #
151
+ # @param octet [String] Permissions octed , e.g. 640
152
+ # @return [nil, OpenNebula::Error] nil in case of success, Error
153
+ # otherwise
154
+ def chmod_octet(octet)
155
+ super(IMAGE_METHODS[:chmod], octet)
156
+ end
157
+
158
+ # Changes the Image permissions.
159
+ # Each [Integer] argument must be 1 to allow, 0 deny, -1 do not change
160
+ #
161
+ # @return [nil, OpenNebula::Error] nil in case of success, Error
162
+ # otherwise
163
+ def chmod(owner_u, owner_m, owner_a, group_u, group_m, group_a, other_u,
164
+ other_m, other_a)
165
+ super(IMAGE_METHODS[:chmod], owner_u, owner_m, owner_a, group_u,
166
+ group_m, group_a, other_u, other_m, other_a)
167
+ end
168
+
169
+ # Changes the Image type
170
+ # @param type [String] new Image type
171
+ # @return [nil, OpenNebula::Error] nil in case of success, Error
172
+ # otherwise
173
+ def chtype(type)
174
+ return Error.new('ID not defined') if !@pe_id
175
+
176
+ rc = @client.call(IMAGE_METHODS[:chtype], @pe_id, type)
177
+ rc = nil if !OpenNebula.is_error?(rc)
178
+
179
+ return rc
180
+ end
181
+
145
182
  #######################################################################
146
183
  # Helpers to get Image information
147
184
  #######################################################################
@@ -182,6 +219,14 @@ module OpenNebula
182
219
  self['GID'].to_i
183
220
  end
184
221
 
222
+ def public?
223
+ if self['PERMISSIONS/GROUP_U'] == "1" || self['PERMISSIONS/OTHER_U'] == "1"
224
+ true
225
+ else
226
+ false
227
+ end
228
+ end
229
+
185
230
  private
186
231
 
187
232
  def set_enabled(enabled)
@@ -194,12 +239,9 @@ module OpenNebula
194
239
  end
195
240
 
196
241
  def set_publish(published)
197
- return Error.new('ID not defined') if !@pe_id
242
+ group_u = published ? 1 : 0
198
243
 
199
- rc = @client.call(IMAGE_METHODS[:publish], @pe_id, published)
200
- rc = nil if !OpenNebula.is_error?(rc)
201
-
202
- return rc
244
+ chmod(-1, -1, -1, group_u, -1, -1, -1, -1, -1)
203
245
  end
204
246
 
205
247
  def set_persistent(persistence)