oca 3.0.1 → 3.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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)