~ubuntu-branches/debian/sid/opennebula/sid

« back to all changes in this revision

Viewing changes to src/oca/ruby/OpenNebula/Cluster.rb

  • Committer: Package Import Robot
  • Author(s): Damien Raude-Morvan
  • Date: 2012-05-11 19:27:43 UTC
  • mfrom: (1.1.6)
  • Revision ID: package-import@ubuntu.com-20120511192743-lnz8gog5uxzmx2f3
Tags: 3.4.1-1
* New upstream release:
  - d/patches/default_conf.diff: Drop, transfert manager is now handled
    on a datasatore basis.
  - d/patches/genisoimage.diff: Merged upstream.
  - d/patches/oneacct-system-wide-installation.patch: Merged upstream.
  - Refresh others patches.
  - Update *.install files.
* Improve OCCI Self-Service UI integration:
  - Install into /usr/share/opennebula/occi/.
  - occi_system_jquery.diff: Use system wide jquery/jqueryui.
  - Add Recommends: libjs-jquery, libjs-jquery-ui for opennebula package.
* Add Suggests: ruby-uuidtools for econe-server.
* Install more manpages from upstream

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
require 'OpenNebula/Pool'
 
19
 
 
20
module OpenNebula
 
21
    class Cluster < PoolElement
 
22
        #######################################################################
 
23
        # Constants and Class Methods
 
24
        #######################################################################
 
25
 
 
26
        CLUSTER_METHODS = {
 
27
            :info           => "cluster.info",
 
28
            :allocate       => "cluster.allocate",
 
29
            :delete         => "cluster.delete",
 
30
            :addhost        => "cluster.addhost",
 
31
            :delhost        => "cluster.delhost",
 
32
            :adddatastore   => "cluster.adddatastore",
 
33
            :deldatastore   => "cluster.deldatastore",
 
34
            :addvnet        => "cluster.addvnet",
 
35
            :delvnet        => "cluster.delvnet"
 
36
        }
 
37
 
 
38
        # Creates a Cluster description with just its identifier
 
39
        # this method should be used to create plain Cluster objects.
 
40
        # +id+ the id of the host
 
41
        #
 
42
        # Example:
 
43
        #   cluster = Cluster.new(Cluster.build_xml(3),rpc_client)
 
44
        #
 
45
        def Cluster.build_xml(pe_id=nil)
 
46
            if pe_id
 
47
                cluster_xml = "<CLUSTER><ID>#{pe_id}</ID></CLUSTER>"
 
48
            else
 
49
                cluster_xml = "<CLUSTER></CLUSTER>"
 
50
            end
 
51
 
 
52
            XMLElement.build_xml(cluster_xml,'CLUSTER')
 
53
        end
 
54
 
 
55
        # Class constructor
 
56
        def initialize(xml, client)
 
57
            super(xml,client)
 
58
        end
 
59
 
 
60
        #######################################################################
 
61
        # XML-RPC Methods for the Cluster Object
 
62
        #######################################################################
 
63
 
 
64
        # Retrieves the information of the given Cluster.
 
65
        def info()
 
66
            super(CLUSTER_METHODS[:info], 'CLUSTER')
 
67
        end
 
68
 
 
69
        # Allocates a new Cluster in OpenNebula
 
70
        #
 
71
        # +clustername+ A string containing the name of the Cluster.
 
72
        def allocate(clustername)
 
73
            super(CLUSTER_METHODS[:allocate], clustername)
 
74
        end
 
75
 
 
76
        # Deletes the Cluster
 
77
        def delete()
 
78
            super(CLUSTER_METHODS[:delete])
 
79
        end
 
80
 
 
81
        # Adds a Host to this Cluster
 
82
        # @param hid [Integer] Host ID
 
83
        # @return [nil, OpenNebula::Error] nil in case of success, Error
 
84
        #   otherwise
 
85
        def addhost(hid)
 
86
            return Error.new('ID not defined') if !@pe_id
 
87
 
 
88
            rc = @client.call(CLUSTER_METHODS[:addhost], @pe_id, hid)
 
89
            rc = nil if !OpenNebula.is_error?(rc)
 
90
 
 
91
            return rc
 
92
        end
 
93
 
 
94
        # Deletes a Host from this Cluster
 
95
        # @param hid [Integer] Host ID
 
96
        # @return [nil, OpenNebula::Error] nil in case of success, Error
 
97
        #   otherwise
 
98
        def delhost(hid)
 
99
            return Error.new('ID not defined') if !@pe_id
 
100
 
 
101
            rc = @client.call(CLUSTER_METHODS[:delhost], @pe_id, hid)
 
102
            rc = nil if !OpenNebula.is_error?(rc)
 
103
 
 
104
            return rc
 
105
        end
 
106
 
 
107
        # Adds a Datastore to this Cluster
 
108
        # @param ds_id [Integer] Datastore ID
 
109
        # @return [nil, OpenNebula::Error] nil in case of success, Error
 
110
        #   otherwise
 
111
        def adddatastore(ds_id)
 
112
            return Error.new('ID not defined') if !@pe_id
 
113
 
 
114
            rc = @client.call(CLUSTER_METHODS[:adddatastore], @pe_id, ds_id)
 
115
            rc = nil if !OpenNebula.is_error?(rc)
 
116
 
 
117
            return rc
 
118
        end
 
119
 
 
120
        # Deletes a Datastore from this Cluster
 
121
        # @param ds_id [Integer] Datastore ID
 
122
        # @return [nil, OpenNebula::Error] nil in case of success, Error
 
123
        #   otherwise
 
124
        def deldatastore(ds_id)
 
125
            return Error.new('ID not defined') if !@pe_id
 
126
 
 
127
            rc = @client.call(CLUSTER_METHODS[:deldatastore], @pe_id, ds_id)
 
128
            rc = nil if !OpenNebula.is_error?(rc)
 
129
 
 
130
            return rc
 
131
        end
 
132
 
 
133
        # Adds a VNet to this Cluster
 
134
        # @param vnet_id [Integer] VNet ID
 
135
        # @return [nil, OpenNebula::Error] nil in case of success, Error
 
136
        #   otherwise
 
137
        def addvnet(vnet_id)
 
138
            return Error.new('ID not defined') if !@pe_id
 
139
 
 
140
            rc = @client.call(CLUSTER_METHODS[:addvnet], @pe_id, vnet_id)
 
141
            rc = nil if !OpenNebula.is_error?(rc)
 
142
 
 
143
            return rc
 
144
        end
 
145
 
 
146
        # Deletes a VNet from this Cluster
 
147
        # @param vnet_id [Integer] VNet ID
 
148
        # @return [nil, OpenNebula::Error] nil in case of success, Error
 
149
        #   otherwise
 
150
        def delvnet(vnet_id)
 
151
            return Error.new('ID not defined') if !@pe_id
 
152
 
 
153
            rc = @client.call(CLUSTER_METHODS[:delvnet], @pe_id, vnet_id)
 
154
            rc = nil if !OpenNebula.is_error?(rc)
 
155
 
 
156
            return rc
 
157
        end
 
158
 
 
159
        # ---------------------------------------------------------------------
 
160
        # Helpers to get information
 
161
        # ---------------------------------------------------------------------
 
162
 
 
163
        # Returns whether or not the host with 'id' is part of this cluster
 
164
        # @param id [Integer|Array] host ID
 
165
        # @return [Boolean] true if found 
 
166
        def contains_host?(id)
 
167
            contains_resource?('HOSTS/ID', id)
 
168
        end
 
169
 
 
170
        # Returns an array with the numeric host ids
 
171
        # @return [Array<Integer>]
 
172
        def host_ids
 
173
            array = Array.new
 
174
 
 
175
            self.each("HOSTS/ID") do |id|
 
176
                array << id.text.to_i
 
177
            end
 
178
 
 
179
            return array
 
180
        end
 
181
 
 
182
        # Returns whether or not the datastore with 'id' is part of this cluster
 
183
        # @param id [Integer|Array] datastore ID
 
184
        # @return [Boolean] true if found 
 
185
        def contains_datastore?(id)
 
186
            contains_resource?('DATASTORES/ID', id)
 
187
        end
 
188
 
 
189
        # Returns an array with the numeric datastore ids
 
190
        # @return [Array<Integer>]
 
191
        def datastore_ids
 
192
            array = Array.new
 
193
 
 
194
            self.each("DATASTORES/ID") do |id|
 
195
                array << id.text.to_i
 
196
            end
 
197
 
 
198
            return array
 
199
        end
 
200
 
 
201
        # Returns whether or not the vnet with 'id' is part of this cluster
 
202
        # @param id [Integer|Arrray] vnet ID
 
203
        # @return [Boolean] true if found 
 
204
        def contains_vnet?(id)
 
205
            contains_resource?('VNETS/ID', id)
 
206
        end
 
207
 
 
208
        # Returns an array with the numeric vnet ids
 
209
        # @return [Array<Integer>]
 
210
        def vnet_ids
 
211
            array = Array.new
 
212
 
 
213
            self.each("VNETS/ID") do |id|
 
214
                array << id.text.to_i
 
215
            end
 
216
 
 
217
            return array
 
218
        end
 
219
 
 
220
        private
 
221
 
 
222
        def contains_resource?(xpath, id)
 
223
            id_array = retrieve_elements(xpath)
 
224
 
 
225
            return false if id_array.nil?
 
226
 
 
227
            id = [id] if id.class != Array
 
228
 
 
229
            id.each { |i| 
 
230
                return false if !id_array.include?(i.to_s)
 
231
            }
 
232
 
 
233
            return true
 
234
        end
 
235
    end
 
236
end