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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -0
- data/Gemfile +2 -0
- data/ibm-cloud-sdk.gemspec +1 -1
- data/lib/ibm/cloud/sdk.rb +3 -1
- data/lib/ibm/cloud/sdk/iam.rb +5 -0
- data/lib/ibm/cloud/sdk/logging.rb +21 -0
- data/lib/ibm/cloud/sdk/null_logger.rb +19 -0
- data/lib/ibm/cloud/sdk/power_iaas.rb +117 -9
- data/lib/ibm/cloud/sdk/resource_controller.rb +4 -0
- data/lib/ibm/cloud/sdk/tags.rb +28 -0
- data/lib/ibm/cloud/sdk/tags/http.rb +5 -0
- data/lib/ibm/cloud/sdk/tags/http/tag_collection.rb +99 -0
- data/lib/ibm/cloud/sdk/version.rb +1 -1
- data/lib/ibm/cloud/sdk/vpc.rb +8 -6
- data/lib/ibm/cloud/sdk/vpc/floatingips.rb +2 -2
- data/lib/ibm/cloud/sdk/vpc/flowlogcollectors.rb +2 -2
- data/lib/ibm/cloud/sdk/vpc/http.rb +7 -0
- data/lib/ibm/cloud/sdk/vpc/http/vpc_collection.rb +82 -0
- data/lib/ibm/cloud/sdk/vpc/http/vpc_http.rb +28 -0
- data/lib/ibm/cloud/sdk/vpc/http/vpc_instance.rb +30 -0
- data/lib/ibm/cloud/sdk/vpc/ike_policies.rb +2 -2
- data/lib/ibm/cloud/sdk/vpc/images.rb +2 -2
- data/lib/ibm/cloud/sdk/vpc/instance/actions.rb +77 -2
- data/lib/ibm/cloud/sdk/vpc/instance/floating_ips.rb +3 -3
- data/lib/ibm/cloud/sdk/vpc/instance/network_interfaces.rb +3 -3
- data/lib/ibm/cloud/sdk/vpc/instance/volume_attachments.rb +3 -3
- data/lib/ibm/cloud/sdk/vpc/instance_profiles.rb +3 -3
- data/lib/ibm/cloud/sdk/vpc/instances.rb +99 -6
- data/lib/ibm/cloud/sdk/vpc/ipsec_policies.rb +2 -2
- data/lib/ibm/cloud/sdk/vpc/keys.rb +2 -24
- data/lib/ibm/cloud/sdk/vpc/load_balancer.rb +1 -1
- data/lib/ibm/cloud/sdk/vpc/load_balancer/listeners.rb +2 -2
- data/lib/ibm/cloud/sdk/vpc/load_balancer/members.rb +2 -2
- data/lib/ibm/cloud/sdk/vpc/load_balancer/policies.rb +2 -2
- data/lib/ibm/cloud/sdk/vpc/load_balancer/pools.rb +2 -2
- data/lib/ibm/cloud/sdk/vpc/load_balancer/rules.rb +2 -2
- data/lib/ibm/cloud/sdk/vpc/load_balancers.rb +1 -1
- data/lib/ibm/cloud/sdk/vpc/network_acls.rb +4 -4
- data/lib/ibm/cloud/sdk/vpc/operating_systems.rb +2 -2
- data/lib/ibm/cloud/sdk/vpc/public_gateways.rb +2 -2
- data/lib/ibm/cloud/sdk/vpc/regions.rb +4 -4
- data/lib/ibm/cloud/sdk/vpc/security_groups.rb +6 -6
- data/lib/ibm/cloud/sdk/vpc/subnets.rb +2 -2
- data/lib/ibm/cloud/sdk/vpc/volume_profiles.rb +2 -2
- data/lib/ibm/cloud/sdk/vpc/volumes.rb +2 -2
- data/lib/ibm/cloud/sdk/vpc/vpcs.rb +6 -6
- data/lib/ibm/cloud/sdk/vpc/vpn_gateway/connections.rb +2 -2
- data/lib/ibm/cloud/sdk/vpc/vpn_gateway/local_cidrs.rb +3 -3
- data/lib/ibm/cloud/sdk/vpc/vpn_gateway/peer_cidrs.rb +3 -3
- data/lib/ibm/cloud/sdk/vpc/vpn_gateways.rb +2 -2
- data/lib/ibm/cloud/sdk_http.rb +16 -0
- data/lib/ibm/cloud/sdk_http/base_collection.rb +121 -0
- data/lib/ibm/cloud/sdk_http/base_http_mixin.rb +120 -0
- data/lib/ibm/cloud/sdk_http/base_instance.rb +55 -0
- data/lib/ibm/cloud/sdk_http/connection.rb +38 -0
- data/lib/ibm/cloud/sdk_http/exceptions.rb +31 -0
- data/lib/ibm/cloud/sdk_http/has_child.rb +23 -0
- data/lib/ibm/cloud/sdk_http/iam_token.rb +53 -0
- data/lib/ibm/cloud/sdk_http/sdk_response.rb +132 -0
- data/lib/ibm/cloud_sdk.rb +39 -0
- metadata +23 -10
- data/lib/ibm/cloud/sdk/vpc/base_collection.rb +0 -108
- data/lib/ibm/cloud/sdk/vpc/base_instance.rb +0 -23
- data/lib/ibm/cloud/sdk/vpc/base_vpc.rb +0 -61
- data/lib/ibm/cloud/sdk/vpc/cloud_sdk.rb +0 -33
- data/lib/ibm/cloud/sdk/vpc/helpers/connection.rb +0 -66
- 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
|