fog-xiaozhu 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +5 -0
  5. data/.rubocop_todo.yml +149 -0
  6. data/.ruby-gemset +1 -0
  7. data/.ruby-version +1 -0
  8. data/.travis.yml +4 -0
  9. data/CODE_OF_CONDUCT.md +13 -0
  10. data/Gemfile +4 -0
  11. data/LICENSE.txt +21 -0
  12. data/README.md +312 -0
  13. data/Rakefile +6 -0
  14. data/bin/console +14 -0
  15. data/bin/setup +7 -0
  16. data/fog-aliyun.gemspec +33 -0
  17. data/lib/fog/aliyun/compute.rb +424 -0
  18. data/lib/fog/aliyun/models/compute/eip_address.rb +57 -0
  19. data/lib/fog/aliyun/models/compute/eip_addresses.rb +28 -0
  20. data/lib/fog/aliyun/models/compute/image.rb +66 -0
  21. data/lib/fog/aliyun/models/compute/images.rb +25 -0
  22. data/lib/fog/aliyun/models/compute/route_entry.rb +26 -0
  23. data/lib/fog/aliyun/models/compute/route_entrys.rb +41 -0
  24. data/lib/fog/aliyun/models/compute/route_table.rb +30 -0
  25. data/lib/fog/aliyun/models/compute/route_tables.rb +27 -0
  26. data/lib/fog/aliyun/models/compute/security_group.rb +81 -0
  27. data/lib/fog/aliyun/models/compute/security_group_rule.rb +47 -0
  28. data/lib/fog/aliyun/models/compute/security_group_rules.rb +23 -0
  29. data/lib/fog/aliyun/models/compute/security_groups.rb +32 -0
  30. data/lib/fog/aliyun/models/compute/server.rb +70 -0
  31. data/lib/fog/aliyun/models/compute/servers.rb +42 -0
  32. data/lib/fog/aliyun/models/compute/snapshot.rb +52 -0
  33. data/lib/fog/aliyun/models/compute/snapshots.rb +38 -0
  34. data/lib/fog/aliyun/models/compute/volume.rb +101 -0
  35. data/lib/fog/aliyun/models/compute/volumes.rb +135 -0
  36. data/lib/fog/aliyun/models/compute/vpc.rb +77 -0
  37. data/lib/fog/aliyun/models/compute/vpcs.rb +80 -0
  38. data/lib/fog/aliyun/models/compute/vrouter.rb +35 -0
  39. data/lib/fog/aliyun/models/compute/vrouters.rb +61 -0
  40. data/lib/fog/aliyun/models/compute/vswitch.rb +70 -0
  41. data/lib/fog/aliyun/models/compute/vswitches.rb +80 -0
  42. data/lib/fog/aliyun/models/storage/directories.rb +39 -0
  43. data/lib/fog/aliyun/models/storage/directory.rb +48 -0
  44. data/lib/fog/aliyun/models/storage/file.rb +192 -0
  45. data/lib/fog/aliyun/models/storage/files.rb +193 -0
  46. data/lib/fog/aliyun/requests/compute/allocate_eip_address.rb +54 -0
  47. data/lib/fog/aliyun/requests/compute/allocate_public_ip_address.rb +39 -0
  48. data/lib/fog/aliyun/requests/compute/associate_eip_address.rb +49 -0
  49. data/lib/fog/aliyun/requests/compute/attach_disk.rb +79 -0
  50. data/lib/fog/aliyun/requests/compute/create_disk.rb +137 -0
  51. data/lib/fog/aliyun/requests/compute/create_image.rb +79 -0
  52. data/lib/fog/aliyun/requests/compute/create_security_group.rb +77 -0
  53. data/lib/fog/aliyun/requests/compute/create_security_group_egress_ip_rule.rb +63 -0
  54. data/lib/fog/aliyun/requests/compute/create_security_group_egress_sg_rule.rb +71 -0
  55. data/lib/fog/aliyun/requests/compute/create_security_group_ip_rule.rb +63 -0
  56. data/lib/fog/aliyun/requests/compute/create_security_group_sg_rule.rb +71 -0
  57. data/lib/fog/aliyun/requests/compute/create_server.rb +186 -0
  58. data/lib/fog/aliyun/requests/compute/create_snapshot.rb +46 -0
  59. data/lib/fog/aliyun/requests/compute/create_vpc.rb +46 -0
  60. data/lib/fog/aliyun/requests/compute/create_vpn_connection.rb +58 -0
  61. data/lib/fog/aliyun/requests/compute/create_vpn_customergateway.rb +48 -0
  62. data/lib/fog/aliyun/requests/compute/create_vswitch.rb +54 -0
  63. data/lib/fog/aliyun/requests/compute/delete_disk.rb +41 -0
  64. data/lib/fog/aliyun/requests/compute/delete_image.rb +31 -0
  65. data/lib/fog/aliyun/requests/compute/delete_security_group.rb +51 -0
  66. data/lib/fog/aliyun/requests/compute/delete_security_group_egress_ip_rule.rb +63 -0
  67. data/lib/fog/aliyun/requests/compute/delete_security_group_egress_sg_rule.rb +71 -0
  68. data/lib/fog/aliyun/requests/compute/delete_security_group_ip_rule.rb +63 -0
  69. data/lib/fog/aliyun/requests/compute/delete_security_group_sg_rule.rb +71 -0
  70. data/lib/fog/aliyun/requests/compute/delete_server.rb +48 -0
  71. data/lib/fog/aliyun/requests/compute/delete_snapshot.rb +31 -0
  72. data/lib/fog/aliyun/requests/compute/delete_vpc.rb +35 -0
  73. data/lib/fog/aliyun/requests/compute/delete_vpn_connection.rb +35 -0
  74. data/lib/fog/aliyun/requests/compute/delete_vpn_customergateway.rb +35 -0
  75. data/lib/fog/aliyun/requests/compute/delete_vswitch.rb +35 -0
  76. data/lib/fog/aliyun/requests/compute/detach_disk.rb +41 -0
  77. data/lib/fog/aliyun/requests/compute/join_security_group.rb +40 -0
  78. data/lib/fog/aliyun/requests/compute/leave_security_group.rb +40 -0
  79. data/lib/fog/aliyun/requests/compute/list_disks.rb +150 -0
  80. data/lib/fog/aliyun/requests/compute/list_eip_addresses.rb +55 -0
  81. data/lib/fog/aliyun/requests/compute/list_images.rb +82 -0
  82. data/lib/fog/aliyun/requests/compute/list_route_tables.rb +64 -0
  83. data/lib/fog/aliyun/requests/compute/list_security_group_rules.rb +73 -0
  84. data/lib/fog/aliyun/requests/compute/list_security_groups.rb +78 -0
  85. data/lib/fog/aliyun/requests/compute/list_server_types.rb +77 -0
  86. data/lib/fog/aliyun/requests/compute/list_servers.rb +71 -0
  87. data/lib/fog/aliyun/requests/compute/list_snapshots.rb +97 -0
  88. data/lib/fog/aliyun/requests/compute/list_vpcs.rb +47 -0
  89. data/lib/fog/aliyun/requests/compute/list_vpn_connections.rb +49 -0
  90. data/lib/fog/aliyun/requests/compute/list_vpn_customergateways.rb +43 -0
  91. data/lib/fog/aliyun/requests/compute/list_vpn_gateways.rb +49 -0
  92. data/lib/fog/aliyun/requests/compute/list_vrouters.rb +61 -0
  93. data/lib/fog/aliyun/requests/compute/list_vswitchs.rb +50 -0
  94. data/lib/fog/aliyun/requests/compute/list_zones.rb +44 -0
  95. data/lib/fog/aliyun/requests/compute/modify_vpc.rb +73 -0
  96. data/lib/fog/aliyun/requests/compute/modify_vswitch.rb +45 -0
  97. data/lib/fog/aliyun/requests/compute/reboot_server.rb +43 -0
  98. data/lib/fog/aliyun/requests/compute/release_eip_address.rb +29 -0
  99. data/lib/fog/aliyun/requests/compute/start_server.rb +41 -0
  100. data/lib/fog/aliyun/requests/compute/stop_server.rb +41 -0
  101. data/lib/fog/aliyun/requests/compute/unassociate_eip_address.rb +49 -0
  102. data/lib/fog/aliyun/requests/storage/copy_object.rb +39 -0
  103. data/lib/fog/aliyun/requests/storage/delete_bucket.rb +30 -0
  104. data/lib/fog/aliyun/requests/storage/delete_container.rb +35 -0
  105. data/lib/fog/aliyun/requests/storage/delete_object.rb +51 -0
  106. data/lib/fog/aliyun/requests/storage/get_bucket.rb +141 -0
  107. data/lib/fog/aliyun/requests/storage/get_container.rb +60 -0
  108. data/lib/fog/aliyun/requests/storage/get_containers.rb +64 -0
  109. data/lib/fog/aliyun/requests/storage/get_object.rb +45 -0
  110. data/lib/fog/aliyun/requests/storage/get_object_http_url.rb +43 -0
  111. data/lib/fog/aliyun/requests/storage/get_object_https_url.rb +43 -0
  112. data/lib/fog/aliyun/requests/storage/head_object.rb +34 -0
  113. data/lib/fog/aliyun/requests/storage/list_buckets.rb +40 -0
  114. data/lib/fog/aliyun/requests/storage/list_objects.rb +91 -0
  115. data/lib/fog/aliyun/requests/storage/put_bucket.rb +22 -0
  116. data/lib/fog/aliyun/requests/storage/put_container.rb +35 -0
  117. data/lib/fog/aliyun/requests/storage/put_object.rb +189 -0
  118. data/lib/fog/aliyun/storage.rb +233 -0
  119. data/lib/fog/aliyun/version.rb +5 -0
  120. data/lib/fog/aliyun.rb +19 -0
  121. data/lib/fog/bin/aliyun.rb +31 -0
  122. metadata +311 -0
@@ -0,0 +1,424 @@
1
+ module Fog
2
+ module Compute
3
+ class Aliyun < Fog::Service
4
+ recognizes :aliyun_url,
5
+ :aliyun_accesskey_id,
6
+ :aliyun_accesskey_secret,
7
+ :aliyun_region_id,
8
+ :aliyun_zone_id
9
+
10
+ ## MODELS
11
+ #
12
+ model_path 'fog/aliyun/models/compute'
13
+ model :server
14
+ collection :servers
15
+ model :image
16
+ collection :images
17
+ model :eip_address
18
+ collection :eip_addresses
19
+ model :security_group
20
+ collection :security_groups
21
+ model :security_group_rule
22
+ collection :security_group_rules
23
+ model :volume
24
+ collection :volumes
25
+ model :snapshot
26
+ collection :snapshots
27
+ model :vpc
28
+ collection :vpcs
29
+ model :vswitch
30
+ collection :vswitches
31
+ model :vrouter
32
+ collection :vrouters
33
+ model :route_table
34
+ collection :route_tables
35
+ model :route_entry
36
+ collection :route_entrys
37
+
38
+ ## REQUESTS
39
+ #
40
+ request_path 'fog/aliyun/requests/compute'
41
+
42
+ # Server CRUD
43
+ request :list_servers
44
+ request :list_server_types
45
+ request :create_server
46
+ request :delete_server
47
+
48
+ # Server Actions
49
+ request :reboot_server
50
+ request :start_server
51
+ request :stop_server
52
+
53
+ # SnapShoot CRUD
54
+ request :list_snapshots
55
+ request :create_snapshot
56
+ request :delete_snapshot
57
+
58
+ # Image CRUD
59
+ request :list_images
60
+ request :create_image
61
+ request :delete_image
62
+
63
+ # Eip
64
+ request :list_eip_addresses
65
+ request :allocate_eip_address
66
+ request :release_eip_address
67
+ request :associate_eip_address
68
+ request :unassociate_eip_address
69
+
70
+ # Security Group
71
+ request :list_security_groups
72
+ request :list_security_group_rules
73
+ request :create_security_group
74
+ request :create_security_group_ip_rule
75
+ request :create_security_group_sg_rule
76
+ request :create_security_group_egress_ip_rule
77
+ request :create_security_group_egress_sg_rule
78
+ request :delete_security_group
79
+ request :delete_security_group_ip_rule
80
+ request :delete_security_group_sg_rule
81
+ request :delete_security_group_egress_ip_rule
82
+ request :delete_security_group_egress_sg_rule
83
+ request :join_security_group
84
+ request :leave_security_group
85
+
86
+ # Zones
87
+ request :list_zones
88
+
89
+ # VPC
90
+ request :create_vpc
91
+ request :delete_vpc
92
+ request :list_vpcs
93
+ request :create_vswitch
94
+ request :delete_vswitch
95
+ request :list_vswitchs
96
+ request :modify_vpc
97
+ request :modify_vswitch
98
+ request :list_vpn_gateways
99
+ request :list_vpn_customergateways
100
+ request :list_vpn_connections
101
+ request :create_vpn_customergateway
102
+ request :create_vpn_connection
103
+ request :delete_vpn_customergateway
104
+ request :delete_vpn_connection
105
+ # VRouter
106
+ request :list_vrouters
107
+
108
+ # RouteTable
109
+ request :list_route_tables
110
+
111
+ # clouddisk
112
+ request :list_disks
113
+ request :create_disk
114
+ request :delete_disk
115
+ request :attach_disk
116
+ request :detach_disk
117
+
118
+ class Mock
119
+ attr_reader :auth_token
120
+ attr_reader :auth_token_expiration
121
+ attr_reader :current_user
122
+ attr_reader :current_tenant
123
+
124
+ def self.data
125
+ @data ||= Hash.new do |hash, key|
126
+ hash[key] = {
127
+ last_modified: {
128
+ images: {},
129
+ servers: {},
130
+ key_pairs: {},
131
+ security_groups: {},
132
+ addresses: {}
133
+ },
134
+ images: {
135
+ '0e09fbd6-43c5-448a-83e9-0d3d05f9747e' => {
136
+ 'id' => '0e09fbd6-43c5-448a-83e9-0d3d05f9747e',
137
+ 'name' => 'cirros-0.3.0-x86_64-blank',
138
+ 'progress' => 100,
139
+ 'status' => 'ACTIVE',
140
+ 'updated' => '',
141
+ 'minRam' => 0,
142
+ 'minDisk' => 0,
143
+ 'metadata' => {},
144
+ 'links' => [{ 'href' => 'http://nova1:8774/v1.1/admin/images/1', 'rel' => 'self' }, { 'href' => 'http://nova1:8774/admin/images/2', 'rel' => 'bookmark' }]
145
+ }
146
+ },
147
+ servers: {},
148
+ key_pairs: {},
149
+ security_groups: {
150
+ '0' => {
151
+ 'id' => 0,
152
+ 'tenant_id' => Fog::Mock.random_hex(8),
153
+ 'name' => 'default',
154
+ 'description' => 'default',
155
+ 'rules' => [
156
+ { 'id' => 0,
157
+ 'parent_group_id' => 0,
158
+ 'from_port' => 68,
159
+ 'to_port' => 68,
160
+ 'ip_protocol' => 'udp',
161
+ 'ip_range' => { 'cidr' => '0.0.0.0/0' },
162
+ 'group' => {} }
163
+ ]
164
+ }
165
+ },
166
+ server_security_group_map: {},
167
+ addresses: {},
168
+ quota: {
169
+ 'security_group_rules' => 20,
170
+ 'security_groups' => 10,
171
+ 'injected_file_content_bytes' => 10_240,
172
+ 'injected_file_path_bytes' => 256,
173
+ 'injected_files' => 5,
174
+ 'metadata_items' => 128,
175
+ 'floating_ips' => 10,
176
+ 'instances' => 10,
177
+ 'key_pairs' => 10,
178
+ 'gigabytes' => 5000,
179
+ 'volumes' => 10,
180
+ 'cores' => 20,
181
+ 'ram' => 51_200
182
+ },
183
+ volumes: {}
184
+ }
185
+ end
186
+ end
187
+
188
+ def self.reset
189
+ @data = nil
190
+ end
191
+
192
+ def initialize(options = {})
193
+ @openstack_username = options[:openstack_username]
194
+ @openstack_user_domain = options[:openstack_user_domain] || options[:openstack_domain]
195
+ @openstack_project_domain = options[:openstack_project_domain] || options[:openstack_domain] || 'Default'
196
+ @openstack_auth_uri = URI.parse(options[:openstack_auth_url])
197
+
198
+ @current_tenant = options[:openstack_tenant]
199
+ @current_tenant_id = options[:openstack_tenant_id]
200
+
201
+ @auth_token = Fog::Mock.random_base64(64)
202
+ @auth_token_expiration = (Time.now.utc + 86_400).iso8601
203
+
204
+ management_url = URI.parse(options[:openstack_auth_url])
205
+ management_url.port = 8774
206
+ management_url.path = '/v1.1/1'
207
+ @openstack_management_url = management_url.to_s
208
+
209
+ identity_public_endpoint = URI.parse(options[:openstack_auth_url])
210
+ identity_public_endpoint.port = 5000
211
+ @openstack_identity_public_endpoint = identity_public_endpoint.to_s
212
+ end
213
+
214
+ def data
215
+ self.class.data["#{@openstack_username}-#{@current_tenant}"]
216
+ end
217
+
218
+ def reset_data
219
+ self.class.data.delete("#{@openstack_username}-#{@current_tenant}")
220
+ end
221
+
222
+ def credentials
223
+ { provider: 'openstack',
224
+ openstack_auth_url: @openstack_auth_uri.to_s,
225
+ openstack_auth_token: @auth_token,
226
+ openstack_management_url: @openstack_management_url,
227
+ openstack_identity_endpoint: @openstack_identity_public_endpoint }
228
+ end
229
+ end
230
+
231
+ class Real
232
+ # Initialize connection to ECS
233
+ #
234
+ # ==== Notes
235
+ # options parameter must include values for :aliyun_url, :aliyun_accesskey_id,
236
+ # :aliyun_secret_access_key, :aliyun_region_id and :aliyun_zone_id in order to create a connection.
237
+ # if you haven't set these values in the configuration file.
238
+ #
239
+ # ==== Examples
240
+ # sdb = Fog::Compute.new(:provider=>'aliyun',
241
+ # :aliyun_accesskey_id => your_:aliyun_accesskey_id,
242
+ # :aliyun_secret_access_key => your_aliyun_secret_access_key
243
+ # )
244
+ #
245
+ # ==== Parameters
246
+ # * options<~Hash> - config arguments for connection. Defaults to {}.
247
+ #
248
+ # ==== Returns
249
+ # * ECS object with connection to aliyun.
250
+ attr_reader :aliyun_accesskey_id
251
+ attr_reader :aliyun_accesskey_secret
252
+ attr_reader :aliyun_region_id
253
+ attr_reader :aliyun_url
254
+ attr_reader :aliyun_zone_id
255
+
256
+ def initialize(options = {})
257
+ # initialize the parameters
258
+ @aliyun_url = options[:aliyun_url]
259
+ @aliyun_accesskey_id = options[:aliyun_accesskey_id]
260
+ @aliyun_accesskey_secret = options[:aliyun_accesskey_secret]
261
+ @aliyun_region_id = options[:aliyun_region_id]
262
+ @aliyun_zone_id = options[:aliyun_zone_id]
263
+
264
+ # check for the parameters
265
+ missing_credentials = []
266
+ missing_credentials << :aliyun_accesskey_id unless @aliyun_accesskey_id
267
+ missing_credentials << :aliyun_accesskey_secret unless @aliyun_accesskey_secret
268
+ missing_credentials << :aliyun_region_id unless @aliyun_region_id
269
+ missing_credentials << :aliyun_url unless @aliyun_url
270
+ missing_credentials << :aliyun_zone_id unless @aliyun_zone_id
271
+ raise ArgumentError, "Missing required arguments: #{missing_credentials.join(', ')}" unless missing_credentials.empty?
272
+
273
+ @connection_options = options[:connection_options] || {}
274
+
275
+ uri = URI.parse(@aliyun_url)
276
+ @host = uri.host
277
+ @path = uri.path
278
+ @port = uri.port
279
+ @scheme = uri.scheme
280
+
281
+ vpcuri = URI.parse("https://vpc.aliyuncs.com")
282
+ @vpchost = vpcuri.host
283
+ @vpcpath = vpcuri.path
284
+ @vpcport = vpcuri.port
285
+ @vpcscheme = vpcuri.scheme
286
+
287
+ @persistent = options[:persistent] || false
288
+ @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
289
+ @VPCconnection = Fog::Core::Connection.new("#{@vpcscheme}://#{@vpchost}:#{@vpcport}", @persistent, @connection_options)
290
+ end
291
+
292
+ def reload
293
+ @connection.reset
294
+ @VPCconnection.reset
295
+ end
296
+
297
+ def request(params)
298
+ begin
299
+ response = @connection.request(params.merge(headers: {
300
+ 'Content-Type' => 'application/json',
301
+ 'Accept' => 'application/json',
302
+ 'X-Auth-Token' => @auth_token
303
+ }.merge!(params[:headers] || {}),
304
+ path: "#{@path}/#{params[:path]}",
305
+ query: params[:query]))
306
+ rescue Excon::Errors::HTTPStatusError => error
307
+ raise case error
308
+ when Excon::Errors::NotFound
309
+ Fog::Compute::Aliyun::NotFound.slurp(error)
310
+ else
311
+ error
312
+ end
313
+ end
314
+
315
+ if !response.body.empty? && response.get_header('Content-Type') == 'application/json'
316
+ response.body = Fog::JSON.decode(response.body)
317
+ end
318
+
319
+ response
320
+ end
321
+
322
+ def VPCrequest(params)
323
+ begin
324
+ response = @VPCconnection.request(params.merge(headers: {
325
+ 'Content-Type' => 'application/json',
326
+ 'Accept' => 'application/json',
327
+ 'X-Auth-Token' => @auth_token
328
+ }.merge!(params[:headers] || {}),
329
+ path: "#{@path}/#{params[:path]}",
330
+ query: params[:query]))
331
+ rescue Excon::Errors::HTTPStatusError => error
332
+ raise case error
333
+ when Excon::Errors::NotFound
334
+ Fog::Compute::Aliyun::NotFound.slurp(error)
335
+ else
336
+ error
337
+ end
338
+ end
339
+
340
+ if !response.body.empty? && response.get_header('Content-Type') == 'application/json'
341
+ response.body = Fog::JSON.decode(response.body)
342
+ end
343
+
344
+ response
345
+ end
346
+
347
+ # operation compute-- default URL
348
+ def defaultAliyunUri(action, sigNonce, time)
349
+ parTimeFormat = time.strftime('%Y-%m-%dT%H:%M:%SZ')
350
+ urlTimeFormat = URI.encode(parTimeFormat, ':')
351
+ '?Format=JSON&AccessKeyId=' + @aliyun_accesskey_id + '&Action=' + action + '&SignatureMethod=HMAC-SHA1&RegionId=' + @aliyun_region_id + '&SignatureNonce=' + sigNonce + '&SignatureVersion=1.0&Version=2014-05-26&Timestamp=' + urlTimeFormat
352
+ end
353
+
354
+ def defaultAliyunVPCUri(action, sigNonce, time)
355
+ parTimeFormat = time.strftime('%Y-%m-%dT%H:%M:%SZ')
356
+ urlTimeFormat = URI.encode(parTimeFormat, ':')
357
+ '?Format=JSON&AccessKeyId=' + @aliyun_accesskey_id + '&Action=' + action + '&SignatureMethod=HMAC-SHA1&RegionId=' + @aliyun_region_id + '&SignatureNonce=' + sigNonce + '&SignatureVersion=1.0&Version=2016-04-28&Timestamp=' + urlTimeFormat
358
+ end
359
+
360
+ # generate random num
361
+ def randonStr
362
+ numStr = rand(100_000).to_s
363
+ timeStr = Time.now.to_f.to_s
364
+ ranStr = timeStr + '-' + numStr
365
+ ranStr
366
+ end
367
+
368
+ # operation compute--collection of default parameters
369
+ def defalutParameters(action, sigNonce, time)
370
+ parTimeFormat = time.strftime('%Y-%m-%dT%H:%M:%SZ')
371
+ para = {
372
+ 'Format' => 'JSON',
373
+ 'Version' => '2014-05-26',
374
+ 'Action' => action,
375
+ 'AccessKeyId' => @aliyun_accesskey_id,
376
+ 'SignatureVersion' => '1.0',
377
+ 'SignatureMethod' => 'HMAC-SHA1',
378
+ 'SignatureNonce' => sigNonce,
379
+ 'RegionId' => @aliyun_region_id,
380
+ 'Timestamp' => parTimeFormat
381
+ }
382
+ para
383
+ end
384
+
385
+ def defalutVPCParameters(action, sigNonce, time)
386
+ parTimeFormat = time.strftime('%Y-%m-%dT%H:%M:%SZ')
387
+ para = {
388
+ 'Format' => 'JSON',
389
+ 'Version' => '2016-04-28',
390
+ 'Action' => action,
391
+ 'AccessKeyId' => @aliyun_accesskey_id,
392
+ 'SignatureVersion' => '1.0',
393
+ 'SignatureMethod' => 'HMAC-SHA1',
394
+ 'SignatureNonce' => sigNonce,
395
+ 'RegionId' => @aliyun_region_id,
396
+ 'Timestamp' => parTimeFormat
397
+ }
398
+ para
399
+ end
400
+
401
+ # compute signature
402
+ def sign(accessKeySecret, parameters)
403
+ sortedParameters = parameters.sort
404
+ canonicalizedQueryString = ''
405
+ sortedParameters.each do |k, v|
406
+ canonicalizedQueryString += '&' + URI.encode(k, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ') + '=' + URI.encode(v, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
407
+ end
408
+
409
+ canonicalizedQueryString[0] = ''
410
+ stringToSign = 'GET&%2F&' + URI.encode(canonicalizedQueryString, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
411
+ key = accessKeySecret + '&'
412
+
413
+ digVer = OpenSSL::Digest.new('sha1')
414
+ digest = OpenSSL::HMAC.digest(digVer, key, stringToSign)
415
+ signature = Base64.encode64(digest)
416
+ signature[-1] = ''
417
+ encodedSig = URI.encode(signature, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
418
+
419
+ encodedSig
420
+ end
421
+ end
422
+ end
423
+ end
424
+ end
@@ -0,0 +1,57 @@
1
+ require 'fog/core/model'
2
+ module Fog
3
+ module Compute
4
+ class Aliyun
5
+ class EipAddress < Fog::Model
6
+ identity :id, aliases: 'AllocationId'
7
+
8
+ attribute :allocated_at, aliases: 'AllocationTime'
9
+ attribute :bandwidth, aliases: 'Bandwidth'
10
+ attribute :server_id, aliases: 'InstanceId'
11
+ attribute :charge_type, aliases: 'InternetChargeType'
12
+ attribute :ip_address, aliases: %w(IpAddress EipAddress)
13
+ attribute :opertion_locks, aliases: 'OperationLocks'
14
+ attribute :region_id, aliases: 'RegionId'
15
+ attribute :state, aliases: 'Status'
16
+
17
+ def destroy
18
+ requires :id
19
+ service.release_eip_address(id)
20
+ true
21
+ end
22
+
23
+ def ready?
24
+ requires :state
25
+ state == 'Available'
26
+ end
27
+
28
+ def save(options = {})
29
+ # raise Fog::Errors::Error.new('Resaving an existing object may create a duplicate') if persisted?
30
+ # requires :availability_zone
31
+ options[:bandwidth] = bandwidth if bandwidth
32
+ options[:internet_charge_type] = charge_type if charge_type
33
+
34
+ data = Fog::JSON.decode(service.allocate_eip_address(options).body)
35
+ merge_attributes(data)
36
+ true
37
+ end
38
+
39
+ def associate(new_server, options = {})
40
+ if persisted?
41
+ @server = nil
42
+ self.server_id = new_server.id
43
+ service.associate_eip_address(server_id, id, options)
44
+ else
45
+ @server = new_server
46
+ end
47
+ end
48
+
49
+ def disassociate(new_server, options = {})
50
+ @server = nil
51
+ self.server_id = new_server.id
52
+ service.unassociate_eip_address(server_id, id, options) if persisted?
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,28 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/aliyun/models/compute/eip_address'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Aliyun
7
+ class EipAddresses < Fog::Collection
8
+ model Fog::Compute::Aliyun::EipAddress
9
+
10
+ def all(filters_arg = {})
11
+ data = Fog::JSON.decode(service.list_eip_addresses(filters_arg).body)['EipAddresses']['EipAddress']
12
+ load(data)
13
+ # load(data['volumeSet'])
14
+ # if server
15
+ # self.replace(self.select {|volume| volume.server_id == server.id})
16
+ # end
17
+ # self
18
+ end
19
+
20
+ def get(allocation_id)
21
+ if allocation_id
22
+ self.class.new(service: service).all(allocation_id: allocation_id)[0]
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,66 @@
1
+ require 'fog/core/model'
2
+ module Fog
3
+ module Compute
4
+ class Aliyun
5
+ class Image < Fog::Model
6
+ identity :id, aliases: 'ImageId'
7
+
8
+ attribute :description, aliases: 'Description'
9
+ attribute :product_code, aliases: 'ProductCode'
10
+ attribute :os_type, aliases: 'OSType'
11
+ attribute :architecture, aliases: 'Architecture'
12
+ attribute :os_name, aliases: 'OSName'
13
+ attribute :disk_device_mappings, aliases: 'DiskDeviceMappings'
14
+ attribute :owner_alias, aliases: 'ImageOwnerAlias'
15
+ attribute :progress, aliases: 'Progress'
16
+ attribute :usage, aliases: 'Usage'
17
+ attribute :created_at, aliases: 'CreationTime'
18
+ attribute :tags, aliases: 'Tags'
19
+ attribute :version, aliases: 'ImageVersion'
20
+ attribute :state, aliases: 'Status'
21
+ attribute :name, aliases: 'ImageName'
22
+ attribute :is_self_shared, aliases: 'IsSelfShared'
23
+ attribute :is_copied, aliases: 'IsCopied'
24
+ attribute :is_subscribed, aliases: 'IsSubscribed'
25
+ attribute :platform, aliases: 'Platform'
26
+ attribute :size, aliases: 'Size'
27
+ attribute :snapshot_id, aliases: 'SnapshotId'
28
+
29
+ def initialize(attributes)
30
+ self.snapshot_id = attributes['DiskDeviceMappings']['DiskDeviceMapping'][0]['SnapshotId']
31
+ super
32
+ end
33
+
34
+ def save(options = {})
35
+ requires :snapshot_id
36
+ options[:name] = name if name
37
+ options[:description] = description if description
38
+ data = Fog::JSON.decode(service.create_image(snapshot_id, options).body)
39
+ merge_attributes(data)
40
+ true
41
+ end
42
+
43
+ def destroy
44
+ requires :id
45
+ service.delete_image(id)
46
+ true
47
+ end
48
+
49
+ def ready?
50
+ state == 'Available'
51
+ end
52
+
53
+ def snapshot
54
+ requires :snapshot_id
55
+ Fog::Compute::Aliyun::Snapshots.new(service: service).all(snapshotIds: [snapshot_id])[0]
56
+ end
57
+
58
+ private
59
+
60
+ def snapshot=(new_snapshot)
61
+ self.snapshot_id = new_snapshot.id
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,25 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/aliyun/models/compute/image'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Aliyun
7
+ class Images < Fog::Collection
8
+ model Fog::Compute::Aliyun::Image
9
+
10
+ def all(filters_arg = {})
11
+ unless filters_arg.is_a?(Hash)
12
+ Fog::Logger.deprecation("all with #{filters_arg.class} param is deprecated, use all('diskIds' => []) instead [light_black](#{caller.first})[/]")
13
+ filters_arg = { imageId: filters_arg }
14
+ end
15
+ data = Fog::JSON.decode(service.list_images(filters_arg).body)['Images']['Image']
16
+ load(data)
17
+ end
18
+
19
+ def get(image_id)
20
+ self.class.new(service: service).all(imageId: image_id)[0] if image_id
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,26 @@
1
+ require 'fog/core/model'
2
+ module Fog
3
+ module Compute
4
+ class Aliyun
5
+ class RouteEntry < Fog::Model
6
+ # "RouteTables"=>{"RouteTable"=>[
7
+ # {"CreationTime"=>"2015-08-03T11:23:35Z", "RouteEntrys"=>{"RouteEntry"=>[
8
+ # {"Status"=>"Available", "Type"=>"System", "InstanceId"=>"", "RouteTableId"=>"vtb-2504onoxh", "DestinationCidrBlock"=>"172.16.0.0/24"},
9
+ # {"Status"=>"Available", "Type"=>"System", "InstanceId"=>"", "RouteTableId"=>"vtb-2504onoxh", "DestinationCidrBlock"=>"172.16.1.0/24"},
10
+ # {"Status"=>"Available", "Type"=>"System", "InstanceId"=>"", "RouteTableId"=>"vtb-2504onoxh", "DestinationCidrBlock"=>"172.16.2.0/24"},
11
+ # {"Status"=>"Available", "Type"=>"System", "InstanceId"=>"", "RouteTableId"=>"vtb-2504onoxh", "DestinationCidrBlock"=>"100.64.0.0/10"},
12
+ # {"Status"=>"Available", "Type"=>"System", "InstanceId"=>"", "RouteTableId"=>"vtb-2504onoxh", "DestinationCidrBlock"=>"10.0.0.0/8"}]},
13
+ # "RouteTableId"=>"vtb-2504onoxh", "RouteTableType"=>"System", "VRouterId"=>"vrt-25azmd2wm"}]}
14
+ identity :cidr_block, aliases: 'DestinationCidrBlock'
15
+ attribute :state, aliases: 'Status'
16
+ attribute :server_id, aliases: 'InstanceId'
17
+ attribute :type, aliases: 'Type'
18
+ attribute :route_table_id, aliases: 'RouteTableId'
19
+
20
+ # def save
21
+ # requires :cidr_block,:route_table_id
22
+ # if(cidr_block)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,41 @@
1
+ require 'fog/core/collection'
2
+ require 'fog/aliyun/models/compute/route_entry'
3
+
4
+ module Fog
5
+ module Compute
6
+ class Aliyun
7
+ class RouteEntrys < Fog::Collection
8
+ attribute :route_table
9
+
10
+ model Fog::Compute::Aliyun::RouteEntry
11
+
12
+ def all(options = {})
13
+ requires :route_table
14
+ options[:routeTableId] = route_table.id
15
+ data = Fog::JSON.decode(service.list_route_tables(route_table.v_router_id, options).body)['RouteTables']['RouteTable'][0]['RouteEntrys']['RouteEntry']
16
+ load(data)
17
+ end
18
+
19
+ def get(cidr_block)
20
+ requires :route_table
21
+ data = self.class.new(service: service, route_table: route_table).all
22
+ result = nil
23
+ data.each do |i|
24
+ if i.cidr_block == cidr_block
25
+ result = i
26
+ break
27
+ end
28
+ end
29
+ result
30
+ end
31
+
32
+ # def get(routeTableId)
33
+ # requires :v_router
34
+ # if routeTableId
35
+ # self.class.new(:service => service,:v_router=>v_router).all(:routeTableId=>routeTableId)[0]
36
+ # end
37
+ # end
38
+ end
39
+ end
40
+ end
41
+ end