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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -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 +125 -10
- 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 +29 -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 +2 -2
- data/lib/ibm/cloud/sdk/vpc/instance/floating_ips.rb +3 -3
- data/lib/ibm/cloud/sdk/vpc/instance/network_interfaces.rb +4 -29
- data/lib/ibm/cloud/sdk/vpc/instance/volume_attachments.rb +4 -27
- data/lib/ibm/cloud/sdk/vpc/instance_profiles.rb +3 -3
- data/lib/ibm/cloud/sdk/vpc/instances.rb +43 -3
- 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 +2 -2
- data/lib/ibm/cloud/sdk/vpc/vpn_gateway/peer_cidrs.rb +2 -2
- 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 +63 -0
- data/lib/ibm/cloud/sdk_http/base_instance.rb +55 -0
- data/lib/ibm/cloud/sdk_http/connection.rb +32 -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 -11
- 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
- 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
|