ibm-cloud-sdk 0.1.6 → 0.1.11

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 (68) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -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 +117 -9
  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 +28 -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 +77 -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 +3 -3
  27. data/lib/ibm/cloud/sdk/vpc/instance/volume_attachments.rb +3 -3
  28. data/lib/ibm/cloud/sdk/vpc/instance_profiles.rb +3 -3
  29. data/lib/ibm/cloud/sdk/vpc/instances.rb +99 -6
  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 +3 -3
  50. data/lib/ibm/cloud/sdk/vpc/vpn_gateway/peer_cidrs.rb +3 -3
  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 +120 -0
  55. data/lib/ibm/cloud/sdk_http/base_instance.rb +55 -0
  56. data/lib/ibm/cloud/sdk_http/connection.rb +38 -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 -10
  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
@@ -1,108 +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 BaseCollection < BaseVPC
9
- # This class is used as a base for collection APIs.
10
- # @param parent [Object] The parent instance in the API chain.
11
- # @param endpoint [string] A path from the parent to the desired endpoint. In most cases is should be 1 word.
12
- # @param array_key [string] The key that the API response holds the endpoint data. When nil the endpoint will be used.
13
- # @param child_class [Object] The Object to be used when instanciating the single instance for this class.
14
- def initialize(parent, endpoint, array_key: nil, child_class: nil)
15
- # Setup empty base instance variables.
16
- @params = nil
17
-
18
- array_key ||= endpoint
19
-
20
- # Set the array key and child class.
21
- @array_key ||= array_key
22
- @instance ||= child_class
23
-
24
- super(parent, endpoint)
25
- end
26
-
27
- # A chainable method to set query filters on the collection.
28
- # @example vpc.images.params(limit: 1).all
29
- #
30
- # @param start [String] A server-supplied token determining what resource to start the page on.
31
- # @param limit [Integer] The number of resources to return on a page allowed values are between 1 and 100
32
- # @param resource_group [String] Filters the collection to resources within one of the resource groups identified in a comma-separated list of resource group identifiers
33
- # @return [BaseCollection] This class with the param instance variable set.
34
- def params(start: nil, limit: nil, resource_group: nil)
35
- @params = {}
36
- @params[:start] = start if start
37
- @params[:limit] = limit if limit
38
- @params[:resource_group] = resource_group if resource_group
39
- self
40
- end
41
-
42
- # Retrieve the collection from the cloud.
43
- # @return [IBM::Cloud::SDK::VPC::Response] The http response object.
44
- def fetch
45
- @data ||= get(params: @params)
46
- end
47
-
48
- # Get an iterable for the resource collection.
49
- # @return [Enumerator] Use standard each, next idioms.
50
- def all
51
- each_resource(url)
52
- end
53
-
54
- # Fetch all data and return in an array.
55
- # @return [Array] Hashes of the returned data.
56
- def data
57
- all.to_a
58
- end
59
-
60
- # Determine if the collection has a total_count key in its response.
61
- # @return [Boolean]
62
- def has_count?
63
- fetch.json&.key?(:total_count)
64
- end
65
-
66
- # Get the total count if it exists in the response. Returns nil otherwise.
67
- # @return [Integer] The total count reuturned by the server.
68
- def count
69
- fetch.json&.fetch(:total_count)
70
- end
71
-
72
- # A generic post method to create a resource on the collection.
73
- # @param payload [Hash] A hash of parameters to send to the server.
74
- # @param payload_type [String] One of the following options json, form, or body.
75
- # @return [IBM::Cloud::SDK::VPC::Response] The http response object.
76
- def create(payload, payload_type = 'json')
77
- adhoc(method: 'post', payload_type: payload_type, payload: payload)
78
- end
79
-
80
- # Access a specific instance by either id or name depending on API.
81
- def instance(id)
82
- @instance.new(self, id)
83
- end
84
-
85
- private
86
-
87
- # Create a generator that removes the need for pagination.
88
- def each_resource(url, &block)
89
- return enum_for(:each_resource, url) unless block_given?
90
- return unless url
91
-
92
- response = @connection.adhoc('get', url, metadata(@params)).json
93
- resources = response.fetch(@array_key.to_sym)
94
-
95
- resources&.each do |value|
96
- yield value
97
- end
98
- return unless response.key?(:next)
99
-
100
- next_url = response.dig(:next, :href)
101
- return unless next_url
102
-
103
- each_resource(next_url, &block)
104
- end
105
- end
106
- end
107
- end
108
- end
@@ -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