File: compute.rb

package info (click to toggle)
ruby-fog-openstack 1.1.5-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 11,784 kB
  • sloc: ruby: 47,937; makefile: 5; sh: 4
file content (393 lines) | stat: -rw-r--r-- 12,412 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
module Fog
  module OpenStack
    class Compute < Fog::Service
      SUPPORTED_VERSIONS = /v2\.0|v2\.1/
      SUPPORTED_MICROVERSION = '2.15'.freeze

      requires :openstack_auth_url
      recognizes :openstack_auth_token, :openstack_management_url,
                 :persistent, :openstack_service_type, :openstack_service_name,
                 :openstack_tenant, :openstack_tenant_id,
                 :openstack_api_key, :openstack_username, :openstack_identity_endpoint,
                 :current_user, :current_tenant, :openstack_region,
                 :openstack_endpoint_type, :openstack_cache_ttl,
                 :openstack_project_name, :openstack_project_id,
                 :openstack_project_domain, :openstack_user_domain, :openstack_domain_name,
                 :openstack_project_domain_id, :openstack_user_domain_id, :openstack_domain_id,
                 :openstack_identity_api_version, :openstack_application_credential_id,
                 :openstack_application_credential_secret

      ## MODELS
      #
      model_path 'fog/openstack/compute/models'
      model       :aggregate
      collection  :aggregates
      model       :availability_zone
      collection  :availability_zones
      model       :server
      collection  :servers
      model       :service
      collection  :services
      model       :image
      collection  :images
      model       :flavor
      collection  :flavors
      model       :metadatum
      collection  :metadata
      model       :address
      collection  :addresses
      model       :security_group
      collection  :security_groups
      model       :security_group_rule
      collection  :security_group_rules
      model       :key_pair
      collection  :key_pairs
      model       :tenant
      collection  :tenants
      model       :volume
      collection  :volumes
      model       :volume_attachment
      collection  :volume_attachments
      model       :network
      collection  :networks
      model       :snapshot
      collection  :snapshots
      model       :host
      collection  :hosts
      model       :server_group
      collection  :server_groups
      model       :os_interface
      collection  :os_interfaces

      ## REQUESTS
      #
      request_path 'fog/openstack/compute/requests'

      # Aggregate CRUD
      request :list_aggregates
      request :create_aggregate
      request :update_aggregate
      request :get_aggregate
      request :update_aggregate
      request :update_aggregate_metadata
      request :add_aggregate_host
      request :remove_aggregate_host
      request :delete_aggregate

      # Server CRUD
      request :list_servers
      request :list_servers_detail
      request :create_server
      request :get_server_details
      request :get_server_password
      request :update_server
      request :delete_server

      # Server Actions
      request :server_actions
      request :server_action
      request :reboot_server
      request :rebuild_server
      request :resize_server
      request :confirm_resize_server
      request :revert_resize_server
      request :pause_server
      request :unpause_server
      request :suspend_server
      request :resume_server
      request :start_server
      request :stop_server
      request :rescue_server
      request :change_server_password
      request :add_fixed_ip
      request :remove_fixed_ip
      request :server_diagnostics
      request :boot_from_snapshot
      request :reset_server_state
      request :add_security_group
      request :remove_security_group
      request :shelve_server
      request :unshelve_server
      request :shelve_offload_server

      # Server Extenstions
      request :get_console_output
      request :get_vnc_console
      request :live_migrate_server
      request :migrate_server
      request :evacuate_server

      # Server Remote Consoles
      request :remote_consoles

      # Service CRUD
      request :list_services
      request :enable_service
      request :disable_service
      request :disable_service_log_reason
      request :delete_service

      # Image CRUD
      request :list_images
      request :list_images_detail
      request :create_image
      request :get_image_details
      request :delete_image

      # Flavor CRUD
      request :list_flavors
      request :list_flavors_detail
      request :get_flavor_details
      request :create_flavor
      request :delete_flavor

      # Flavor Actions
      request :get_flavor_metadata
      request :create_flavor_metadata
      request :update_flavor_metadata
      request :delete_flavor_metadata

      # Flavor Access
      request :add_flavor_access
      request :remove_flavor_access
      request :list_tenants_with_flavor_access

      # Hypervisor
      request :get_hypervisor_statistics
      request :get_hypervisor
      request :list_hypervisors
      request :list_hypervisors_detail
      request :list_hypervisor_servers

      # Metadata
      request :list_metadata
      request :get_metadata
      request :set_metadata
      request :update_metadata
      request :delete_metadata

      # Metadatam
      request :delete_meta
      request :update_meta

      # Address
      request :list_addresses
      request :list_address_pools
      request :list_all_addresses
      request :list_private_addresses
      request :list_public_addresses
      request :get_address
      request :allocate_address
      request :associate_address
      request :release_address
      request :disassociate_address

      # Security Group
      request :list_security_groups
      request :get_security_group
      request :create_security_group
      request :create_security_group_rule
      request :delete_security_group
      request :delete_security_group_rule
      request :get_security_group_rule

      # Key Pair
      request :list_key_pairs
      request :get_key_pair
      request :create_key_pair
      request :delete_key_pair

      # Tenant
      request :set_tenant
      request :get_limits

      # Volume
      request :list_volumes
      request :list_volumes_detail
      request :create_volume
      request :get_volume_details
      request :delete_volume
      request :attach_volume
      request :detach_volume
      request :get_server_volumes
      request :list_volume_attachments

      # Snapshot
      request :create_snapshot
      request :list_snapshots
      request :list_snapshots_detail
      request :get_snapshot_details
      request :delete_snapshot

      # Usage
      request :list_usages
      request :get_usage

      # Quota
      request :get_quota
      request :get_quota_defaults
      request :update_quota

      # Hosts
      request :list_hosts
      request :get_host_details

      # Zones
      request :list_zones
      request :list_zones_detailed
      request :list_availability_zones

      # Server Group
      request :list_server_groups
      request :get_server_group
      request :create_server_group
      request :delete_server_group

      # Server Os Interfaces
      request :list_os_interfaces
      request :get_os_interface
      request :create_os_interface
      request :delete_os_interface

      class Mock
        attr_reader :auth_token
        attr_reader :auth_token_expiration
        attr_reader :current_user
        attr_reader :current_tenant

        def self.data
          @data ||= Hash.new do |hash, key|
            hash[key] = {
              :last_modified             => {
                :images          => {},
                :servers         => {},
                :key_pairs       => {},
                :security_groups => {},
                :addresses       => {}
              },
              :aggregates                => [{
                "availability_zone" => "nova",
                "created_at"        => "2012-11-16T06:22:23.032493",
                "deleted"           => false,
                "deleted_at"        => nil,
                "id"                => 1,
                "name"              => "name",
                "updated_at"        => nil
              }],
              :images                    => {
                "0e09fbd6-43c5-448a-83e9-0d3d05f9747e" => {
                  "id"       => "0e09fbd6-43c5-448a-83e9-0d3d05f9747e",
                  "name"     => "cirros-0.3.0-x86_64-blank",
                  'progress' => 100,
                  'status'   => "ACTIVE",
                  'updated'  => "",
                  'minRam'   => 0,
                  'minDisk'  => 0,
                  'metadata' => {},
                  'links'    => [{"href" => "http://nova1:8774/v1.1/admin/images/1", "rel" => "self"},
                                 {"href" => "http://nova1:8774/admin/images/2", "rel" => "bookmark"}]
                }
              },
              :servers                   => {},
              :key_pairs                 => {},
              :security_groups           => {
                '0' => {
                  "id"          => 0,
                  "tenant_id"   => Fog::Mock.random_hex(8),
                  "name"        => "default",
                  "description" => "default",
                  "rules"       => [
                    {"id"              => 0,
                     "parent_group_id" => 0,
                     "from_port"       => 68,
                     "to_port"         => 68,
                     "ip_protocol"     => "udp",
                     "ip_range"        => {"cidr" => "0.0.0.0/0"},
                     "group"           => {}},
                  ],
                },
              },
              :server_groups             => {},
              :server_security_group_map => {},
              :addresses                 => {},
              :quota                     => {
                'security_group_rules'        => 20,
                'security_groups'             => 10,
                'injected_file_content_bytes' => 10240,
                'injected_file_path_bytes'    => 256,
                'injected_files'              => 5,
                'metadata_items'              => 128,
                'floating_ips'                => 10,
                'instances'                   => 10,
                'key_pairs'                   => 10,
                'gigabytes'                   => 5000,
                'volumes'                     => 10,
                'cores'                       => 20,
                'ram'                         => 51200
              },
              :volumes                   => {},
              :snapshots                 => {},
              :os_interfaces             => [
                {
                  "fixed_ips" => [
                    {
                      "ip_address" => "192.168.1.3",
                      "subnet_id" => "f8a6e8f8-c2ec-497c-9f23-da9616de54ef"
                    }
                  ],
                  "mac_addr" => "fa:16:3e:4c:2c:30",
                  "net_id" => "3cb9bc59-5699-4588-a4b1-b87f96708bc6",
                  "port_id" => "ce531f90-199f-48c0-816c-13e38010b442",
                  "port_state" => "ACTIVE"
                }
              ]
            }
          end
        end

        def self.reset
          @data = nil
        end

        include Fog::OpenStack::Core

        def initialize(options = {})
          @auth_token = Fog::Mock.random_base64(64)
          @auth_token_expiration = (Time.now.utc + 86400).iso8601

          management_url = URI.parse(options[:openstack_auth_url])
          management_url.port = 8774
          management_url.path = '/v1.1/1'
          @openstack_management_url = management_url.to_s
        end

        def data
          self.class.data["#{@openstack_username}-#{@current_tenant}"]
        end

        def reset_data
          self.class.data.delete("#{@openstack_username}-#{@current_tenant}")
        end
      end

      class Real
        include Fog::OpenStack::Core

        def self.not_found_class
          Fog::OpenStack::Compute::NotFound
        end

        def default_service_type
          %w[compute]
        end

        def initialize(options = {})
          @supported_versions = SUPPORTED_VERSIONS
          @supported_microversion = SUPPORTED_MICROVERSION
          @microversion_key = 'X-OpenStack-Nova-API-Version'
          super
        end
      end
    end
  end
end