qingcloud-sdk 0.4.1 → 2.0.0.pre.alpha.1

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.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +201 -21
  3. data/README.md +141 -61
  4. data/bin/console +3 -3
  5. data/lib/qingcloud/sdk.rb +16 -14
  6. data/lib/qingcloud/sdk/general/config.rb +70 -0
  7. data/lib/qingcloud/sdk/general/contract.rb +28 -17
  8. data/lib/qingcloud/sdk/general/default/config.yaml +13 -0
  9. data/lib/qingcloud/sdk/general/error.rb +41 -32
  10. data/lib/qingcloud/sdk/general/logger.rb +54 -0
  11. data/lib/qingcloud/sdk/request/preprocessor.rb +81 -0
  12. data/lib/qingcloud/sdk/request/request.rb +80 -0
  13. data/lib/qingcloud/sdk/request/signer.rb +53 -0
  14. data/lib/qingcloud/sdk/service/cache.rb +1005 -0
  15. data/lib/qingcloud/sdk/service/dns_alias.rb +150 -0
  16. data/lib/qingcloud/sdk/service/eip.rb +389 -0
  17. data/lib/qingcloud/sdk/service/image.rb +304 -0
  18. data/lib/qingcloud/sdk/service/instance.rb +585 -0
  19. data/lib/qingcloud/sdk/service/job.rb +71 -0
  20. data/lib/qingcloud/sdk/service/key_pair.rb +257 -0
  21. data/lib/qingcloud/sdk/service/load_balancer.rb +1119 -0
  22. data/lib/qingcloud/sdk/service/mongo.rb +566 -0
  23. data/lib/qingcloud/sdk/service/qingcloud.rb +185 -0
  24. data/lib/qingcloud/sdk/service/rdb.rb +751 -0
  25. data/lib/qingcloud/sdk/service/router.rb +778 -0
  26. data/lib/qingcloud/sdk/service/security_group.rb +645 -0
  27. data/lib/qingcloud/sdk/service/shared_storage.rb +666 -0
  28. data/lib/qingcloud/sdk/service/snapshot.rb +283 -0
  29. data/lib/qingcloud/sdk/service/tag.rb +227 -0
  30. data/lib/qingcloud/sdk/service/user_data.rb +61 -0
  31. data/lib/qingcloud/sdk/service/volume.rb +296 -0
  32. data/lib/qingcloud/sdk/service/vxnet.rb +295 -0
  33. data/lib/qingcloud/sdk/version.rb +19 -5
  34. metadata +98 -29
  35. data/.gitignore +0 -13
  36. data/.rspec +0 -2
  37. data/.travis.yml +0 -3
  38. data/Rakefile +0 -6
  39. data/lib/qingcloud/sdk/iaas/connector.rb +0 -99
  40. data/lib/qingcloud/sdk/iaas/foundation.rb +0 -73
  41. data/lib/qingcloud/sdk/iaas/service.rb +0 -1274
  42. data/lib/qingcloud/sdk/template/config.json +0 -4
  43. data/lib/qingcloud/sdk/utility/file_manager.rb +0 -43
  44. data/lib/qingcloud/sdk/utility/json_parser.rb +0 -41
  45. data/lib/qingcloud/sdk/utility/logger.rb +0 -19
  46. data/qingcloud-sdk.gemspec +0 -31
@@ -0,0 +1,304 @@
1
+ # +-------------------------------------------------------------------------
2
+ # | Copyright (C) 2016 Yunify, Inc.
3
+ # +-------------------------------------------------------------------------
4
+ # | Licensed under the Apache License, Version 2.0 (the "License");
5
+ # | you may not use this work except in compliance with the License.
6
+ # | You may obtain a copy of the License in the LICENSE file, or 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 'active_support/core_ext/hash/keys'
18
+
19
+ module QingCloud
20
+ module SDK
21
+ class ImageService
22
+ attr_accessor :config, :properties
23
+
24
+ def initialize(config, properties)
25
+ self.config = config
26
+ self.properties = properties.deep_symbolize_keys
27
+ end
28
+
29
+ # Documentation URL: https://docs.qingcloud.com/api/image/capture_instance.html
30
+ def capture_instance(image_name: '', instance: '')
31
+ input = {
32
+ config: config,
33
+ properties: properties,
34
+ api_name: 'CaptureInstance',
35
+ request_method: 'GET',
36
+ request_params: {
37
+ 'image_name' => image_name,
38
+ 'instance' => instance,
39
+ },
40
+ }
41
+
42
+ capture_instance_input_validate input
43
+
44
+ request = Request.new input
45
+ request.send
46
+ end
47
+
48
+ private
49
+
50
+ def capture_instance_input_validate(input)
51
+ input.deep_stringify_keys!
52
+
53
+ unless !input['request_params']['instance'].nil? && !input['request_params']['instance'].to_s.empty?
54
+ raise ParameterRequiredError.new('instance', 'CaptureInstanceInput')
55
+ end
56
+ end
57
+
58
+ public
59
+
60
+ # Documentation URL: https://docs.qingcloud.com/api/image/delete_images.html
61
+ def delete_images(images: [])
62
+ input = {
63
+ config: config,
64
+ properties: properties,
65
+ api_name: 'DeleteImages',
66
+ request_method: 'GET',
67
+ request_params: {
68
+ 'images' => images,
69
+ },
70
+ }
71
+
72
+ delete_images_input_validate input
73
+
74
+ request = Request.new input
75
+ request.send
76
+ end
77
+
78
+ private
79
+
80
+ def delete_images_input_validate(input)
81
+ input.deep_stringify_keys!
82
+
83
+ unless !input['request_params']['images'].nil? && !input['request_params']['images'].to_s.empty?
84
+ raise ParameterRequiredError.new('images', 'DeleteImagesInput')
85
+ end
86
+ end
87
+
88
+ public
89
+
90
+ # Documentation URL: https://docs.qingcloud.com/api/image/describe-image-users.html
91
+ def describe_image_users(image_id: '', limit: nil, offset: nil)
92
+ input = {
93
+ config: config,
94
+ properties: properties,
95
+ api_name: 'DescribeImageUsers',
96
+ request_method: 'GET',
97
+ request_params: {
98
+ 'image_id' => image_id,
99
+ 'limit' => limit,
100
+ 'offset' => offset,
101
+ },
102
+ }
103
+
104
+ describe_image_users_input_validate input
105
+
106
+ request = Request.new input
107
+ request.send
108
+ end
109
+
110
+ private
111
+
112
+ def describe_image_users_input_validate(input)
113
+ input.deep_stringify_keys!
114
+
115
+ unless !input['request_params']['image_id'].nil? && !input['request_params']['image_id'].to_s.empty?
116
+ raise ParameterRequiredError.new('image_id', 'DescribeImageUsersInput')
117
+ end
118
+ end
119
+
120
+ public
121
+
122
+ # Documentation URL: https://docs.qingcloud.com/api/image/describe_images.html
123
+ def describe_images(images: [], limit: nil, offset: nil, os_family: '', processor_type: '', provider: '', search_word: '', status: [], verbose: nil, visibility: '')
124
+ input = {
125
+ config: config,
126
+ properties: properties,
127
+ api_name: 'DescribeImages',
128
+ request_method: 'GET',
129
+ request_params: {
130
+ 'images' => images,
131
+ 'limit' => limit,
132
+ 'offset' => offset,
133
+ 'os_family' => os_family,
134
+ 'processor_type' => processor_type, # processor_type's available values: 64bit, 32bit
135
+ 'provider' => provider, # provider's available values: system, self
136
+ 'search_word' => search_word,
137
+ 'status' => status,
138
+ 'verbose' => verbose, # verbose's available values: 0
139
+ 'visibility' => visibility, # visibility's available values: public, private
140
+ },
141
+ }
142
+
143
+ describe_images_input_validate input
144
+
145
+ request = Request.new input
146
+ request.send
147
+ end
148
+
149
+ private
150
+
151
+ def describe_images_input_validate(input)
152
+ input.deep_stringify_keys!
153
+
154
+ if input['request_params']['processor_type'] && !input['request_params']['processor_type'].to_s.empty?
155
+ processor_type_valid_values = %w(64bit 32bit)
156
+ unless processor_type_valid_values.include? input['request_params']['processor_type'].to_s
157
+ raise ParameterValueNotAllowedError.new(
158
+ 'processor_type',
159
+ input['request_params']['processor_type'],
160
+ processor_type_valid_values,
161
+ )
162
+ end
163
+ end
164
+
165
+ if input['request_params']['provider'] && !input['request_params']['provider'].to_s.empty?
166
+ provider_valid_values = %w(system self)
167
+ unless provider_valid_values.include? input['request_params']['provider'].to_s
168
+ raise ParameterValueNotAllowedError.new(
169
+ 'provider',
170
+ input['request_params']['provider'],
171
+ provider_valid_values,
172
+ )
173
+ end
174
+ end
175
+
176
+ if input['request_params']['verbose'] && !input['request_params']['verbose'].to_s.empty?
177
+ verbose_valid_values = ['0']
178
+ unless verbose_valid_values.include? input['request_params']['verbose'].to_s
179
+ raise ParameterValueNotAllowedError.new(
180
+ 'verbose',
181
+ input['request_params']['verbose'],
182
+ verbose_valid_values,
183
+ )
184
+ end
185
+ end
186
+
187
+ if input['request_params']['visibility'] && !input['request_params']['visibility'].to_s.empty?
188
+ visibility_valid_values = %w(public private)
189
+ unless visibility_valid_values.include? input['request_params']['visibility'].to_s
190
+ raise ParameterValueNotAllowedError.new(
191
+ 'visibility',
192
+ input['request_params']['visibility'],
193
+ visibility_valid_values,
194
+ )
195
+ end
196
+ end
197
+ end
198
+
199
+ public
200
+
201
+ # Documentation URL: https://docs.qingcloud.com/api/image/grant-image-to-users.html
202
+ def grant_image_to_users(image: '', users: [])
203
+ input = {
204
+ config: config,
205
+ properties: properties,
206
+ api_name: 'GrantImageToUsers',
207
+ request_method: 'GET',
208
+ request_params: {
209
+ 'image' => image,
210
+ 'users' => users,
211
+ },
212
+ }
213
+
214
+ grant_image_to_users_input_validate input
215
+
216
+ request = Request.new input
217
+ request.send
218
+ end
219
+
220
+ private
221
+
222
+ def grant_image_to_users_input_validate(input)
223
+ input.deep_stringify_keys!
224
+
225
+ unless !input['request_params']['image'].nil? && !input['request_params']['image'].to_s.empty?
226
+ raise ParameterRequiredError.new('image', 'GrantImageToUsersInput')
227
+ end
228
+
229
+ unless !input['request_params']['users'].nil? && !input['request_params']['users'].to_s.empty?
230
+ raise ParameterRequiredError.new('users', 'GrantImageToUsersInput')
231
+ end
232
+ end
233
+
234
+ public
235
+
236
+ # Documentation URL: https://docs.qingcloud.com/api/image/modify_image_attributes.html
237
+ def modify_image_attributes(description: '', image: '', image_name: '')
238
+ input = {
239
+ config: config,
240
+ properties: properties,
241
+ api_name: 'ModifyImageAttributes',
242
+ request_method: 'GET',
243
+ request_params: {
244
+ 'description' => description,
245
+ 'image' => image,
246
+ 'image_name' => image_name,
247
+ },
248
+ }
249
+
250
+ modify_image_attributes_input_validate input
251
+
252
+ request = Request.new input
253
+ request.send
254
+ end
255
+
256
+ private
257
+
258
+ def modify_image_attributes_input_validate(input)
259
+ input.deep_stringify_keys!
260
+
261
+ unless !input['request_params']['image'].nil? && !input['request_params']['image'].to_s.empty?
262
+ raise ParameterRequiredError.new('image', 'ModifyImageAttributesInput')
263
+ end
264
+ end
265
+
266
+ public
267
+
268
+ # Documentation URL: https://docs.qingcloud.com/api/image/revoke-image-from-users.html
269
+ def revoke_image_from_users(image: '', users: [])
270
+ input = {
271
+ config: config,
272
+ properties: properties,
273
+ api_name: 'RevokeImageFromUsers',
274
+ request_method: 'GET',
275
+ request_params: {
276
+ 'image' => image,
277
+ 'users' => users,
278
+ },
279
+ }
280
+
281
+ revoke_image_from_users_input_validate input
282
+
283
+ request = Request.new input
284
+ request.send
285
+ end
286
+
287
+ private
288
+
289
+ def revoke_image_from_users_input_validate(input)
290
+ input.deep_stringify_keys!
291
+
292
+ unless !input['request_params']['image'].nil? && !input['request_params']['image'].to_s.empty?
293
+ raise ParameterRequiredError.new('image', 'RevokeImageFromUsersInput')
294
+ end
295
+
296
+ unless !input['request_params']['users'].nil? && !input['request_params']['users'].to_s.empty?
297
+ raise ParameterRequiredError.new('users', 'RevokeImageFromUsersInput')
298
+ end
299
+ end
300
+
301
+ public
302
+ end
303
+ end
304
+ end
@@ -0,0 +1,585 @@
1
+ # +-------------------------------------------------------------------------
2
+ # | Copyright (C) 2016 Yunify, Inc.
3
+ # +-------------------------------------------------------------------------
4
+ # | Licensed under the Apache License, Version 2.0 (the "License");
5
+ # | you may not use this work except in compliance with the License.
6
+ # | You may obtain a copy of the License in the LICENSE file, or 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 'active_support/core_ext/hash/keys'
18
+
19
+ module QingCloud
20
+ module SDK
21
+ class InstanceService
22
+ attr_accessor :config, :properties
23
+
24
+ def initialize(config, properties)
25
+ self.config = config
26
+ self.properties = properties.deep_symbolize_keys
27
+ end
28
+
29
+ # Documentation URL: https://docs.qingcloud.com/api/instance/describe_instance_types.html
30
+ def describe_instance_types(instance_types: [])
31
+ input = {
32
+ config: config,
33
+ properties: properties,
34
+ api_name: 'DescribeInstanceTypes',
35
+ request_method: 'GET',
36
+ request_params: {
37
+ 'instance_types' => instance_types,
38
+ },
39
+ }
40
+
41
+ describe_instance_types_input_validate input
42
+
43
+ request = Request.new input
44
+ request.send
45
+ end
46
+
47
+ private
48
+
49
+ def describe_instance_types_input_validate(input)
50
+ input.deep_stringify_keys!
51
+ end
52
+
53
+ public
54
+
55
+ # Documentation URL: https://docs.qingcloud.com/api/instance/describe_instances.html
56
+ def describe_instances(image_id: [], instance_class: nil, instance_type: [], instances: [], limit: nil, offset: nil, search_word: '', status: [], tags: [], verbose: nil)
57
+ input = {
58
+ config: config,
59
+ properties: properties,
60
+ api_name: 'DescribeInstances',
61
+ request_method: 'GET',
62
+ request_params: {
63
+ 'image_id' => image_id,
64
+ 'instance_class' => instance_class, # instance_class's available values: 0, 1
65
+ 'instance_type' => instance_type,
66
+ 'instances' => instances,
67
+ 'limit' => limit,
68
+ 'offset' => offset,
69
+ 'search_word' => search_word,
70
+ 'status' => status,
71
+ 'tags' => tags,
72
+ 'verbose' => verbose, # verbose's available values: 0, 1
73
+ },
74
+ }
75
+
76
+ describe_instances_input_validate input
77
+
78
+ request = Request.new input
79
+ request.send
80
+ end
81
+
82
+ private
83
+
84
+ def describe_instances_input_validate(input)
85
+ input.deep_stringify_keys!
86
+
87
+ if input['request_params']['instance_class'] && !input['request_params']['instance_class'].to_s.empty?
88
+ instance_class_valid_values = %w(0 1)
89
+ unless instance_class_valid_values.include? input['request_params']['instance_class'].to_s
90
+ raise ParameterValueNotAllowedError.new(
91
+ 'instance_class',
92
+ input['request_params']['instance_class'],
93
+ instance_class_valid_values,
94
+ )
95
+ end
96
+ end
97
+
98
+ if input['request_params']['verbose'] && !input['request_params']['verbose'].to_s.empty?
99
+ verbose_valid_values = %w(0 1)
100
+ unless verbose_valid_values.include? input['request_params']['verbose'].to_s
101
+ raise ParameterValueNotAllowedError.new(
102
+ 'verbose',
103
+ input['request_params']['verbose'],
104
+ verbose_valid_values,
105
+ )
106
+ end
107
+ end
108
+ end
109
+
110
+ public
111
+
112
+ # Documentation URL: https://docs.qingcloud.com/api/monitor/get_monitor.html
113
+ def get_instance_monitor(end_time: '', meters: [], resource: '', start_time: '', step: '')
114
+ input = {
115
+ config: config,
116
+ properties: properties,
117
+ api_name: 'GetMonitor',
118
+ request_method: 'GET',
119
+ request_params: {
120
+ 'end_time' => end_time,
121
+ 'meters' => meters,
122
+ 'resource' => resource,
123
+ 'start_time' => start_time,
124
+ 'step' => step, # step's available values: 5m, 15m, 2h, 1d
125
+ },
126
+ }
127
+
128
+ get_instance_monitor_input_validate input
129
+
130
+ request = Request.new input
131
+ request.send
132
+ end
133
+
134
+ private
135
+
136
+ def get_instance_monitor_input_validate(input)
137
+ input.deep_stringify_keys!
138
+
139
+ unless !input['request_params']['end_time'].nil? && !input['request_params']['end_time'].to_s.empty?
140
+ raise ParameterRequiredError.new('end_time', 'GetInstanceMonitorInput')
141
+ end
142
+
143
+ unless !input['request_params']['meters'].nil? && !input['request_params']['meters'].to_s.empty?
144
+ raise ParameterRequiredError.new('meters', 'GetInstanceMonitorInput')
145
+ end
146
+
147
+ unless !input['request_params']['resource'].nil? && !input['request_params']['resource'].to_s.empty?
148
+ raise ParameterRequiredError.new('resource', 'GetInstanceMonitorInput')
149
+ end
150
+
151
+ unless !input['request_params']['start_time'].nil? && !input['request_params']['start_time'].to_s.empty?
152
+ raise ParameterRequiredError.new('start_time', 'GetInstanceMonitorInput')
153
+ end
154
+
155
+ unless !input['request_params']['step'].nil? && !input['request_params']['step'].to_s.empty?
156
+ raise ParameterRequiredError.new('step', 'GetInstanceMonitorInput')
157
+ end
158
+
159
+ if input['request_params']['step'] && !input['request_params']['step'].to_s.empty?
160
+ step_valid_values = %w(5m 15m 2h 1d)
161
+ unless step_valid_values.include? input['request_params']['step'].to_s
162
+ raise ParameterValueNotAllowedError.new(
163
+ 'step',
164
+ input['request_params']['step'],
165
+ step_valid_values,
166
+ )
167
+ end
168
+ end
169
+ end
170
+
171
+ public
172
+
173
+ # Documentation URL: https://docs.qingcloud.com/api/instance/modify_instance_attributes.html
174
+ def modify_instance_attributes(description: '', instance: '', instance_name: '')
175
+ input = {
176
+ config: config,
177
+ properties: properties,
178
+ api_name: 'ModifyInstanceAttributes',
179
+ request_method: 'GET',
180
+ request_params: {
181
+ 'description' => description,
182
+ 'instance' => instance,
183
+ 'instance_name' => instance_name,
184
+ },
185
+ }
186
+
187
+ modify_instance_attributes_input_validate input
188
+
189
+ request = Request.new input
190
+ request.send
191
+ end
192
+
193
+ private
194
+
195
+ def modify_instance_attributes_input_validate(input)
196
+ input.deep_stringify_keys!
197
+
198
+ unless !input['request_params']['instance'].nil? && !input['request_params']['instance'].to_s.empty?
199
+ raise ParameterRequiredError.new('instance', 'ModifyInstanceAttributesInput')
200
+ end
201
+ end
202
+
203
+ public
204
+
205
+ # Documentation URL: https://docs.qingcloud.com/api/instance/reset_instances.html
206
+ def reset_instances(instances: [], login_keypair: '', login_mode: '', login_passwd: '', need_newsid: nil)
207
+ input = {
208
+ config: config,
209
+ properties: properties,
210
+ api_name: 'ResetInstances',
211
+ request_method: 'GET',
212
+ request_params: {
213
+ 'instances' => instances,
214
+ 'login_keypair' => login_keypair,
215
+ 'login_mode' => login_mode, # login_mode's available values: keypair, passwd
216
+ 'login_passwd' => login_passwd,
217
+ 'need_newsid' => need_newsid, # need_newsid's available values: 0, 1
218
+ },
219
+ }
220
+
221
+ reset_instances_input_validate input
222
+
223
+ request = Request.new input
224
+ request.send
225
+ end
226
+
227
+ private
228
+
229
+ def reset_instances_input_validate(input)
230
+ input.deep_stringify_keys!
231
+
232
+ unless !input['request_params']['instances'].nil? && !input['request_params']['instances'].to_s.empty?
233
+ raise ParameterRequiredError.new('instances', 'ResetInstancesInput')
234
+ end
235
+
236
+ unless !input['request_params']['login_mode'].nil? && !input['request_params']['login_mode'].to_s.empty?
237
+ raise ParameterRequiredError.new('login_mode', 'ResetInstancesInput')
238
+ end
239
+
240
+ if input['request_params']['login_mode'] && !input['request_params']['login_mode'].to_s.empty?
241
+ login_mode_valid_values = %w(keypair passwd)
242
+ unless login_mode_valid_values.include? input['request_params']['login_mode'].to_s
243
+ raise ParameterValueNotAllowedError.new(
244
+ 'login_mode',
245
+ input['request_params']['login_mode'],
246
+ login_mode_valid_values,
247
+ )
248
+ end
249
+ end
250
+
251
+ if input['request_params']['need_newsid'] && !input['request_params']['need_newsid'].to_s.empty?
252
+ need_newsid_valid_values = %w(0 1)
253
+ unless need_newsid_valid_values.include? input['request_params']['need_newsid'].to_s
254
+ raise ParameterValueNotAllowedError.new(
255
+ 'need_newsid',
256
+ input['request_params']['need_newsid'],
257
+ need_newsid_valid_values,
258
+ )
259
+ end
260
+ end
261
+ end
262
+
263
+ public
264
+
265
+ # Documentation URL: https://docs.qingcloud.com/api/instance/resize_instances.html
266
+ def resize_instances(cpu: nil, instance_type: '', instances: [], memory: nil)
267
+ input = {
268
+ config: config,
269
+ properties: properties,
270
+ api_name: 'ResizeInstances',
271
+ request_method: 'GET',
272
+ request_params: {
273
+ 'cpu' => cpu, # cpu's available values: 1, 2, 4, 8, 16
274
+ 'instance_type' => instance_type,
275
+ 'instances' => instances,
276
+ 'memory' => memory, # memory's available values: 1024, 2048, 4096, 6144, 8192, 12288, 16384, 24576, 32768
277
+ },
278
+ }
279
+
280
+ resize_instances_input_validate input
281
+
282
+ request = Request.new input
283
+ request.send
284
+ end
285
+
286
+ private
287
+
288
+ def resize_instances_input_validate(input)
289
+ input.deep_stringify_keys!
290
+
291
+ if input['request_params']['cpu'] && !input['request_params']['cpu'].to_s.empty?
292
+ cpu_valid_values = %w(1 2 4 8 16)
293
+ unless cpu_valid_values.include? input['request_params']['cpu'].to_s
294
+ raise ParameterValueNotAllowedError.new(
295
+ 'cpu',
296
+ input['request_params']['cpu'],
297
+ cpu_valid_values,
298
+ )
299
+ end
300
+ end
301
+
302
+ unless !input['request_params']['instances'].nil? && !input['request_params']['instances'].to_s.empty?
303
+ raise ParameterRequiredError.new('instances', 'ResizeInstancesInput')
304
+ end
305
+
306
+ if input['request_params']['memory'] && !input['request_params']['memory'].to_s.empty?
307
+ memory_valid_values = %w(1024 2048 4096 6144 8192 12288 16384 24576 32768)
308
+ unless memory_valid_values.include? input['request_params']['memory'].to_s
309
+ raise ParameterValueNotAllowedError.new(
310
+ 'memory',
311
+ input['request_params']['memory'],
312
+ memory_valid_values,
313
+ )
314
+ end
315
+ end
316
+ end
317
+
318
+ public
319
+
320
+ # Documentation URL: https://docs.qingcloud.com/api/instance/restart_instances.html
321
+ def restart_instances(instances: [])
322
+ input = {
323
+ config: config,
324
+ properties: properties,
325
+ api_name: 'RestartInstances',
326
+ request_method: 'GET',
327
+ request_params: {
328
+ 'instances' => instances,
329
+ },
330
+ }
331
+
332
+ restart_instances_input_validate input
333
+
334
+ request = Request.new input
335
+ request.send
336
+ end
337
+
338
+ private
339
+
340
+ def restart_instances_input_validate(input)
341
+ input.deep_stringify_keys!
342
+
343
+ unless !input['request_params']['instances'].nil? && !input['request_params']['instances'].to_s.empty?
344
+ raise ParameterRequiredError.new('instances', 'RestartInstancesInput')
345
+ end
346
+ end
347
+
348
+ public
349
+
350
+ # Documentation URL: https://docs.qingcloud.com/api/instance/run_instances.html
351
+ def run_instances(billing_id: '', count: nil, cpu: nil, hostname: '', image_id: '', instance_class: nil, instance_name: '', instance_type: '', login_keypair: '', login_mode: '', login_passwd: '', memory: nil, need_newsid: nil, need_userdata: nil, security_group: '', ui_type: '', userdata_file: '', userdata_path: '', userdata_type: '', userdata_value: '', volumes: [], vxnets: [])
352
+ input = {
353
+ config: config,
354
+ properties: properties,
355
+ api_name: 'RunInstances',
356
+ request_method: 'GET',
357
+ request_params: {
358
+ 'billing_id' => billing_id,
359
+ 'count' => count,
360
+ 'cpu' => cpu, # cpu's available values: 1, 2, 4, 8, 16
361
+ 'hostname' => hostname,
362
+ 'image_id' => image_id,
363
+ 'instance_class' => instance_class, # instance_class's available values: 0, 1
364
+ 'instance_name' => instance_name,
365
+ 'instance_type' => instance_type,
366
+ 'login_keypair' => login_keypair,
367
+ 'login_mode' => login_mode, # login_mode's available values: keypair, passwd
368
+ 'login_passwd' => login_passwd,
369
+ 'memory' => memory, # memory's available values: 1024, 2048, 4096, 6144, 8192, 12288, 16384, 24576, 32768
370
+ 'need_newsid' => need_newsid, # need_newsid's available values: 0, 1
371
+ 'need_userdata' => need_userdata, # need_userdata's available values: 0, 1
372
+ 'security_group' => security_group,
373
+ 'ui_type' => ui_type,
374
+ 'userdata_file' => userdata_file,
375
+ 'userdata_path' => userdata_path,
376
+ 'userdata_type' => userdata_type, # userdata_type's available values: plain, exec, tar
377
+ 'userdata_value' => userdata_value,
378
+ 'volumes' => volumes,
379
+ 'vxnets' => vxnets,
380
+ },
381
+ }
382
+
383
+ run_instances_input_validate input
384
+
385
+ request = Request.new input
386
+ request.send
387
+ end
388
+
389
+ private
390
+
391
+ def run_instances_input_validate(input)
392
+ input.deep_stringify_keys!
393
+
394
+ if input['request_params']['cpu'] && !input['request_params']['cpu'].to_s.empty?
395
+ cpu_valid_values = %w(1 2 4 8 16)
396
+ unless cpu_valid_values.include? input['request_params']['cpu'].to_s
397
+ raise ParameterValueNotAllowedError.new(
398
+ 'cpu',
399
+ input['request_params']['cpu'],
400
+ cpu_valid_values,
401
+ )
402
+ end
403
+ end
404
+
405
+ unless !input['request_params']['image_id'].nil? && !input['request_params']['image_id'].to_s.empty?
406
+ raise ParameterRequiredError.new('image_id', 'RunInstancesInput')
407
+ end
408
+
409
+ if input['request_params']['instance_class'] && !input['request_params']['instance_class'].to_s.empty?
410
+ instance_class_valid_values = %w(0 1)
411
+ unless instance_class_valid_values.include? input['request_params']['instance_class'].to_s
412
+ raise ParameterValueNotAllowedError.new(
413
+ 'instance_class',
414
+ input['request_params']['instance_class'],
415
+ instance_class_valid_values,
416
+ )
417
+ end
418
+ end
419
+
420
+ unless !input['request_params']['login_mode'].nil? && !input['request_params']['login_mode'].to_s.empty?
421
+ raise ParameterRequiredError.new('login_mode', 'RunInstancesInput')
422
+ end
423
+
424
+ if input['request_params']['login_mode'] && !input['request_params']['login_mode'].to_s.empty?
425
+ login_mode_valid_values = %w(keypair passwd)
426
+ unless login_mode_valid_values.include? input['request_params']['login_mode'].to_s
427
+ raise ParameterValueNotAllowedError.new(
428
+ 'login_mode',
429
+ input['request_params']['login_mode'],
430
+ login_mode_valid_values,
431
+ )
432
+ end
433
+ end
434
+
435
+ if input['request_params']['memory'] && !input['request_params']['memory'].to_s.empty?
436
+ memory_valid_values = %w(1024 2048 4096 6144 8192 12288 16384 24576 32768)
437
+ unless memory_valid_values.include? input['request_params']['memory'].to_s
438
+ raise ParameterValueNotAllowedError.new(
439
+ 'memory',
440
+ input['request_params']['memory'],
441
+ memory_valid_values,
442
+ )
443
+ end
444
+ end
445
+
446
+ if input['request_params']['need_newsid'] && !input['request_params']['need_newsid'].to_s.empty?
447
+ need_newsid_valid_values = %w(0 1)
448
+ unless need_newsid_valid_values.include? input['request_params']['need_newsid'].to_s
449
+ raise ParameterValueNotAllowedError.new(
450
+ 'need_newsid',
451
+ input['request_params']['need_newsid'],
452
+ need_newsid_valid_values,
453
+ )
454
+ end
455
+ end
456
+
457
+ if input['request_params']['need_userdata'] && !input['request_params']['need_userdata'].to_s.empty?
458
+ need_userdata_valid_values = %w(0 1)
459
+ unless need_userdata_valid_values.include? input['request_params']['need_userdata'].to_s
460
+ raise ParameterValueNotAllowedError.new(
461
+ 'need_userdata',
462
+ input['request_params']['need_userdata'],
463
+ need_userdata_valid_values,
464
+ )
465
+ end
466
+ end
467
+
468
+ if input['request_params']['userdata_type'] && !input['request_params']['userdata_type'].to_s.empty?
469
+ userdata_type_valid_values = %w(plain exec tar)
470
+ unless userdata_type_valid_values.include? input['request_params']['userdata_type'].to_s
471
+ raise ParameterValueNotAllowedError.new(
472
+ 'userdata_type',
473
+ input['request_params']['userdata_type'],
474
+ userdata_type_valid_values,
475
+ )
476
+ end
477
+ end
478
+ end
479
+
480
+ public
481
+
482
+ # Documentation URL: https://docs.qingcloud.com/api/instance/start_instances.html
483
+ def start_instances(instances: [])
484
+ input = {
485
+ config: config,
486
+ properties: properties,
487
+ api_name: 'StartInstances',
488
+ request_method: 'GET',
489
+ request_params: {
490
+ 'instances' => instances,
491
+ },
492
+ }
493
+
494
+ start_instances_input_validate input
495
+
496
+ request = Request.new input
497
+ request.send
498
+ end
499
+
500
+ private
501
+
502
+ def start_instances_input_validate(input)
503
+ input.deep_stringify_keys!
504
+
505
+ unless !input['request_params']['instances'].nil? && !input['request_params']['instances'].to_s.empty?
506
+ raise ParameterRequiredError.new('instances', 'StartInstancesInput')
507
+ end
508
+ end
509
+
510
+ public
511
+
512
+ # Documentation URL: https://docs.qingcloud.com/api/instance/stop_instances.html
513
+ def stop_instances(force: nil, instances: [])
514
+ input = {
515
+ config: config,
516
+ properties: properties,
517
+ api_name: 'StopInstances',
518
+ request_method: 'GET',
519
+ request_params: {
520
+ 'force' => force, # force's available values: 0, 1
521
+ 'instances' => instances,
522
+ },
523
+ }
524
+
525
+ stop_instances_input_validate input
526
+
527
+ request = Request.new input
528
+ request.send
529
+ end
530
+
531
+ private
532
+
533
+ def stop_instances_input_validate(input)
534
+ input.deep_stringify_keys!
535
+
536
+ if input['request_params']['force'] && !input['request_params']['force'].to_s.empty?
537
+ force_valid_values = %w(0 1)
538
+ unless force_valid_values.include? input['request_params']['force'].to_s
539
+ raise ParameterValueNotAllowedError.new(
540
+ 'force',
541
+ input['request_params']['force'],
542
+ force_valid_values,
543
+ )
544
+ end
545
+ end
546
+
547
+ unless !input['request_params']['instances'].nil? && !input['request_params']['instances'].to_s.empty?
548
+ raise ParameterRequiredError.new('instances', 'StopInstancesInput')
549
+ end
550
+ end
551
+
552
+ public
553
+
554
+ # Documentation URL: https://docs.qingcloud.com/api/instance/terminate_instances.html
555
+ def terminate_instances(instances: [])
556
+ input = {
557
+ config: config,
558
+ properties: properties,
559
+ api_name: 'TerminateInstances',
560
+ request_method: 'GET',
561
+ request_params: {
562
+ 'instances' => instances,
563
+ },
564
+ }
565
+
566
+ terminate_instances_input_validate input
567
+
568
+ request = Request.new input
569
+ request.send
570
+ end
571
+
572
+ private
573
+
574
+ def terminate_instances_input_validate(input)
575
+ input.deep_stringify_keys!
576
+
577
+ unless !input['request_params']['instances'].nil? && !input['request_params']['instances'].to_s.empty?
578
+ raise ParameterRequiredError.new('instances', 'TerminateInstancesInput')
579
+ end
580
+ end
581
+
582
+ public
583
+ end
584
+ end
585
+ end