opennebula 5.2.1 → 5.3.80.beta1
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.
- checksums.yaml +4 -4
 - data/lib/VirtualMachineDriver.rb +7 -0
 - data/lib/cloud/CloudClient.rb +1 -1
 - data/lib/opennebula/acl.rb +8 -3
 - data/lib/opennebula/client.rb +1 -1
 - data/lib/opennebula/error.rb +10 -2
 - data/lib/opennebula/group.rb +37 -7
 - data/lib/opennebula/host.rb +15 -4
 - data/lib/opennebula/server_cipher_auth.rb +5 -3
 - data/lib/opennebula/system.rb +13 -1
 - data/lib/opennebula/virtual_machine.rb +31 -34
 - data/lib/opennebula/virtual_network.rb +32 -15
 - data/lib/opennebula/vm_group.rb +151 -0
 - data/lib/opennebula/vm_group_pool.rb +78 -0
 - data/lib/opennebula/xml_element.rb +18 -0
 - data/lib/opennebula/zone.rb +24 -1
 - data/lib/opennebula.rb +3 -1
 - data/lib/vcenter_driver.rb +35 -3111
 - metadata +7 -6
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 793beff44dc5a782c2aafcfc3049362b981f972b
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: ed04d3cf4814a0715471a99342cf04811ad86520
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: c892fa6c7a0f2012185c432eae4b7954ed3500f35962e4b5d453279db3c702f716d27fed588ae653cf383d7d8eede5dd4ecb55534bbc62d1c46033b75b452161
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: e751d6869d55f43512f28746bf0f4d98b8e0cdb67576263b5577a676013823286e020a05bd45109937198f4209f5fe6240812d9790009f52bd291c4b6a22e56e
         
     | 
    
        data/lib/VirtualMachineDriver.rb
    CHANGED
    
    | 
         @@ -50,6 +50,7 @@ class VirtualMachineDriver < OpenNebulaDriver 
     | 
|
| 
       50 
50 
     | 
    
         
             
                    :attach_nic  => "ATTACHNIC",
         
     | 
| 
       51 
51 
     | 
    
         
             
                    :detach_nic  => "DETACHNIC",
         
     | 
| 
       52 
52 
     | 
    
         
             
                    :disk_snapshot_create => "DISKSNAPSHOTCREATE",
         
     | 
| 
      
 53 
     | 
    
         
            +
                    :resize_disk => "RESIZEDISK",
         
     | 
| 
       53 
54 
     | 
    
         
             
                    :update_sg   => "UPDATESG"
         
     | 
| 
       54 
55 
     | 
    
         
             
                }
         
     | 
| 
       55 
56 
     | 
    
         | 
| 
         @@ -93,6 +94,7 @@ class VirtualMachineDriver < OpenNebulaDriver 
     | 
|
| 
       93 
94 
     | 
    
         
             
                    register_action(ACTION[:attach_nic].to_sym, method("attach_nic"))
         
     | 
| 
       94 
95 
     | 
    
         
             
                    register_action(ACTION[:detach_nic].to_sym, method("detach_nic"))
         
     | 
| 
       95 
96 
     | 
    
         
             
                    register_action(ACTION[:disk_snapshot_create].to_sym, method("disk_snapshot_create"))
         
     | 
| 
      
 97 
     | 
    
         
            +
                    register_action(ACTION[:resize_disk].to_sym, method("resize_disk"))
         
     | 
| 
       96 
98 
     | 
    
         
             
                    register_action(ACTION[:update_sg].to_sym, method("update_sg"))
         
     | 
| 
       97 
99 
     | 
    
         
             
                end
         
     | 
| 
       98 
100 
     | 
    
         | 
| 
         @@ -203,6 +205,11 @@ class VirtualMachineDriver < OpenNebulaDriver 
     | 
|
| 
       203 
205 
     | 
    
         
             
                    send_message(ACTION[:disk_snapshot_create],RESULT[:failure],id,error)
         
     | 
| 
       204 
206 
     | 
    
         
             
                end
         
     | 
| 
       205 
207 
     | 
    
         | 
| 
      
 208 
     | 
    
         
            +
                def resize_disk(id, drv_message)
         
     | 
| 
      
 209 
     | 
    
         
            +
                    error = "Action not implemented by driver #{self.class}"
         
     | 
| 
      
 210 
     | 
    
         
            +
                    send_message(ACTION[:resize_disk],RESULT[:failure],id,error)
         
     | 
| 
      
 211 
     | 
    
         
            +
                end
         
     | 
| 
      
 212 
     | 
    
         
            +
             
     | 
| 
       206 
213 
     | 
    
         
             
                def update_sg(id, drv_message)
         
     | 
| 
       207 
214 
     | 
    
         
             
                    error = "Action not implemented by driver #{self.class}"
         
     | 
| 
       208 
215 
     | 
    
         
             
                    send_message(ACTION[:update_sg],RESULT[:failure],id,error)
         
     | 
    
        data/lib/cloud/CloudClient.rb
    CHANGED
    
    
    
        data/lib/opennebula/acl.rb
    CHANGED
    
    | 
         @@ -23,19 +23,23 @@ module OpenNebula 
     | 
|
| 
       23 
23 
     | 
    
         
             
                #                  @<num>
         
     | 
| 
       24 
24 
     | 
    
         
             
                #                  ALL
         
     | 
| 
       25 
25 
     | 
    
         
             
                #     RESOURCE  -> + separated list and "/{#,@,%}<num>|ALL"
         
     | 
| 
       26 
     | 
    
         
            -
                #                  VM 
     | 
| 
      
 26 
     | 
    
         
            +
                #                  VM
         
     | 
| 
       27 
27 
     | 
    
         
             
                #                  HOST
         
     | 
| 
       28 
28 
     | 
    
         
             
                #                  NET
         
     | 
| 
       29 
29 
     | 
    
         
             
                #                  IMAGE
         
     | 
| 
       30 
30 
     | 
    
         
             
                #                  USER
         
     | 
| 
       31 
31 
     | 
    
         
             
                #                  TEMPLATE
         
     | 
| 
       32 
32 
     | 
    
         
             
                #                  GROUP
         
     | 
| 
       33 
     | 
    
         
            -
                #                   
     | 
| 
      
 33 
     | 
    
         
            +
                #                  DATASTORE
         
     | 
| 
      
 34 
     | 
    
         
            +
                #                  CLUSTER
         
     | 
| 
      
 35 
     | 
    
         
            +
                #                  DOCUMENT
         
     | 
| 
      
 36 
     | 
    
         
            +
                #                  ZONE
         
     | 
| 
       34 
37 
     | 
    
         
             
                #                  SECGROUP
         
     | 
| 
       35 
38 
     | 
    
         
             
                #                  VDC
         
     | 
| 
       36 
39 
     | 
    
         
             
                #                  VROUTER
         
     | 
| 
       37 
40 
     | 
    
         
             
                #                  MARKETPLACE
         
     | 
| 
       38 
41 
     | 
    
         
             
                #                  MARKETPLACEAPP
         
     | 
| 
      
 42 
     | 
    
         
            +
                #                  VMGROUP
         
     | 
| 
       39 
43 
     | 
    
         
             
                #     RIGHTS    -> + separated list
         
     | 
| 
       40 
44 
     | 
    
         
             
                #                  USE
         
     | 
| 
       41 
45 
     | 
    
         
             
                #                  MANAGE
         
     | 
| 
         @@ -67,7 +71,8 @@ module OpenNebula 
     | 
|
| 
       67 
71 
     | 
    
         
             
                        "VDC"           =>  0x2000000000000,
         
     | 
| 
       68 
72 
     | 
    
         
             
                        "VROUTER"       =>  0x4000000000000,
         
     | 
| 
       69 
73 
     | 
    
         
             
                        "MARKETPLACE"   =>  0x8000000000000,
         
     | 
| 
       70 
     | 
    
         
            -
                        "MARKETPLACEAPP"=> 0x10000000000000
         
     | 
| 
      
 74 
     | 
    
         
            +
                        "MARKETPLACEAPP"=> 0x10000000000000,
         
     | 
| 
      
 75 
     | 
    
         
            +
                        "VMGROUP"       => 0x20000000000000
         
     | 
| 
       71 
76 
     | 
    
         
             
                    }
         
     | 
| 
       72 
77 
     | 
    
         | 
| 
       73 
78 
     | 
    
         
             
                    RIGHTS =
         
     | 
    
        data/lib/opennebula/client.rb
    CHANGED
    
    
    
        data/lib/opennebula/error.rb
    CHANGED
    
    | 
         @@ -28,8 +28,10 @@ module OpenNebula 
     | 
|
| 
       28 
28 
     | 
    
         
             
                    EACTION         = 0x0800
         
     | 
| 
       29 
29 
     | 
    
         
             
                    EXML_RPC_API    = 0x1000
         
     | 
| 
       30 
30 
     | 
    
         
             
                    EINTERNAL       = 0x2000
         
     | 
| 
       31 
     | 
    
         
            -
                     
     | 
| 
       32 
     | 
    
         
            -
             
     | 
| 
      
 31 
     | 
    
         
            +
                    EALLOCATE       = 0x4000
         
     | 
| 
      
 32 
     | 
    
         
            +
                    ENOTDEFINED     = 0xF001
         
     | 
| 
      
 33 
     | 
    
         
            +
                    EXML_RPC_CALL   = 0xF002
         
     | 
| 
      
 34 
     | 
    
         
            +
                    
         
     | 
| 
       33 
35 
     | 
    
         
             
                    attr_reader :message, :errno
         
     | 
| 
       34 
36 
     | 
    
         | 
| 
       35 
37 
     | 
    
         
             
                    # +message+ Description of the error
         
     | 
| 
         @@ -42,6 +44,11 @@ module OpenNebula 
     | 
|
| 
       42 
44 
     | 
    
         
             
                    def to_str()
         
     | 
| 
       43 
45 
     | 
    
         
             
                        @message
         
     | 
| 
       44 
46 
     | 
    
         
             
                    end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                    def is_exml_rpc_call?()
         
     | 
| 
      
 49 
     | 
    
         
            +
                        @errno == EXML_RPC_CALL
         
     | 
| 
      
 50 
     | 
    
         
            +
                    end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
       45 
52 
     | 
    
         
             
                end
         
     | 
| 
       46 
53 
     | 
    
         | 
| 
       47 
54 
     | 
    
         
             
                # Returns true if the object returned by a method of the OpenNebula
         
     | 
| 
         @@ -49,4 +56,5 @@ module OpenNebula 
     | 
|
| 
       49 
56 
     | 
    
         
             
                def self.is_error?(value)
         
     | 
| 
       50 
57 
     | 
    
         
             
                    value.class==OpenNebula::Error
         
     | 
| 
       51 
58 
     | 
    
         
             
                end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
       52 
60 
     | 
    
         
             
            end
         
     | 
    
        data/lib/opennebula/group.rb
    CHANGED
    
    | 
         @@ -37,7 +37,7 @@ module OpenNebula 
     | 
|
| 
       37 
37 
     | 
    
         
             
                    SELF = -1
         
     | 
| 
       38 
38 
     | 
    
         | 
| 
       39 
39 
     | 
    
         
             
                    # Default resource ACL's for group users (create)
         
     | 
| 
       40 
     | 
    
         
            -
                    GROUP_DEFAULT_ACLS = "VM+IMAGE+TEMPLATE+DOCUMENT+SECGROUP+VROUTER"
         
     | 
| 
      
 40 
     | 
    
         
            +
                    GROUP_DEFAULT_ACLS = "VM+IMAGE+TEMPLATE+DOCUMENT+SECGROUP+VROUTER+VMGROUP"
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
                    # The default view for group and group admins, must be defined in
         
     | 
| 
       43 
43 
     | 
    
         
             
                    # sunstone_views.yaml
         
     | 
| 
         @@ -104,14 +104,14 @@ module OpenNebula 
     | 
|
| 
       104 
104 
     | 
    
         
             
                        end
         
     | 
| 
       105 
105 
     | 
    
         | 
| 
       106 
106 
     | 
    
         
             
                        # Allocate group
         
     | 
| 
       107 
     | 
    
         
            -
                        rc =  
     | 
| 
      
 107 
     | 
    
         
            +
                        rc = allocate(group_hash[:name])
         
     | 
| 
       108 
108 
     | 
    
         
             
                        return rc if OpenNebula.is_error?(rc)
         
     | 
| 
       109 
109 
     | 
    
         | 
| 
       110 
110 
     | 
    
         
             
                        # Set group ACLs to create resources
         
     | 
| 
       111 
111 
     | 
    
         
             
                        rc, msg = create_default_acls(group_hash[:resources])
         
     | 
| 
       112 
112 
     | 
    
         | 
| 
       113 
113 
     | 
    
         
             
                        if OpenNebula.is_error?(rc)
         
     | 
| 
       114 
     | 
    
         
            -
                             
     | 
| 
      
 114 
     | 
    
         
            +
                            delete
         
     | 
| 
       115 
115 
     | 
    
         
             
                            error_msg =  "Error creating group ACL's: #{rc.message}"
         
     | 
| 
       116 
116 
     | 
    
         
             
                            return OpenNebula::Error.new(error_msg)
         
     | 
| 
       117 
117 
     | 
    
         
             
                        end
         
     | 
| 
         @@ -119,7 +119,7 @@ module OpenNebula 
     | 
|
| 
       119 
119 
     | 
    
         
             
                        # Set group ACLs to share resources
         
     | 
| 
       120 
120 
     | 
    
         
             
                        if group_hash[:shared_resources]
         
     | 
| 
       121 
121 
     | 
    
         
             
                            acls = Array.new
         
     | 
| 
       122 
     | 
    
         
            -
                            acls << "@#{ 
     | 
| 
      
 122 
     | 
    
         
            +
                            acls << "@#{id} #{group_hash[:shared_resources]}/@#{id} USE"
         
     | 
| 
       123 
123 
     | 
    
         | 
| 
       124 
124 
     | 
    
         
             
                            rc, msg = create_group_acls(acls)
         
     | 
| 
       125 
125 
     | 
    
         | 
| 
         @@ -134,7 +134,7 @@ module OpenNebula 
     | 
|
| 
       134 
134 
     | 
    
         
             
                        rc = create_admin_user(group_hash)
         
     | 
| 
       135 
135 
     | 
    
         | 
| 
       136 
136 
     | 
    
         
             
                        if OpenNebula.is_error?(rc)
         
     | 
| 
       137 
     | 
    
         
            -
                             
     | 
| 
      
 137 
     | 
    
         
            +
                            delete
         
     | 
| 
       138 
138 
     | 
    
         
             
                            error_msg =  "Error creating admin user: #{rc.message}"
         
     | 
| 
       139 
139 
     | 
    
         
             
                            return OpenNebula::Error.new(error_msg)
         
     | 
| 
       140 
140 
     | 
    
         
             
                        end
         
     | 
| 
         @@ -163,10 +163,40 @@ module OpenNebula 
     | 
|
| 
       163 
163 
     | 
    
         
             
                            sunstone_attrs << "GROUP_ADMIN_DEFAULT_VIEW=#{GROUP_ADMIN_SUNSTONE_VIEWS}"
         
     | 
| 
       164 
164 
     | 
    
         
             
                        end
         
     | 
| 
       165 
165 
     | 
    
         | 
| 
      
 166 
     | 
    
         
            +
                        do_update = false
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
       166 
168 
     | 
    
         
             
                        if sunstone_attrs.length > 0
         
     | 
| 
       167 
     | 
    
         
            -
                             
     | 
| 
      
 169 
     | 
    
         
            +
                            do_update = true
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
                            update_str = "SUNSTONE=[#{sunstone_attrs.join(",\n")}]\n"
         
     | 
| 
      
 172 
     | 
    
         
            +
                        end
         
     | 
| 
      
 173 
     | 
    
         
            +
             
     | 
| 
      
 174 
     | 
    
         
            +
                        opennebula_attrs = []
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
      
 176 
     | 
    
         
            +
                        # Persistency attributes for new images
         
     | 
| 
      
 177 
     | 
    
         
            +
                        if group_hash[:opennebula]
         
     | 
| 
      
 178 
     | 
    
         
            +
                            if group_hash[:opennebula][:default_image_persistent]
         
     | 
| 
      
 179 
     | 
    
         
            +
                                opennebula_attrs << "DEFAULT_IMAGE_PERSISTENT=\""\
         
     | 
| 
      
 180 
     | 
    
         
            +
                                    "#{group_hash[:opennebula][:default_image_persistent]}\""
         
     | 
| 
      
 181 
     | 
    
         
            +
                            end
         
     | 
| 
      
 182 
     | 
    
         
            +
             
     | 
| 
      
 183 
     | 
    
         
            +
                            if group_hash[:opennebula][:default_image_persistent_new]
         
     | 
| 
      
 184 
     | 
    
         
            +
                                opennebula_attrs << "DEFAULT_IMAGE_PERSISTENT_NEW=\""\
         
     | 
| 
      
 185 
     | 
    
         
            +
                                    "#{group_hash[:opennebula][:default_image_persistent_new]}\""
         
     | 
| 
      
 186 
     | 
    
         
            +
                            end
         
     | 
| 
      
 187 
     | 
    
         
            +
                        end
         
     | 
| 
      
 188 
     | 
    
         
            +
             
     | 
| 
      
 189 
     | 
    
         
            +
                        if opennebula_attrs.length > 0
         
     | 
| 
      
 190 
     | 
    
         
            +
                            do_update = true
         
     | 
| 
      
 191 
     | 
    
         
            +
             
     | 
| 
      
 192 
     | 
    
         
            +
                            update_str += "OPENNEBULA=[#{opennebula_attrs.join(",\n")}]\n"
         
     | 
| 
      
 193 
     | 
    
         
            +
                        end
         
     | 
| 
      
 194 
     | 
    
         
            +
             
     | 
| 
      
 195 
     | 
    
         
            +
                        if do_update
         
     | 
| 
      
 196 
     | 
    
         
            +
                            rc = update(update_str, true)
         
     | 
| 
      
 197 
     | 
    
         
            +
             
     | 
| 
       168 
198 
     | 
    
         
             
                            if OpenNebula.is_error?(rc)
         
     | 
| 
       169 
     | 
    
         
            -
                                 
     | 
| 
      
 199 
     | 
    
         
            +
                                delete
         
     | 
| 
       170 
200 
     | 
    
         
             
                                error_msg =  "Error updating group template: #{rc.message}"
         
     | 
| 
       171 
201 
     | 
    
         
             
                                return OpenNebula::Error.new(error_msg)
         
     | 
| 
       172 
202 
     | 
    
         
             
                            end
         
     | 
    
        data/lib/opennebula/host.rb
    CHANGED
    
    | 
         @@ -223,12 +223,23 @@ module OpenNebula 
     | 
|
| 
       223 
223 
     | 
    
         
             
                        xml = OpenNebula::VirtualMachine.build_xml
         
     | 
| 
       224 
224 
     | 
    
         
             
                        vm = OpenNebula::VirtualMachine.new(xml, @client)
         
     | 
| 
       225 
225 
     | 
    
         | 
| 
       226 
     | 
    
         
            -
                         
     | 
| 
      
 226 
     | 
    
         
            +
                        # vCenter wild VMs has a different process
         
     | 
| 
      
 227 
     | 
    
         
            +
                        # image and vnets objects representing existing nics and disks
         
     | 
| 
      
 228 
     | 
    
         
            +
                        # must be created and referenced
         
     | 
| 
      
 229 
     | 
    
         
            +
                        vcenter_wild_vm = wild.key? "VCENTER_TEMPLATE"
         
     | 
| 
      
 230 
     | 
    
         
            +
                        if vcenter_wild_vm
         
     | 
| 
      
 231 
     | 
    
         
            +
                            require 'vcenter_driver'
         
     | 
| 
      
 232 
     | 
    
         
            +
                            host_id = self["ID"]
         
     | 
| 
      
 233 
     | 
    
         
            +
                            vm_ref    = wild["DEPLOY_ID"]
         
     | 
| 
      
 234 
     | 
    
         
            +
                            return VCenterDriver::Importer.import_wild(host_id, vm_ref, vm, template)
         
     | 
| 
      
 235 
     | 
    
         
            +
                        else
         
     | 
| 
      
 236 
     | 
    
         
            +
                            rc = vm.allocate(template)
         
     | 
| 
       227 
237 
     | 
    
         | 
| 
       228 
     | 
    
         
            -
             
     | 
| 
      
 238 
     | 
    
         
            +
                            return rc if OpenNebula.is_error?(rc)
         
     | 
| 
       229 
239 
     | 
    
         | 
| 
       230 
     | 
    
         
            -
             
     | 
| 
       231 
     | 
    
         
            -
             
     | 
| 
      
 240 
     | 
    
         
            +
                            vm.deploy(id, false)
         
     | 
| 
      
 241 
     | 
    
         
            +
                            return vm.id
         
     | 
| 
      
 242 
     | 
    
         
            +
                        end
         
     | 
| 
       232 
243 
     | 
    
         
             
                    end
         
     | 
| 
       233 
244 
     | 
    
         | 
| 
       234 
245 
     | 
    
         
             
                    #######################################################################
         
     | 
| 
         @@ -39,12 +39,13 @@ class OpenNebula::ServerCipherAuth 
     | 
|
| 
       39 
39 
     | 
    
         
             
                    @srv_passwd = srv_passwd
         
     | 
| 
       40 
40 
     | 
    
         | 
| 
       41 
41 
     | 
    
         
             
                    if !srv_passwd.empty?
         
     | 
| 
       42 
     | 
    
         
            -
                         
     | 
| 
      
 42 
     | 
    
         
            +
                        # truncate token to 32-bytes for Ruby >= 2.4
         
     | 
| 
      
 43 
     | 
    
         
            +
                        @key = Digest::SHA1.hexdigest(@srv_passwd)[0..31]
         
     | 
| 
       43 
44 
     | 
    
         
             
                    else
         
     | 
| 
       44 
45 
     | 
    
         
             
                        @key = ""
         
     | 
| 
       45 
46 
     | 
    
         
             
                    end
         
     | 
| 
       46 
47 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
                    @cipher = OpenSSL::Cipher 
     | 
| 
      
 48 
     | 
    
         
            +
                    @cipher = OpenSSL::Cipher.new(CIPHER)
         
     | 
| 
       48 
49 
     | 
    
         
             
                end
         
     | 
| 
       49 
50 
     | 
    
         | 
| 
       50 
51 
     | 
    
         
             
                ###########################################################################
         
     | 
| 
         @@ -109,7 +110,8 @@ class OpenNebula::ServerCipherAuth 
     | 
|
| 
       109 
110 
     | 
    
         
             
                # auth method for auth_mad
         
     | 
| 
       110 
111 
     | 
    
         
             
                def authenticate(srv_user,srv_pass, signed_text)
         
     | 
| 
       111 
112 
     | 
    
         
             
                    begin
         
     | 
| 
       112 
     | 
    
         
            -
                         
     | 
| 
      
 113 
     | 
    
         
            +
                        # truncate token to 32-bytes for Ruby >= 2.4
         
     | 
| 
      
 114 
     | 
    
         
            +
                        @key = srv_pass[0..31]
         
     | 
| 
       113 
115 
     | 
    
         | 
| 
       114 
116 
     | 
    
         
             
                        s_user, t_user, expires = decrypt(signed_text).split(':')
         
     | 
| 
       115 
117 
     | 
    
         | 
    
        data/lib/opennebula/system.rb
    CHANGED
    
    | 
         @@ -29,7 +29,8 @@ module OpenNebula 
     | 
|
| 
       29 
29 
     | 
    
         
             
                        :groupquotainfo     => "groupquota.info",
         
     | 
| 
       30 
30 
     | 
    
         
             
                        :groupquotaupdate   => "groupquota.update",
         
     | 
| 
       31 
31 
     | 
    
         
             
                        :version            => "system.version",
         
     | 
| 
       32 
     | 
    
         
            -
                        :config             => "system.config"
         
     | 
| 
      
 32 
     | 
    
         
            +
                        :config             => "system.config",
         
     | 
| 
      
 33 
     | 
    
         
            +
                        :sql                => "system.sql"
         
     | 
| 
       33 
34 
     | 
    
         
             
                    }
         
     | 
| 
       34 
35 
     | 
    
         | 
| 
       35 
36 
     | 
    
         
             
                    #######################################################################
         
     | 
| 
         @@ -46,6 +47,17 @@ module OpenNebula 
     | 
|
| 
       46 
47 
     | 
    
         
             
                    # XML-RPC Methods
         
     | 
| 
       47 
48 
     | 
    
         
             
                    #######################################################################
         
     | 
| 
       48 
49 
     | 
    
         | 
| 
      
 50 
     | 
    
         
            +
                    # Executes and replicates SQL commands on OpenNebula DB
         
     | 
| 
      
 51 
     | 
    
         
            +
                    #   @param [String] Sql string
         
     | 
| 
      
 52 
     | 
    
         
            +
                    #   @param [Boolean] True to replicate command on a federation. To
         
     | 
| 
      
 53 
     | 
    
         
            +
                    #   operate on federated tables
         
     | 
| 
      
 54 
     | 
    
         
            +
                    #   @return [Integer, OpenNebula::Error] Sql execution result in case
         
     | 
| 
      
 55 
     | 
    
         
            +
                    #   of success, Error otherwise
         
     | 
| 
      
 56 
     | 
    
         
            +
                    def sql_command(sql, federate)
         
     | 
| 
      
 57 
     | 
    
         
            +
                        return @client.call(SYSTEM_METHODS[:sql], sql, federate)
         
     | 
| 
      
 58 
     | 
    
         
            +
                    end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                    #
         
     | 
| 
       49 
61 
     | 
    
         
             
                    # Gets the oned version
         
     | 
| 
       50 
62 
     | 
    
         
             
                    #
         
     | 
| 
       51 
63 
     | 
    
         
             
                    # @return [String, OpenNebula::Error] the oned version in case
         
     | 
| 
         @@ -47,6 +47,7 @@ module OpenNebula 
     | 
|
| 
       47 
47 
     | 
    
         
             
                        :disksnapshotcreate => "vm.disksnapshotcreate",
         
     | 
| 
       48 
48 
     | 
    
         
             
                        :disksnapshotrevert => "vm.disksnapshotrevert",
         
     | 
| 
       49 
49 
     | 
    
         
             
                        :disksnapshotdelete => "vm.disksnapshotdelete",
         
     | 
| 
      
 50 
     | 
    
         
            +
                        :diskresize     => "vm.diskresize",
         
     | 
| 
       50 
51 
     | 
    
         
             
                        :updateconf     => "vm.updateconf"
         
     | 
| 
       51 
52 
     | 
    
         
             
                    }
         
     | 
| 
       52 
53 
     | 
    
         | 
| 
         @@ -116,6 +117,9 @@ module OpenNebula 
     | 
|
| 
       116 
117 
     | 
    
         
             
                        DISK_SNAPSHOT_DELETE
         
     | 
| 
       117 
118 
     | 
    
         
             
                        PROLOG_MIGRATE_UNKNOWN
         
     | 
| 
       118 
119 
     | 
    
         
             
                        PROLOG_MIGRATE_UNKNOWN_FAILURE
         
     | 
| 
      
 120 
     | 
    
         
            +
                        DISK_RESIZE
         
     | 
| 
      
 121 
     | 
    
         
            +
                        DISK_RESIZE_POWEROFF
         
     | 
| 
      
 122 
     | 
    
         
            +
                        DISK_RESIZE_UNDEPLOYED
         
     | 
| 
       119 
123 
     | 
    
         
             
                    }
         
     | 
| 
       120 
124 
     | 
    
         | 
| 
       121 
125 
     | 
    
         
             
                    SHORT_VM_STATES={
         
     | 
| 
         @@ -193,26 +197,25 @@ module OpenNebula 
     | 
|
| 
       193 
197 
     | 
    
         
             
                        "DISK_SNAPSHOT"        => "snap",
         
     | 
| 
       194 
198 
     | 
    
         
             
                        "DISK_SNAPSHOT_DELETE" => "snap",
         
     | 
| 
       195 
199 
     | 
    
         
             
                        "PROLOG_MIGRATE_UNKNOWN" => "migr",
         
     | 
| 
       196 
     | 
    
         
            -
                        "PROLOG_MIGRATE_UNKNOWN_FAILURE" => "fail"
         
     | 
| 
       197 
     | 
    
         
            -
             
     | 
| 
       198 
     | 
    
         
            -
             
     | 
| 
       199 
     | 
    
         
            -
             
     | 
| 
       200 
     | 
    
         
            -
             
     | 
| 
       201 
     | 
    
         
            -
                    SHORT_MIGRATE_REASON={
         
     | 
| 
       202 
     | 
    
         
            -
                        "NONE"          => "none",
         
     | 
| 
       203 
     | 
    
         
            -
                        "ERROR"         => "erro",
         
     | 
| 
       204 
     | 
    
         
            -
                        "USER"          => "user"
         
     | 
| 
      
 200 
     | 
    
         
            +
                        "PROLOG_MIGRATE_UNKNOWN_FAILURE" => "fail",
         
     | 
| 
      
 201 
     | 
    
         
            +
                        "DISK_RESIZE"            => "drsz",
         
     | 
| 
      
 202 
     | 
    
         
            +
                        "DISK_RESIZE_POWEROFF"   => "drsz",
         
     | 
| 
      
 203 
     | 
    
         
            +
                        "DISK_RESIZE_UNDEPLOYED" => "drsz"
         
     | 
| 
       205 
204 
     | 
    
         
             
                    }
         
     | 
| 
       206 
205 
     | 
    
         | 
| 
       207 
206 
     | 
    
         
             
                    HISTORY_ACTION=%w{none migrate live-migrate shutdown shutdown-hard
         
     | 
| 
       208 
207 
     | 
    
         
             
                        undeploy undeploy-hard hold release stop suspend resume boot delete
         
     | 
| 
       209 
208 
     | 
    
         
             
                        delete-recreate reboot reboot-hard resched unresched poweroff
         
     | 
| 
       210 
209 
     | 
    
         
             
                        poweroff-hard disk-attach disk-detach nic-attach nic-detach
         
     | 
| 
       211 
     | 
    
         
            -
                         
     | 
| 
      
 210 
     | 
    
         
            +
                        disk-snapshot-create disk-snapshot-delete terminate terminate-hard
         
     | 
| 
      
 211 
     | 
    
         
            +
                        disk-resize deploy chown chmod updateconf rename resize update
         
     | 
| 
      
 212 
     | 
    
         
            +
                        snapshot-resize snapshot-delete snapshot-revert disk-saveas
         
     | 
| 
      
 213 
     | 
    
         
            +
                        disk-snapshot-revert recover retry monitor}
         
     | 
| 
       212 
214 
     | 
    
         | 
| 
       213 
215 
     | 
    
         
             
                    EXTERNAL_IP_ATTRS = [
         
     | 
| 
       214 
216 
     | 
    
         
             
                        'GUEST_IP',
         
     | 
| 
       215 
217 
     | 
    
         
             
                        'AWS_IP_ADDRESS',
         
     | 
| 
      
 218 
     | 
    
         
            +
                        'AWS_PUBLIC_IP_ADDRESS',
         
     | 
| 
       216 
219 
     | 
    
         
             
                        'AWS_PRIVATE_IP_ADDRESS',
         
     | 
| 
       217 
220 
     | 
    
         
             
                        'AZ_IPADDRESS',
         
     | 
| 
       218 
221 
     | 
    
         
             
                        'SL_PRIMARYIPADDRESS'
         
     | 
| 
         @@ -256,13 +259,6 @@ module OpenNebula 
     | 
|
| 
       256 
259 
     | 
    
         
             
                        XMLElement.build_xml(vm_xml, 'VM')
         
     | 
| 
       257 
260 
     | 
    
         
             
                    end
         
     | 
| 
       258 
261 
     | 
    
         | 
| 
       259 
     | 
    
         
            -
                    def VirtualMachine.get_reason(reason)
         
     | 
| 
       260 
     | 
    
         
            -
                        reason=MIGRATE_REASON[reason.to_i]
         
     | 
| 
       261 
     | 
    
         
            -
                        reason_str=SHORT_MIGRATE_REASON[reason]
         
     | 
| 
       262 
     | 
    
         
            -
             
     | 
| 
       263 
     | 
    
         
            -
                        reason_str
         
     | 
| 
       264 
     | 
    
         
            -
                    end
         
     | 
| 
       265 
     | 
    
         
            -
             
     | 
| 
       266 
262 
     | 
    
         
             
                    def VirtualMachine.get_history_action(action)
         
     | 
| 
       267 
263 
     | 
    
         
             
                        return HISTORY_ACTION[action.to_i]
         
     | 
| 
       268 
264 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -354,7 +350,7 @@ module OpenNebula 
     | 
|
| 
       354 
350 
     | 
    
         
             
                            ds = OpenNebula::Datastore.new_with_id(ds_id, @client)
         
     | 
| 
       355 
351 
     | 
    
         
             
                            rc = ds.info
         
     | 
| 
       356 
352 
     | 
    
         
             
                            return rc if OpenNebula.is_error?(rc)
         
     | 
| 
       357 
     | 
    
         
            -
                           self.update(" 
     | 
| 
      
 353 
     | 
    
         
            +
                           self.update("VCENTER_DS_REF=#{ds['/DATASTORE/VCENTER_DS_REF']}", true)
         
     | 
| 
       358 
354 
     | 
    
         
             
                        end
         
     | 
| 
       359 
355 
     | 
    
         | 
| 
       360 
356 
     | 
    
         
             
                        return call(VM_METHODS[:deploy],
         
     | 
| 
         @@ -659,6 +655,16 @@ module OpenNebula 
     | 
|
| 
       659 
655 
     | 
    
         
             
                      return call(VM_METHODS[:disksnapshotdelete], @pe_id, disk_id, snap_id)
         
     | 
| 
       660 
656 
     | 
    
         
             
                    end
         
     | 
| 
       661 
657 
     | 
    
         | 
| 
      
 658 
     | 
    
         
            +
                    # Changes the size of a disk
         
     | 
| 
      
 659 
     | 
    
         
            +
                    #
         
     | 
| 
      
 660 
     | 
    
         
            +
                    # @param disk_id [Integer] Id of the disk
         
     | 
| 
      
 661 
     | 
    
         
            +
                    # @param size [Integer] new size in MiB
         
     | 
| 
      
 662 
     | 
    
         
            +
                    #
         
     | 
| 
      
 663 
     | 
    
         
            +
                    # @return [nil, OpenNebula::Error] nil in case of success or error
         
     | 
| 
      
 664 
     | 
    
         
            +
                    def disk_resize(disk_id, size)
         
     | 
| 
      
 665 
     | 
    
         
            +
                        return call(VM_METHODS[:diskresize], @pe_id, disk_id, size.to_s)
         
     | 
| 
      
 666 
     | 
    
         
            +
                    end
         
     | 
| 
      
 667 
     | 
    
         
            +
             
     | 
| 
       662 
668 
     | 
    
         
             
                    # Recovers an ACTIVE VM
         
     | 
| 
       663 
669 
     | 
    
         
             
                    #
         
     | 
| 
       664 
670 
     | 
    
         
             
                    # @param result [Integer] Recover with failure (0), success (1),
         
     | 
| 
         @@ -739,13 +745,6 @@ module OpenNebula 
     | 
|
| 
       739 
745 
     | 
    
         
             
                        self['DEPLOY_ID']
         
     | 
| 
       740 
746 
     | 
    
         
             
                    end
         
     | 
| 
       741 
747 
     | 
    
         | 
| 
       742 
     | 
    
         
            -
                    # Returns the deploy_id of the VirtualMachine (numeric value)
         
     | 
| 
       743 
     | 
    
         
            -
                    def keep_disks?
         
     | 
| 
       744 
     | 
    
         
            -
                        !self['USER_TEMPLATE/KEEP_DISKS_ON_DONE'].nil? &&
         
     | 
| 
       745 
     | 
    
         
            -
                            self['USER_TEMPLATE/KEEP_DISKS_ON_DONE'].downcase=="yes"
         
     | 
| 
       746 
     | 
    
         
            -
                    end
         
     | 
| 
       747 
     | 
    
         
            -
             
     | 
| 
       748 
     | 
    
         
            -
             
     | 
| 
       749 
748 
     | 
    
         
             
                    # Clones the VM's source Template, replacing the disks with live snapshots
         
     | 
| 
       750 
749 
     | 
    
         
             
                    # of the current disks. The VM capacity and NICs are also preserved
         
     | 
| 
       751 
750 
     | 
    
         
             
                    #
         
     | 
| 
         @@ -755,6 +754,7 @@ module OpenNebula 
     | 
|
| 
       755 
754 
     | 
    
         
             
                    #
         
     | 
| 
       756 
755 
     | 
    
         
             
                    # @return [Integer, OpenNebula::Error] the new Template ID in case of
         
     | 
| 
       757 
756 
     | 
    
         
             
                    #   success, error otherwise
         
     | 
| 
      
 757 
     | 
    
         
            +
                    REMOVE_VNET_ATTRS = %w{AR_ID BRIDGE CLUSTER_ID IP MAC TARGET NIC_ID NETWORK_ID VN_MAD SECURITY_GROUPS}
         
     | 
| 
       758 
758 
     | 
    
         
             
                    def save_as_template(name, persistent=nil)
         
     | 
| 
       759 
759 
     | 
    
         
             
                        img_ids = []
         
     | 
| 
       760 
760 
     | 
    
         
             
                        new_tid = nil
         
     | 
| 
         @@ -852,21 +852,18 @@ module OpenNebula 
     | 
|
| 
       852 
852 
     | 
    
         
             
                            end
         
     | 
| 
       853 
853 
     | 
    
         | 
| 
       854 
854 
     | 
    
         
             
                            self.each('TEMPLATE/NIC') do |nic|
         
     | 
| 
      
 855 
     | 
    
         
            +
             
     | 
| 
       855 
856 
     | 
    
         
             
                                nic_id = nic["NIC_ID"]
         
     | 
| 
       856 
857 
     | 
    
         
             
                                if nic_id.nil? || nic_id.empty?
         
     | 
| 
       857 
858 
     | 
    
         
             
                                    rc = Error.new('The NIC_ID is missing from the VM template')
         
     | 
| 
       858 
859 
     | 
    
         
             
                                    raise
         
     | 
| 
       859 
860 
     | 
    
         
             
                                end
         
     | 
| 
       860 
     | 
    
         
            -
             
     | 
| 
       861 
     | 
    
         
            -
             
     | 
| 
       862 
     | 
    
         
            -
             
     | 
| 
       863 
     | 
    
         
            -
                                if !net_id.nil? && !net_id.empty?
         
     | 
| 
       864 
     | 
    
         
            -
                                    replace << "NIC = [ NETWORK_ID = #{net_id} ]\n"
         
     | 
| 
       865 
     | 
    
         
            -
                                else
         
     | 
| 
       866 
     | 
    
         
            -
                                    # This NIC does not use a Virtual Network
         
     | 
| 
       867 
     | 
    
         
            -
                                    replace << self.template_like_str(
         
     | 
| 
       868 
     | 
    
         
            -
                                        "TEMPLATE", true, "NIC[NIC_ID=#{nic_id}]") << "\n"
         
     | 
| 
      
 861 
     | 
    
         
            +
                                 REMOVE_VNET_ATTRS.each do |attr|
         
     | 
| 
      
 862 
     | 
    
         
            +
                                    nic.delete_element(attr)
         
     | 
| 
       869 
863 
     | 
    
         
             
                                end
         
     | 
| 
      
 864 
     | 
    
         
            +
             
     | 
| 
      
 865 
     | 
    
         
            +
                                replace << self.template_like_str(
         
     | 
| 
      
 866 
     | 
    
         
            +
                                    "TEMPLATE", true, "NIC[#{nic}]") << "\n"
         
     | 
| 
       870 
867 
     | 
    
         
             
                            end
         
     | 
| 
       871 
868 
     | 
    
         | 
| 
       872 
869 
     | 
    
         
             
                            # Required by the Sunstone Cloud View
         
     | 
| 
         @@ -16,6 +16,7 @@ 
     | 
|
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
            require 'opennebula/pool_element'
         
     | 
| 
      
 19 
     | 
    
         
            +
            require 'ipaddr'
         
     | 
| 
       19 
20 
     | 
    
         | 
| 
       20 
21 
     | 
    
         
             
            module OpenNebula
         
     | 
| 
       21 
22 
     | 
    
         
             
                class VirtualNetwork < PoolElement
         
     | 
| 
         @@ -184,11 +185,9 @@ module OpenNebula 
     | 
|
| 
       184 
185 
     | 
    
         
             
                    def hold(ip, ar_id=-1)
         
     | 
| 
       185 
186 
     | 
    
         
             
                        return Error.new('ID not defined') if !@pe_id
         
     | 
| 
       186 
187 
     | 
    
         | 
| 
       187 
     | 
    
         
            -
                         
     | 
| 
       188 
     | 
    
         
            -
             
     | 
| 
       189 
     | 
    
         
            -
                         
     | 
| 
       190 
     | 
    
         
            -
                            addr_name = "IP"
         
     | 
| 
       191 
     | 
    
         
            -
                        end
         
     | 
| 
      
 188 
     | 
    
         
            +
                        addr_name = address_type(ip)
         
     | 
| 
      
 189 
     | 
    
         
            +
             
     | 
| 
      
 190 
     | 
    
         
            +
                        return addr_name if OpenNebula.is_error?(addr_name)
         
     | 
| 
       192 
191 
     | 
    
         | 
| 
       193 
192 
     | 
    
         
             
                        lease_template =  "LEASES = [ #{addr_name} = #{ip}"
         
     | 
| 
       194 
193 
     | 
    
         
             
                        lease_template << ", AR_ID = #{ar_id}" if ar_id != -1
         
     | 
| 
         @@ -207,11 +206,9 @@ module OpenNebula 
     | 
|
| 
       207 
206 
     | 
    
         
             
                    def release(ip, ar_id=-1)
         
     | 
| 
       208 
207 
     | 
    
         
             
                        return Error.new('ID not defined') if !@pe_id
         
     | 
| 
       209 
208 
     | 
    
         | 
| 
       210 
     | 
    
         
            -
                         
     | 
| 
       211 
     | 
    
         
            -
             
     | 
| 
       212 
     | 
    
         
            -
                         
     | 
| 
       213 
     | 
    
         
            -
                            addr_name = "IP"
         
     | 
| 
       214 
     | 
    
         
            -
                        end
         
     | 
| 
      
 209 
     | 
    
         
            +
                        addr_name = address_type(ip)
         
     | 
| 
      
 210 
     | 
    
         
            +
             
     | 
| 
      
 211 
     | 
    
         
            +
                        return addr_name if OpenNebula.is_error?(addr_name)
         
     | 
| 
       215 
212 
     | 
    
         | 
| 
       216 
213 
     | 
    
         
             
                        lease_template =  "LEASES = [ #{addr_name} = #{ip}"
         
     | 
| 
       217 
214 
     | 
    
         
             
                        lease_template << ", AR_ID = #{ar_id}" if ar_id != -1
         
     | 
| 
         @@ -243,11 +240,9 @@ module OpenNebula 
     | 
|
| 
       243 
240 
     | 
    
         
             
                        rtmpl << "NETWORK_ID = #{vnet}\n"  if !vnet.nil?
         
     | 
| 
       244 
241 
     | 
    
         | 
| 
       245 
242 
     | 
    
         
             
                        if !addr.nil?
         
     | 
| 
       246 
     | 
    
         
            -
                             
     | 
| 
       247 
     | 
    
         
            -
             
     | 
| 
       248 
     | 
    
         
            -
                             
     | 
| 
       249 
     | 
    
         
            -
                                addr_name = "IP"
         
     | 
| 
       250 
     | 
    
         
            -
                            end
         
     | 
| 
      
 243 
     | 
    
         
            +
                            addr_name = address_type(addr)
         
     | 
| 
      
 244 
     | 
    
         
            +
             
     | 
| 
      
 245 
     | 
    
         
            +
                            return addr_name if OpenNebula.is_error?(addr_name)
         
     | 
| 
       251 
246 
     | 
    
         | 
| 
       252 
247 
     | 
    
         
             
                            rtmpl << "#{addr_name} = #{addr}\n"
         
     | 
| 
       253 
248 
     | 
    
         
             
                        end
         
     | 
| 
         @@ -342,5 +337,27 @@ module OpenNebula 
     | 
|
| 
       342 
337 
     | 
    
         
             
                        chmod(-1, -1, -1, group_u, -1, -1, -1, -1, -1)
         
     | 
| 
       343 
338 
     | 
    
         
             
                    end
         
     | 
| 
       344 
339 
     | 
    
         | 
| 
      
 340 
     | 
    
         
            +
                    # Returns the OpenNebula name of the address to use it in LEASE
         
     | 
| 
      
 341 
     | 
    
         
            +
                    # attributes. MAC, IP or IP6 is returned for MAC addresses in colon
         
     | 
| 
      
 342 
     | 
    
         
            +
                    # notation, ipv4 and ipv6 respectively
         
     | 
| 
      
 343 
     | 
    
         
            +
                    def address_type(addr)
         
     | 
| 
      
 344 
     | 
    
         
            +
                        begin
         
     | 
| 
      
 345 
     | 
    
         
            +
                            ipaddr = IPAddr.new addr
         
     | 
| 
      
 346 
     | 
    
         
            +
             
     | 
| 
      
 347 
     | 
    
         
            +
                            if ipaddr.ipv4?
         
     | 
| 
      
 348 
     | 
    
         
            +
                                return "IP"
         
     | 
| 
      
 349 
     | 
    
         
            +
                            elsif ipaddr.ipv6?
         
     | 
| 
      
 350 
     | 
    
         
            +
                                return "IP6"
         
     | 
| 
      
 351 
     | 
    
         
            +
                            else
         
     | 
| 
      
 352 
     | 
    
         
            +
                                return Error.new('Unknown IP type')
         
     | 
| 
      
 353 
     | 
    
         
            +
                            end
         
     | 
| 
      
 354 
     | 
    
         
            +
                        rescue
         
     | 
| 
      
 355 
     | 
    
         
            +
                            if /^(\h{2}:){5}\h{2}$/ =~ addr
         
     | 
| 
      
 356 
     | 
    
         
            +
                                return "MAC"
         
     | 
| 
      
 357 
     | 
    
         
            +
                            else
         
     | 
| 
      
 358 
     | 
    
         
            +
                                return Error.new('Unknown address type')
         
     | 
| 
      
 359 
     | 
    
         
            +
                            end
         
     | 
| 
      
 360 
     | 
    
         
            +
                        end
         
     | 
| 
      
 361 
     | 
    
         
            +
                    end
         
     | 
| 
       345 
362 
     | 
    
         
             
                end
         
     | 
| 
       346 
363 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,151 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -------------------------------------------------------------------------- #
         
     | 
| 
      
 2 
     | 
    
         
            +
            # Copyright 2002-2017, OpenNebula Project, OpenNebula Systems                #
         
     | 
| 
      
 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 'opennebula/pool_element'
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            module OpenNebula
         
     | 
| 
      
 20 
     | 
    
         
            +
                class VMGroup < PoolElement
         
     | 
| 
      
 21 
     | 
    
         
            +
                    #######################################################################
         
     | 
| 
      
 22 
     | 
    
         
            +
                    # Constants and Class Methods
         
     | 
| 
      
 23 
     | 
    
         
            +
                    #######################################################################
         
     | 
| 
      
 24 
     | 
    
         
            +
                    VMGROUP_METHODS = {
         
     | 
| 
      
 25 
     | 
    
         
            +
                        :allocate    => "vmgroup.allocate",
         
     | 
| 
      
 26 
     | 
    
         
            +
                        :info        => "vmgroup.info",
         
     | 
| 
      
 27 
     | 
    
         
            +
                        :update      => "vmgroup.update",
         
     | 
| 
      
 28 
     | 
    
         
            +
                        :delete      => "vmgroup.delete",
         
     | 
| 
      
 29 
     | 
    
         
            +
                        :chown       => "vmgroup.chown",
         
     | 
| 
      
 30 
     | 
    
         
            +
                        :chmod       => "vmgroup.chmod",
         
     | 
| 
      
 31 
     | 
    
         
            +
                        :rename      => "vmgroup.rename"
         
     | 
| 
      
 32 
     | 
    
         
            +
                    }
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                    # Creates a VMGroup description with just its identifier
         
     | 
| 
      
 35 
     | 
    
         
            +
                    # this method should be used to create plain VMGroup objects.
         
     | 
| 
      
 36 
     | 
    
         
            +
                    # @param pe_id [Integer] the id of the object
         
     | 
| 
      
 37 
     | 
    
         
            +
                    def VMGroup.build_xml(pe_id=nil)
         
     | 
| 
      
 38 
     | 
    
         
            +
                        if pe_id
         
     | 
| 
      
 39 
     | 
    
         
            +
                            obj_xml = "<VM_GROUP><ID>#{pe_id}</ID></VM_GROUP>"
         
     | 
| 
      
 40 
     | 
    
         
            +
                        else
         
     | 
| 
      
 41 
     | 
    
         
            +
                            obj_xml = "<VM_GROUP></VM_GROUP>"
         
     | 
| 
      
 42 
     | 
    
         
            +
                        end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                        XMLElement.build_xml(obj_xml,'VM_GROUP')
         
     | 
| 
      
 45 
     | 
    
         
            +
                    end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                    # Class constructor
         
     | 
| 
      
 48 
     | 
    
         
            +
                    def initialize(xml, client)
         
     | 
| 
      
 49 
     | 
    
         
            +
                        super(xml,client)
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                        @client = client
         
     | 
| 
      
 52 
     | 
    
         
            +
                    end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                    #######################################################################
         
     | 
| 
      
 55 
     | 
    
         
            +
                    # XML-RPC Methods for the VMGroup Object
         
     | 
| 
      
 56 
     | 
    
         
            +
                    #######################################################################
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                    # Retrieves the information of the VMGroup.
         
     | 
| 
      
 59 
     | 
    
         
            +
                    def info()
         
     | 
| 
      
 60 
     | 
    
         
            +
                        super(VMGROUP_METHODS[:info], 'VM_GROUP')
         
     | 
| 
      
 61 
     | 
    
         
            +
                    end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                    alias_method :info!, :info
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                    # Allocates a new VMGroup in OpenNebula
         
     | 
| 
      
 66 
     | 
    
         
            +
                    #
         
     | 
| 
      
 67 
     | 
    
         
            +
                    # @param description [String] The contents of the VMGroup.
         
     | 
| 
      
 68 
     | 
    
         
            +
                    #
         
     | 
| 
      
 69 
     | 
    
         
            +
                    # @return [nil, OpenNebula::Error] nil in case of success, Error
         
     | 
| 
      
 70 
     | 
    
         
            +
                    #   otherwise
         
     | 
| 
      
 71 
     | 
    
         
            +
                    def allocate(description)
         
     | 
| 
      
 72 
     | 
    
         
            +
                        super(VMGROUP_METHODS[:allocate], description)
         
     | 
| 
      
 73 
     | 
    
         
            +
                    end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                    # Deletes the SecurityGroup
         
     | 
| 
      
 76 
     | 
    
         
            +
                    def delete()
         
     | 
| 
      
 77 
     | 
    
         
            +
                        super(VMGROUP_METHODS[:delete])
         
     | 
| 
      
 78 
     | 
    
         
            +
                    end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                    # Replaces the vm group contents
         
     | 
| 
      
 81 
     | 
    
         
            +
                    #
         
     | 
| 
      
 82 
     | 
    
         
            +
                    # @param new_vmgroup [String] New vmgroup contents
         
     | 
| 
      
 83 
     | 
    
         
            +
                    # @param append [true, false] True to append new attributes instead of
         
     | 
| 
      
 84 
     | 
    
         
            +
                    #   replace the whole securitygroup
         
     | 
| 
      
 85 
     | 
    
         
            +
                    #
         
     | 
| 
      
 86 
     | 
    
         
            +
                    # @return [nil, OpenNebula::Error] nil in case of success, Error
         
     | 
| 
      
 87 
     | 
    
         
            +
                    #   otherwise
         
     | 
| 
      
 88 
     | 
    
         
            +
                    def update(new_vmgroup, append=false)
         
     | 
| 
      
 89 
     | 
    
         
            +
                        super(VMGROUP_METHODS[:update], new_vmgroup, append ? 1 : 0)
         
     | 
| 
      
 90 
     | 
    
         
            +
                    end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                    # Changes the owner/group
         
     | 
| 
      
 93 
     | 
    
         
            +
                    #
         
     | 
| 
      
 94 
     | 
    
         
            +
                    # @param uid [Integer] the new owner id. Set to -1 to leave the current one
         
     | 
| 
      
 95 
     | 
    
         
            +
                    # @param gid [Integer] the new group id. Set to -1 to leave the current one
         
     | 
| 
      
 96 
     | 
    
         
            +
                    # @return [nil, OpenNebula::Error] nil in case of success, Error
         
     | 
| 
      
 97 
     | 
    
         
            +
                    #   otherwise
         
     | 
| 
      
 98 
     | 
    
         
            +
                    def chown(uid, gid)
         
     | 
| 
      
 99 
     | 
    
         
            +
                        super(VMGROUP_METHODS[:chown], uid, gid)
         
     | 
| 
      
 100 
     | 
    
         
            +
                    end
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                    # Changes the SecurityGroup permissions.
         
     | 
| 
      
 103 
     | 
    
         
            +
                    #
         
     | 
| 
      
 104 
     | 
    
         
            +
                    # @param octet [String] Permissions octed , e.g. 640
         
     | 
| 
      
 105 
     | 
    
         
            +
                    # @return [nil, OpenNebula::Error] nil in case of success, Error
         
     | 
| 
      
 106 
     | 
    
         
            +
                    #   otherwise
         
     | 
| 
      
 107 
     | 
    
         
            +
                    def chmod_octet(octet)
         
     | 
| 
      
 108 
     | 
    
         
            +
                        super(VMGROUP_METHODS[:chmod], octet)
         
     | 
| 
      
 109 
     | 
    
         
            +
                    end
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
                    # Changes the SecurityGroup permissions.
         
     | 
| 
      
 112 
     | 
    
         
            +
                    # Each [Integer] argument must be 1 to allow, 0 deny, -1 do not change
         
     | 
| 
      
 113 
     | 
    
         
            +
                    #
         
     | 
| 
      
 114 
     | 
    
         
            +
                    # @return [nil, OpenNebula::Error] nil in case of success, Error
         
     | 
| 
      
 115 
     | 
    
         
            +
                    #   otherwise
         
     | 
| 
      
 116 
     | 
    
         
            +
                    def chmod(owner_u, owner_m, owner_a, group_u, group_m, group_a, other_u,
         
     | 
| 
      
 117 
     | 
    
         
            +
                            other_m, other_a)
         
     | 
| 
      
 118 
     | 
    
         
            +
                        super(VMGROUP_METHODS[:chmod], owner_u, owner_m, owner_a, group_u,
         
     | 
| 
      
 119 
     | 
    
         
            +
                            group_m, group_a, other_u, other_m, other_a)
         
     | 
| 
      
 120 
     | 
    
         
            +
                    end
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
                    # Renames this VMGroup
         
     | 
| 
      
 123 
     | 
    
         
            +
                    #
         
     | 
| 
      
 124 
     | 
    
         
            +
                    # @param name [String] New name for the VMGroup.
         
     | 
| 
      
 125 
     | 
    
         
            +
                    #
         
     | 
| 
      
 126 
     | 
    
         
            +
                    # @return [nil, OpenNebula::Error] nil in case of success, Error
         
     | 
| 
      
 127 
     | 
    
         
            +
                    #   otherwise
         
     | 
| 
      
 128 
     | 
    
         
            +
                    def rename(name)
         
     | 
| 
      
 129 
     | 
    
         
            +
                        return call(VMGROUP_METHODS[:rename], @pe_id, name)
         
     | 
| 
      
 130 
     | 
    
         
            +
                    end
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
                    #######################################################################
         
     | 
| 
      
 133 
     | 
    
         
            +
                    # Helpers to get VMGroup information
         
     | 
| 
      
 134 
     | 
    
         
            +
                    #######################################################################
         
     | 
| 
      
 135 
     | 
    
         
            +
             
     | 
| 
      
 136 
     | 
    
         
            +
                    # Returns the group identifier
         
     | 
| 
      
 137 
     | 
    
         
            +
                    # [return] _Integer_ the element's group ID
         
     | 
| 
      
 138 
     | 
    
         
            +
                    def gid
         
     | 
| 
      
 139 
     | 
    
         
            +
                        self['GID'].to_i
         
     | 
| 
      
 140 
     | 
    
         
            +
                    end
         
     | 
| 
      
 141 
     | 
    
         
            +
             
     | 
| 
      
 142 
     | 
    
         
            +
                    def owner_id
         
     | 
| 
      
 143 
     | 
    
         
            +
                        self['UID'].to_i
         
     | 
| 
      
 144 
     | 
    
         
            +
                    end
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                    # [return] _Array_ with the name of roles
         
     | 
| 
      
 147 
     | 
    
         
            +
                    def role_names
         
     | 
| 
      
 148 
     | 
    
         
            +
                        self.retrieve_elements('ROLES/ROLE/NAME')
         
     | 
| 
      
 149 
     | 
    
         
            +
                    end
         
     | 
| 
      
 150 
     | 
    
         
            +
                end
         
     | 
| 
      
 151 
     | 
    
         
            +
            end
         
     |