ibm-cloud-sdk 0.1.5 → 0.1.10

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 (69) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -0
  3. data/Gemfile +2 -0
  4. data/ibm-cloud-sdk.gemspec +1 -1
  5. data/lib/ibm/cloud/sdk.rb +3 -1
  6. data/lib/ibm/cloud/sdk/iam.rb +5 -0
  7. data/lib/ibm/cloud/sdk/logging.rb +21 -0
  8. data/lib/ibm/cloud/sdk/null_logger.rb +19 -0
  9. data/lib/ibm/cloud/sdk/power_iaas.rb +125 -10
  10. data/lib/ibm/cloud/sdk/resource_controller.rb +4 -0
  11. data/lib/ibm/cloud/sdk/tags.rb +28 -0
  12. data/lib/ibm/cloud/sdk/tags/http.rb +5 -0
  13. data/lib/ibm/cloud/sdk/tags/http/tag_collection.rb +99 -0
  14. data/lib/ibm/cloud/sdk/version.rb +1 -1
  15. data/lib/ibm/cloud/sdk/vpc.rb +8 -6
  16. data/lib/ibm/cloud/sdk/vpc/floatingips.rb +2 -2
  17. data/lib/ibm/cloud/sdk/vpc/flowlogcollectors.rb +2 -2
  18. data/lib/ibm/cloud/sdk/vpc/http.rb +7 -0
  19. data/lib/ibm/cloud/sdk/vpc/http/vpc_collection.rb +82 -0
  20. data/lib/ibm/cloud/sdk/vpc/http/vpc_http.rb +29 -0
  21. data/lib/ibm/cloud/sdk/vpc/http/vpc_instance.rb +30 -0
  22. data/lib/ibm/cloud/sdk/vpc/ike_policies.rb +2 -2
  23. data/lib/ibm/cloud/sdk/vpc/images.rb +2 -2
  24. data/lib/ibm/cloud/sdk/vpc/instance/actions.rb +2 -2
  25. data/lib/ibm/cloud/sdk/vpc/instance/floating_ips.rb +3 -3
  26. data/lib/ibm/cloud/sdk/vpc/instance/network_interfaces.rb +4 -29
  27. data/lib/ibm/cloud/sdk/vpc/instance/volume_attachments.rb +4 -27
  28. data/lib/ibm/cloud/sdk/vpc/instance_profiles.rb +3 -3
  29. data/lib/ibm/cloud/sdk/vpc/instances.rb +43 -3
  30. data/lib/ibm/cloud/sdk/vpc/ipsec_policies.rb +2 -2
  31. data/lib/ibm/cloud/sdk/vpc/keys.rb +2 -24
  32. data/lib/ibm/cloud/sdk/vpc/load_balancer.rb +1 -1
  33. data/lib/ibm/cloud/sdk/vpc/load_balancer/listeners.rb +2 -2
  34. data/lib/ibm/cloud/sdk/vpc/load_balancer/members.rb +2 -2
  35. data/lib/ibm/cloud/sdk/vpc/load_balancer/policies.rb +2 -2
  36. data/lib/ibm/cloud/sdk/vpc/load_balancer/pools.rb +2 -2
  37. data/lib/ibm/cloud/sdk/vpc/load_balancer/rules.rb +2 -2
  38. data/lib/ibm/cloud/sdk/vpc/load_balancers.rb +1 -1
  39. data/lib/ibm/cloud/sdk/vpc/network_acls.rb +4 -4
  40. data/lib/ibm/cloud/sdk/vpc/operating_systems.rb +2 -2
  41. data/lib/ibm/cloud/sdk/vpc/public_gateways.rb +2 -2
  42. data/lib/ibm/cloud/sdk/vpc/regions.rb +4 -4
  43. data/lib/ibm/cloud/sdk/vpc/security_groups.rb +6 -6
  44. data/lib/ibm/cloud/sdk/vpc/subnets.rb +2 -2
  45. data/lib/ibm/cloud/sdk/vpc/volume_profiles.rb +2 -2
  46. data/lib/ibm/cloud/sdk/vpc/volumes.rb +2 -2
  47. data/lib/ibm/cloud/sdk/vpc/vpcs.rb +6 -6
  48. data/lib/ibm/cloud/sdk/vpc/vpn_gateway/connections.rb +2 -2
  49. data/lib/ibm/cloud/sdk/vpc/vpn_gateway/local_cidrs.rb +2 -2
  50. data/lib/ibm/cloud/sdk/vpc/vpn_gateway/peer_cidrs.rb +2 -2
  51. data/lib/ibm/cloud/sdk/vpc/vpn_gateways.rb +2 -2
  52. data/lib/ibm/cloud/sdk_http.rb +16 -0
  53. data/lib/ibm/cloud/sdk_http/base_collection.rb +121 -0
  54. data/lib/ibm/cloud/sdk_http/base_http_mixin.rb +63 -0
  55. data/lib/ibm/cloud/sdk_http/base_instance.rb +55 -0
  56. data/lib/ibm/cloud/sdk_http/connection.rb +32 -0
  57. data/lib/ibm/cloud/sdk_http/exceptions.rb +31 -0
  58. data/lib/ibm/cloud/sdk_http/has_child.rb +23 -0
  59. data/lib/ibm/cloud/sdk_http/iam_token.rb +53 -0
  60. data/lib/ibm/cloud/sdk_http/sdk_response.rb +132 -0
  61. data/lib/ibm/cloud_sdk.rb +39 -0
  62. metadata +23 -11
  63. data/lib/ibm/cloud/sdk/vpc/base_collection.rb +0 -108
  64. data/lib/ibm/cloud/sdk/vpc/base_instance.rb +0 -23
  65. data/lib/ibm/cloud/sdk/vpc/base_vpc.rb +0 -61
  66. data/lib/ibm/cloud/sdk/vpc/cloud_sdk.rb +0 -33
  67. data/lib/ibm/cloud/sdk/vpc/helpers/connection.rb +0 -66
  68. data/lib/ibm/cloud/sdk/vpc/helpers/response.rb +0 -92
  69. data/lib/ibm/cloud/sdk/vpc/instance.rb +0 -35
@@ -1,23 +0,0 @@
1
- # typed: true
2
- # frozen_string_literal: true
3
-
4
- module IBM
5
- module Cloud
6
- module SDK
7
- # Container that encapsulates the VPC API.
8
- class BaseInstance < BaseVPC
9
- def details
10
- get.hash_response
11
- end
12
-
13
- def update(payload)
14
- patch(payload)
15
- end
16
-
17
- def remove
18
- delete
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,61 +0,0 @@
1
- # typed: true
2
- # frozen_string_literal: true
3
-
4
- module IBM
5
- module Cloud
6
- module SDK
7
- # Container that encapsulates the VPC API.
8
- class BaseVPC
9
- def initialize(parent, endpoint = nil)
10
- @endpoint = parent.url(endpoint)
11
- @connection = parent.connection
12
- @logger = parent.logger
13
- end
14
-
15
- attr_reader :endpoint, :connection, :logger
16
-
17
- def adhoc(method: 'get', path: nil, params: {}, payload_type: 'json', payload: {})
18
- @connection.adhoc(method.to_sym, url(path), metadata(params, payload_type, payload))
19
- end
20
-
21
- def get(path: nil, params: {})
22
- adhoc(method: 'get', path: path, params: params)
23
- end
24
-
25
- def post(payload = {}, path: nil, params: {}, type: 'json')
26
- adhoc(method: 'post', path: path, params: params, payload: payload, payload_type: type)
27
- end
28
-
29
- def put(payload = {}, path: nil, params: {})
30
- adhoc(method: 'put', path: path, params: params, payload: payload)
31
- end
32
-
33
- def patch(payload = {}, path: nil, params: {})
34
- adhoc(method: 'patch', path: path, params: params, payload: payload)
35
- end
36
-
37
- def delete(path: nil, params: {})
38
- adhoc(method: 'delete', path: path, params: params)
39
- end
40
-
41
- def url(path = nil)
42
- return endpoint unless path
43
-
44
- "#{endpoint}/#{path}"
45
- end
46
-
47
- private
48
-
49
- def metadata(params = {}, payload_type = 'json', payload = {})
50
- params ||= {}
51
- pt = {
52
- params: { version: '2020-08-01', generation: 2 }.merge(params)
53
- }
54
-
55
- pt[payload_type.to_sym] = payload unless payload.empty?
56
- pt
57
- end
58
- end
59
- end
60
- end
61
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'http'
4
- require 'ibm/cloud/sdk/vpc/helpers/connection'
5
- require 'ibm/cloud/sdk/vpc'
6
-
7
- module IBM
8
- # Holds the SDK pieces.
9
- class CloudSDK
10
- def initialize(api_key, logger: nil, options: {})
11
- @logger = logger
12
- @logger ||= Logger.new($stdout, level: :warn)
13
-
14
- @client = HTTP.use(http_options(options))
15
- @connection = IBM::Cloud::SDK::VPC::Connection.new(api_key, logger: @logger, client: @client)
16
- end
17
-
18
- def http_options(options = {})
19
- options.merge(
20
- {
21
- logging: { logger: @logger },
22
- auto_deflate: {}
23
- }
24
- )
25
- end
26
-
27
- attr_reader :logger, :connection
28
-
29
- def vpc(region = 'us-east')
30
- IBM::Cloud::SDK::Vpc.new(region, @connection, logger: @logger)
31
- end
32
- end
33
- end
@@ -1,66 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'time'
4
- require 'http'
5
- require_relative 'response'
6
-
7
- module IBM
8
- module Cloud
9
- module SDK
10
- module VPC
11
-
12
- # Contols tokens.
13
- class Connection
14
- def initialize(api_key, logger: nil, client: nil)
15
- @api_key = api_key
16
- @logger = logger
17
- @client = client
18
- @token = Token.new(api_key, logger: logger, client: client)
19
- end
20
-
21
- attr_reader :client
22
-
23
- def adhoc(verb, uri, opts = {})
24
- response = @client.auth(@token.authorization_header).request(verb.to_sym, uri, opts)
25
- Response.new(response)
26
- end
27
-
28
- def authorization_header
29
- @token.authorization_header
30
- end
31
- end
32
-
33
- # Get a token.
34
- class Token
35
- def initialize(api_key, logger: nil, client: nil)
36
- @api_key = api_key
37
- @logger = logger
38
- @client = client
39
- @data = fetch
40
- end
41
-
42
- def fetch
43
- payload = {
44
- form: {
45
- grant_type: 'urn:ibm:params:oauth:grant-type:apikey',
46
- apikey: @api_key
47
- }
48
- }
49
- response = HTTP.post('https://iam.cloud.ibm.com/identity/token', payload)
50
- @data = Response.new(response).json
51
- end
52
-
53
- def expired?
54
- fetch unless @data
55
- @data.fetch(:expiration).to_i <= Time.now.to_i + 600
56
- end
57
-
58
- def authorization_header
59
- fetch if expired?
60
- "#{@data.fetch(:token_type)} #{@data.fetch(:access_token)}"
61
- end
62
- end
63
- end
64
- end
65
- end
66
- end
@@ -1,92 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'time'
4
- require 'http'
5
-
6
- module IBM
7
- module Cloud
8
- module SDK
9
- module VPC
10
- # Encapsulate the HTTP response.
11
- class Response
12
- def initialize(response)
13
- @response = response
14
- end
15
-
16
- attr_reader :response
17
-
18
- # Return the response in a hash or array.
19
- def json
20
- JSON.parse(body, symbolize_names: true)
21
- rescue StandardError
22
- raise "Error while parsing response body. #{response.body}"
23
- end
24
-
25
- # Return the raw response string.
26
- def body
27
- response.body.to_s
28
- end
29
-
30
- # Return the response code.
31
- def code
32
- response.code
33
- end
34
-
35
- alias_method :status, :code
36
-
37
- # Return the raw connection object.
38
- def connection
39
- response.connection
40
- end
41
-
42
- # Return the content type of the response.
43
- def content_type
44
- response.response.mime_type
45
- end
46
-
47
- # Return the textual reason.
48
- def reason
49
- response.reason
50
- end
51
-
52
- # Return the sent url as a string.
53
- def url
54
- response.uri.to_s
55
- end
56
-
57
- # Return the sent url as a URI class.
58
- def uri
59
- response.uri
60
- end
61
-
62
- # Verify that the json response is a hash.
63
- def hash_response
64
- check_object(Hash)
65
- end
66
-
67
- # Verify that the json response is an array.
68
- def array_response
69
- check_object(Array)
70
- end
71
-
72
- # Find a subkey within the returned response.
73
- def subkey(key)
74
- ret = hash_response
75
- sym_key = key.to_sym
76
- return ret.fetch(sym_key) if ret.key?(sym_key)
77
-
78
- raise "Key #{key} not found in #{ret}."
79
- end
80
-
81
- # Check to see if the returned object is the expected object.
82
- def check_object(obj)
83
- ret = json
84
- return ret if ret.instance_of?(obj)
85
-
86
- raise "Expected #{obj} in response for #{url}. The returned object is a #{ret.class}."
87
- end
88
- end
89
- end
90
- end
91
- end
92
- end
@@ -1,35 +0,0 @@
1
- # typed: true
2
- # frozen_string_literal: true
3
-
4
- require_relative 'instance/actions'
5
- require_relative 'instance/network_interfaces'
6
- require_relative 'instance/volume_attachments'
7
-
8
- module IBM
9
- module Cloud
10
- module SDK
11
- module VPC
12
- module INSTANCES
13
- # Work with a single instance.
14
- class Instance < BaseInstance
15
- def actions
16
- Actions.new(self)
17
- end
18
-
19
- def network_interfaces
20
- NetworkInterfaces.new(self)
21
- end
22
-
23
- def volume_attachments
24
- VolumeAttachments.new(self)
25
- end
26
-
27
- def profiles
28
- Profiles.new(self)
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end