ibm-cloud-sdk 0.1.2 → 0.1.7

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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +32 -0
  3. data/Gemfile +2 -0
  4. data/ibm-cloud-sdk.gemspec +3 -1
  5. data/lib/ibm/cloud/sdk.rb +3 -0
  6. data/lib/ibm/cloud/sdk/logging.rb +21 -0
  7. data/lib/ibm/cloud/sdk/null_logger.rb +19 -0
  8. data/lib/ibm/cloud/sdk/power_iaas.rb +181 -4
  9. data/lib/ibm/cloud/sdk/resource_controller.rb +2 -8
  10. data/lib/ibm/cloud/sdk/version.rb +1 -1
  11. data/lib/ibm/cloud/sdk/vpc.rb +133 -0
  12. data/lib/ibm/cloud/sdk/vpc/base_collection.rb +108 -0
  13. data/lib/ibm/cloud/sdk/vpc/base_instance.rb +23 -0
  14. data/lib/ibm/cloud/sdk/vpc/base_vpc.rb +61 -0
  15. data/lib/ibm/cloud/sdk/vpc/cloud_sdk.rb +33 -0
  16. data/lib/ibm/cloud/sdk/vpc/exceptions.rb +33 -0
  17. data/lib/ibm/cloud/sdk/vpc/floatingips.rb +20 -0
  18. data/lib/ibm/cloud/sdk/vpc/flowlogcollectors.rb +20 -0
  19. data/lib/ibm/cloud/sdk/vpc/helpers/connection.rb +96 -0
  20. data/lib/ibm/cloud/sdk/vpc/helpers/response.rb +134 -0
  21. data/lib/ibm/cloud/sdk/vpc/ike_policies.rb +24 -0
  22. data/lib/ibm/cloud/sdk/vpc/images.rb +21 -0
  23. data/lib/ibm/cloud/sdk/vpc/instance/actions.rb +19 -0
  24. data/lib/ibm/cloud/sdk/vpc/instance/floating_ips.rb +23 -0
  25. data/lib/ibm/cloud/sdk/vpc/instance/network_interfaces.rb +28 -0
  26. data/lib/ibm/cloud/sdk/vpc/instance/volume_attachments.rb +23 -0
  27. data/lib/ibm/cloud/sdk/vpc/instance_profiles.rb +21 -0
  28. data/lib/ibm/cloud/sdk/vpc/instances.rb +64 -0
  29. data/lib/ibm/cloud/sdk/vpc/ipsec_policies.rb +24 -0
  30. data/lib/ibm/cloud/sdk/vpc/keys.rb +43 -0
  31. data/lib/ibm/cloud/sdk/vpc/load_balancer.rb +23 -0
  32. data/lib/ibm/cloud/sdk/vpc/load_balancer/listeners.rb +30 -0
  33. data/lib/ibm/cloud/sdk/vpc/load_balancer/members.rb +23 -0
  34. data/lib/ibm/cloud/sdk/vpc/load_balancer/policies.rb +30 -0
  35. data/lib/ibm/cloud/sdk/vpc/load_balancer/pools.rb +28 -0
  36. data/lib/ibm/cloud/sdk/vpc/load_balancer/rules.rb +25 -0
  37. data/lib/ibm/cloud/sdk/vpc/load_balancers.rb +19 -0
  38. data/lib/ibm/cloud/sdk/vpc/network_acls.rb +39 -0
  39. data/lib/ibm/cloud/sdk/vpc/operating_systems.rb +21 -0
  40. data/lib/ibm/cloud/sdk/vpc/public_gateways.rb +21 -0
  41. data/lib/ibm/cloud/sdk/vpc/regions.rb +35 -0
  42. data/lib/ibm/cloud/sdk/vpc/security_groups.rb +48 -0
  43. data/lib/ibm/cloud/sdk/vpc/subnets.rb +21 -0
  44. data/lib/ibm/cloud/sdk/vpc/volume_profiles.rb +21 -0
  45. data/lib/ibm/cloud/sdk/vpc/volumes.rb +21 -0
  46. data/lib/ibm/cloud/sdk/vpc/vpcs.rb +60 -0
  47. data/lib/ibm/cloud/sdk/vpc/vpn_gateway/connections.rb +35 -0
  48. data/lib/ibm/cloud/sdk/vpc/vpn_gateway/local_cidrs.rb +32 -0
  49. data/lib/ibm/cloud/sdk/vpc/vpn_gateway/peer_cidrs.rb +32 -0
  50. data/lib/ibm/cloud/sdk/vpc/vpn_gateways.rb +25 -0
  51. metadata +60 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 68e0c97762894e63e4db55f70706d6b983b3f3260f148fbca1c9b0a5feae1ee7
4
- data.tar.gz: b1ad978d42046dfbeb0d3f5466a9c1d73de597ba3c1663d6f470f60dc842acd9
3
+ metadata.gz: 49b6c34b47c964d6025eb8ca01efc3221fe33603c1c56b3e86167925f6132f60
4
+ data.tar.gz: df5e08b1f01c0e05fbec5e8f5887139dde7210be53b2cf538b0357b7efe5f0a1
5
5
  SHA512:
6
- metadata.gz: cc621c2428dcf979379ff89acf278b56083837c51d964d99677782855e02c7556eb681b413df992ccb4b7e52bf941f1a302d76657337eee3a737a4a58fcdbba7
7
- data.tar.gz: b247412ced34770e9e0efa7b9c6639aad56d69a2698f5659b0ad38367f41d452be02809ea2ed59319ed5031af0f56cf1d8b6d7703b08542c770669f1f2377a0b
6
+ metadata.gz: afe2bfaae5cb2a853cd7ba2523a2aed7f0da6f6c319d1c2d730993ab5dc93613e928a423a0a7e0310023e96ad71aaa2f8129b5908d0c767e3679fdae8fa063ec
7
+ data.tar.gz: 91d9e41682d13a1671d63c57fb2a4620b8b5f4d001c055036b7942b60a1e57b9e8a348a4615866851ff09389f6ed868ce7a62eff15b85c7bc8d564559f1180c2
@@ -0,0 +1,32 @@
1
+ # Changelog
2
+ All notable changes to the gem ibm-cloud-sdk-ruby will be documented here.
3
+
4
+ ## v0.1.7 - 2020-09-28
5
+ - Added Logging in IBM Cloud
6
+ - Add VCR to vpc spec
7
+ - Add exception when status of response is not in 200 range or 404
8
+ - Power IaaS Update docstrings, VM actions volumes
9
+
10
+ ## v0.1.6 - 2020-09-23
11
+ - Add PowerIaaS method to get instance info
12
+ - Return region specific PowerVS storage types
13
+ - Move VPC instance into instances and add initialization method.
14
+
15
+ ## v0.1.5 - 2020-09-21
16
+ - Added Enumerable based pagination support
17
+ - Move instance profiles
18
+ - Improve resource lookup by GUID
19
+ - Add support to create a PowerIaas volume
20
+
21
+ ## v0.1.4 - 2020-09-17
22
+ - Added support for the IBM Virtual Private Cloud (VPC) service
23
+
24
+ ## v0.1.3 - 2020-08-31
25
+ ### Added the following rest api calls for Power System Virtual Server service
26
+ - Add PowerIaas 'delete_volume' method
27
+ - Add PowerVS SAP API calls
28
+ - get list of available system pools within a particular data center
29
+ - get list of all storage type availble in the data center. There may be
30
+ update to the call once PowerVS service updates the storage type rest api
31
+ for Power System Virtual Server service .
32
+
data/Gemfile CHANGED
@@ -5,3 +5,5 @@ gemspec
5
5
 
6
6
  gem "rake", "~> 12.0"
7
7
  gem "rspec", "~> 3.0"
8
+ gem 'vcr'
9
+ gem 'webmock'
@@ -11,7 +11,8 @@ Gem::Specification.new do |spec|
11
11
  spec.licenses = %w["Apache-2.0"]
12
12
  spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
13
13
 
14
- spec.metadata["homepage_uri"] = spec.homepage
14
+ spec.metadata["homepage_uri"] = spec.homepage
15
+ spec.metadata["changelog_uri"] = "https://github.com/IBM-Cloud/ibm-cloud-sdk-ruby/blob/v#{spec.version}/CHANGELOG.md"
15
16
 
16
17
  # Specify which files should be added to the gem when it is released.
17
18
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
@@ -23,4 +24,5 @@ Gem::Specification.new do |spec|
23
24
  spec.require_paths = ["lib"]
24
25
 
25
26
  spec.add_dependency "rest-client"
27
+ spec.add_dependency "http"
26
28
  end
@@ -1,3 +1,4 @@
1
+
1
2
  require "json"
2
3
  require "rest-client"
3
4
 
@@ -6,6 +7,8 @@ require "ibm/cloud/sdk/iam"
6
7
  require "ibm/cloud/sdk/power_iaas"
7
8
  require "ibm/cloud/sdk/resource_controller"
8
9
  require "ibm/cloud/sdk/version"
10
+ require "ibm/cloud/sdk/vpc/cloud_sdk"
11
+ require "ibm/cloud/sdk/logging"
9
12
 
10
13
  module IBM
11
14
  module Cloud
@@ -0,0 +1,21 @@
1
+ require_relative 'null_logger'
2
+
3
+ module IBM
4
+ module Cloud
5
+ module SDK
6
+ class << self
7
+ attr_writer :logger
8
+ end
9
+
10
+ def self.logger
11
+ @logger ||= NullLogger.new
12
+ end
13
+
14
+ module Logging
15
+ def logger
16
+ IBM::Cloud::SDK.logger
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ require "logger"
2
+
3
+ module IBM
4
+ module Cloud
5
+ module SDK
6
+ class NullLogger < Logger
7
+ def initialize(*_args)
8
+ end
9
+
10
+ def add(*_args, &_block)
11
+ end
12
+
13
+ def debug?
14
+ false
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,7 +1,11 @@
1
+ require_relative 'logging'
2
+
1
3
  module IBM
2
4
  module Cloud
3
5
  module SDK
4
6
  class PowerIaas < BaseService
7
+ include Logging
8
+
5
9
  # Create an API Client object for the Power IaaS service
6
10
  #
7
11
  # @param region [String] the IBM Power Cloud instance region
@@ -15,12 +19,23 @@ module IBM
15
19
  @region = region
16
20
  @token = token
17
21
  @tenant = tenant
22
+ RestClient.log = logger
18
23
  end
19
24
 
25
+ # Get the API service Endpoint URL
26
+ #
27
+ # @return [String] Endpoint URL
20
28
  def endpoint
21
29
  "https://#{region.sub(/-\d$/, '')}.power-iaas.cloud.ibm.com/pcloud/v1"
22
30
  end
23
31
 
32
+ # Get Power Cloud Instance information
33
+ #
34
+ # @return [Hash] CloudInstance
35
+ def get_pcloud_instance
36
+ get("cloud-instances/#{guid}")
37
+ end
38
+
24
39
  # Get all PVM instances in an IBM Power Cloud instance
25
40
  #
26
41
  # @return [Array<Hash>] all PVM Instances for this instance
@@ -34,12 +49,15 @@ module IBM
34
49
 
35
50
  # Get an IBM Power Cloud PVM instance
36
51
  #
37
- # @param pvm_instance_id [String] the PVM instance ID
52
+ # @param pvm_instance_id [String] PVM instance ID
38
53
  # @return [Hash] PVM Instances
39
54
  def get_pvm_instance(instance_id)
40
55
  get("cloud-instances/#{guid}/pvm-instances/#{instance_id}")
41
56
  end
42
57
 
58
+ # Perform 'start' action on a PVMInstance
59
+ #
60
+ # @param pvm_instance_id [String] PVM instance ID
43
61
  def start_pvm_instance(instance_id)
44
62
  post(
45
63
  "cloud-instances/#{guid}/pvm-instances/#{instance_id}/action",
@@ -47,6 +65,9 @@ module IBM
47
65
  )
48
66
  end
49
67
 
68
+ # Perform 'stop' action on a PVMInstance
69
+ #
70
+ # @param pvm_instance_id [String] PVM instance ID
50
71
  def stop_pvm_instance(instance_id)
51
72
  post(
52
73
  "cloud-instances/#{guid}/pvm-instances/#{instance_id}/action",
@@ -54,6 +75,22 @@ module IBM
54
75
  )
55
76
  end
56
77
 
78
+ # Perform 'immediate-shutdown' action on a PVMInstance
79
+ #
80
+ # @param pvm_instance_id [String] PVM instance ID
81
+ def immediate_shutdown_pvm_instance(instance_id)
82
+ post(
83
+ "cloud-instances/#{guid}/pvm-instances/#{instance_id}/action",
84
+ {"action" => "immediate-shutdown"}.to_json
85
+ )
86
+ end
87
+
88
+ # Perform 'reboot' action on a PVMInstance
89
+ #
90
+ # This action has been deprecated and replaced by 'soft-reboot'
91
+ # and 'hard-reboot'
92
+ #
93
+ # @param pvm_instance_id [String] PVM instance ID
57
94
  def reboot_pvm_instance(instance_id)
58
95
  post(
59
96
  "cloud-instances/#{guid}/pvm-instances/#{instance_id}/action",
@@ -61,10 +98,47 @@ module IBM
61
98
  )
62
99
  end
63
100
 
101
+ # Perform 'soft-reboot' action on a PVMInstance
102
+ #
103
+ # @param pvm_instance_id [String] PVM instance ID
104
+ def soft_reboot_pvm_instance(instance_id)
105
+ post(
106
+ "cloud-instances/#{guid}/pvm-instances/#{instance_id}/action",
107
+ {"action" => "soft-reboot"}.to_json
108
+ )
109
+ end
110
+
111
+ # Perform 'hard-reboot' action on a PVMInstance
112
+ #
113
+ # @param pvm_instance_id [String] PVM instance ID
114
+ def hard_reboot_pvm_instance(instance_id)
115
+ post(
116
+ "cloud-instances/#{guid}/pvm-instances/#{instance_id}/action",
117
+ {"action" => "hard-reboot"}.to_json
118
+ )
119
+ end
120
+
121
+ # Perform 'reset-state' action on a PVMInstance
122
+ #
123
+ # @param pvm_instance_id [String] PVM instance ID
124
+ def reset_state_pvm_instance(instance_id)
125
+ post(
126
+ "cloud-instances/#{guid}/pvm-instances/#{instance_id}/action",
127
+ {"action" => "reset-state"}.to_json
128
+ )
129
+ end
130
+
131
+ # Create a new PVM instance
132
+ #
133
+ # @param instance_hash [Hash] New instance attributes
134
+ # @return [Hash] PVMInstance
64
135
  def create_pvm_instance(instance_hash)
65
136
  post("cloud-instances/#{guid}/pvm-instances", instance_hash.to_json)
66
137
  end
67
138
 
139
+ # Delete a PVM instance
140
+ #
141
+ # @param pvm_instance_id [String] PVM instance ID
68
142
  def delete_pvm_instance(instance_id)
69
143
  delete("cloud-instances/#{guid}/pvm-instances/#{instance_id}")
70
144
  end
@@ -82,7 +156,7 @@ module IBM
82
156
 
83
157
  # Get an IBM Power Cloud image
84
158
  #
85
- # @param image_id [String] The ID of an Image
159
+ # @param image_id [String] Image ID
86
160
  # @return [Hash] Image
87
161
  def get_image(image_id)
88
162
  get("cloud-instances/#{guid}/images/#{image_id}")
@@ -90,6 +164,9 @@ module IBM
90
164
  nil
91
165
  end
92
166
 
167
+ # Delete an image from a cloud instance
168
+ #
169
+ # @param image_id [String] Image ID
93
170
  def delete_image(image_id)
94
171
  delete("cloud-instances/#{guid}/images/#{image_id}")
95
172
  end
@@ -107,12 +184,43 @@ module IBM
107
184
 
108
185
  # Get a specific volume
109
186
  #
110
- # @param volume_id [String] The ID of a volume
187
+ # @param volume_id [String] Image ID
111
188
  # @return [Hash] Volume
112
189
  def get_volume(volume_id)
113
190
  get("cloud-instances/#{guid}/volumes/#{volume_id}")
114
191
  end
115
192
 
193
+ # Delete a volume
194
+ #
195
+ # @param volume_id [String] Volume ID
196
+ def delete_volume(volume_id)
197
+ delete("cloud-instances/#{guid}/volumes/#{volume_id}")
198
+ end
199
+
200
+ # Create a volume
201
+ #
202
+ # @param volume_hash [Hash] New volume attributes
203
+ # @return [Hash] Volume
204
+ def create_volume(volume_hash)
205
+ post("cloud-instances/#{guid}/volumes", volume_hash.to_json)
206
+ end
207
+
208
+ # Attach a volume
209
+ #
210
+ # @param pvm_instance_id [String] PVM Instance ID
211
+ # @param volume_id [String] Volume ID
212
+ def attach_volume(pvm_instance_id, volume_id)
213
+ post("cloud-instances/#{guid}/volumes/#{volumd_id}")
214
+ end
215
+
216
+ # Detach a volume
217
+ #
218
+ # @param pvm_instance_id [String] PVM Instance ID
219
+ # @param volume_id [String] Volume ID
220
+ def detach_volume(pvm_instance_id, volume_id)
221
+ delete("cloud-instances/#{guid}/volumes/#{volumd_id}")
222
+ end
223
+
116
224
  # Get all networks in an IBM Power Cloud instance
117
225
  #
118
226
  # @return [Array<Hash>] all networks for this IBM Power Cloud instance
@@ -125,37 +233,106 @@ module IBM
125
233
 
126
234
  # Get an IBM Power Cloud network
127
235
  #
128
- # @param network_id [String] the network ID
236
+ # @param network_id [String] Network ID
129
237
  # @return [Hash] Network
130
238
  def get_network(network_id)
131
239
  get("cloud-instances/#{guid}/networks/#{network_id}")
132
240
  end
133
241
 
242
+ # Get a available system pools list for IBM Power Cloud DC
243
+ #
244
+ # @return [Hash] SystemPool
245
+ def get_system_pool
246
+ get("cloud-instances/#{guid}/system-pools")
247
+ end
248
+
249
+ # Get a storage types list in IBM Power Cloud.
250
+ # note: this method to be refactored under the common
251
+ # IBM::Cloud::SDK::PowerIaas.endpoint when the rest api become available.
252
+ #
253
+ # @return [Array<Hash>] StorageType
254
+ def get_storage_types
255
+ JSON.parse(RestClient.get("https://#{region.sub(/-\d$/, '')}.power-iaas.cloud.ibm.com/broker/v1/storage-types", headers))[region]
256
+ end
257
+
258
+ # Create a new network
259
+ #
260
+ # @param network_hash [Hash] New network attributes
261
+ # @return [Hash] Network
134
262
  def create_network(network_hash)
135
263
  post("cloud-instances/#{guid}/networks", network_hash.to_json)
136
264
  end
137
265
 
266
+ # Delete a network
267
+ #
268
+ # @param network_id [String] Network ID
138
269
  def delete_network(network_id)
139
270
  delete("cloud-instances/#{guid}/networks/#{network_id}")
140
271
  end
141
272
 
273
+ # Get all ports for a network
274
+ #
275
+ # @param network_id [String] Network ID
276
+ # @return [Array<Hash>] NetworkPort
142
277
  def get_network_ports(network_id)
143
278
  get("cloud-instances/#{guid}/networks/#{network_id}/ports")["ports"]
144
279
  end
145
280
 
281
+ # List the tenant's SSH Keys
282
+ #
283
+ # @return [Array<Hash>] SSHKey
146
284
  def get_ssh_keys
147
285
  get("tenants/#{tenant}")["sshKeys"]
148
286
  end
149
287
 
288
+ # Add a new SSH key to the tenant
289
+ #
290
+ # @param name [String] User defined name for the SSH key
291
+ # @param sshkey [String] SSH RSA key
292
+ # @return [Hash] SSHKey
150
293
  def create_key_pair(name, sshkey)
151
294
  payload = {"name" => name, "sshkey" => sshkey}
152
295
  post("tenants/#{tenant}/sshkeys", payload.to_json)
153
296
  end
154
297
 
298
+ # Delete SSH key from the tenant
299
+ #
300
+ # @param sshkey_name [String] SSH Key name
155
301
  def delete_key_pair(name)
156
302
  delete("tenants/#{tenant}/sshkeys/#{name}")
157
303
  end
158
304
 
305
+ # Get an SAP profile
306
+ #
307
+ # @param sap_profile_id [String] SAP Profile ID
308
+ # @return [Hash] SAP profile
309
+ def get_sap_profile(sap_profile_id)
310
+ get("cloud-instances/#{guid}/sap/#{sap_profile_id}")
311
+ end
312
+
313
+ # Get list of all SAP profiles
314
+ #
315
+ # @return [Array<Hash>] all SAP profiles available to this instance
316
+ def get_sap_profiles
317
+ sap_profiles = get("cloud-instances/#{guid}/sap")["profiles"] || []
318
+
319
+ sap_profiles.map do |sap_profile|
320
+ get_sap_profile(sap_profile["profileID"])
321
+ end
322
+ end
323
+
324
+ # Create a new SAP PVM Instance
325
+ #
326
+ # Create a new PVM instance using an SAP profile. The resultant PVM
327
+ # instance is the standard 'PVMInstance' type and can be accessed via
328
+ # the existing *_pvm_instance methods.
329
+ #
330
+ # @param sap_profile_id [String] SAP Profile ID
331
+ # @return [Hash] SAP profile
332
+ def create_sap_pvm_instance(instance_hash)
333
+ post("cloud-instances/#{guid}/sap", instance_hash.to_json)
334
+ end
335
+
159
336
  private
160
337
 
161
338
  attr_reader :crn, :guid, :region, :tenant, :token
@@ -2,6 +2,7 @@ module IBM
2
2
  module Cloud
3
3
  module SDK
4
4
  class ResourceController < BaseService
5
+ require "ibm/cloud/sdk/resource_controller/resource"
5
6
  def endpoint
6
7
  "https://resource-controller.cloud.ibm.com/v2"
7
8
  end
@@ -10,15 +11,8 @@ module IBM
10
11
  @token = token
11
12
  end
12
13
 
13
- def get_resources
14
- resources = get("resource_instances")["resources"] || []
15
-
16
- require "ibm/cloud/sdk/resource_controller/resource"
17
- resources.map { |instance| Resource.new(instance) }
18
- end
19
-
20
14
  def get_resource(guid)
21
- get_resources.detect { |resource| resource.guid == guid }
15
+ Resource.new(get("resource_instances/#{guid}"))
22
16
  end
23
17
 
24
18
  private