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
@@ -0,0 +1,99 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require_relative '../http'
|
5
|
+
|
6
|
+
module IBM
|
7
|
+
module Cloud
|
8
|
+
module SDK
|
9
|
+
module TAG
|
10
|
+
# The Base Collection for the Tags API.
|
11
|
+
class TagCollection < SDKHTTP::BaseCollection
|
12
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Layout/LineLength
|
13
|
+
|
14
|
+
# Set params on the next request.
|
15
|
+
# @param account_id [String>] The ID of the billing account to list the tags for. If it is not set, then it is taken from the authorization token. This parameter is required if tag_type is set to service.
|
16
|
+
# @param tag_type [String] The type of the tag you want to list. Supported values are user and service.
|
17
|
+
# @param full_data [Boolean] If set to true, this query returns the provider, ghost, ims or ghost,ims, where the tag exists and the number of attached resources.
|
18
|
+
# @param providers [String] Select a provider. Supported values are ghost and ims.
|
19
|
+
# @param attached_to [String] If you want to return only the list of tags attached to a specified resource, pass the ID of the resource on this parameter. For GhoST onboarded resources, the resource ID is the CRN; for IMS resources, it is the IMS ID. When using this parameter, you must specify the appropriate provider (ims or ghost).
|
20
|
+
# @param offset [Integer] The offset is the index of the item from which you want to start returning data from.
|
21
|
+
# @param limit [Integer] The number of tags to return (1 <> 1000). Default: 100
|
22
|
+
# @param timeout [Integer] The search timeout bounds the search request to be executed within the specified time value. It returns the hits accumulated until time runs out (0 <> 60000).
|
23
|
+
# @param order_by_name [String] Order the output by tag name (asc,desc).
|
24
|
+
# @param attached_only [Boolean] Filter on attached tags. If true, it returns only tags that are attached to one or more resources.
|
25
|
+
def params(
|
26
|
+
account_id: nil,
|
27
|
+
tag_type: nil,
|
28
|
+
full_data: false,
|
29
|
+
providers: nil,
|
30
|
+
attached_to: nil,
|
31
|
+
offset: 0,
|
32
|
+
limit: 100,
|
33
|
+
timeout: nil,
|
34
|
+
order_by_name: 'asc',
|
35
|
+
attached_only: false
|
36
|
+
)
|
37
|
+
@params ||= {}
|
38
|
+
@params[:account_id] = account_id if account_id
|
39
|
+
@params[:tag_type] = tag_type if tag_type && %w[user service].include?(tag_type)
|
40
|
+
@params[:full_data] = full_data if full_data.instance_of?(TrueClass)
|
41
|
+
@params[:providers] = providers if providers && %w[ghost ims].include?(providers)
|
42
|
+
@params[:attached_to] = attached_to if attached_to
|
43
|
+
@params[:offset] = offset if offset.positive?
|
44
|
+
@params[:limit] = limit if limit && (1..1000).include?(limit) && limit != 100
|
45
|
+
@params[:timeout] = timeout if timeout
|
46
|
+
@params[:order_by_name] = order_by_name if order_by_name && %w[desc].include?(order_by_name)
|
47
|
+
@params[:attached_only] = attached_only if attached_only.instance_of?(TrueClass)
|
48
|
+
self
|
49
|
+
end
|
50
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Layout/LineLength
|
51
|
+
|
52
|
+
def reset_params
|
53
|
+
@params = {}
|
54
|
+
end
|
55
|
+
|
56
|
+
# Return the total count as retrieved from the API.
|
57
|
+
# @return [Integer] value in total_count
|
58
|
+
def total_count
|
59
|
+
fetch.json.[](:total_count)
|
60
|
+
end
|
61
|
+
|
62
|
+
# Get all tags attached to a CRN.
|
63
|
+
# @param crn [String] The CRN for the instance.
|
64
|
+
def attached_to(crn)
|
65
|
+
return [] if crn.to_s.empty?
|
66
|
+
|
67
|
+
params(attached_to: crn).all
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
# Create a generator that removes the need for pagination.
|
73
|
+
# @param url [String] Full URL to send to server.
|
74
|
+
# @return [Enumerator] Object to page through results.
|
75
|
+
# @yield [BaseInstance] An instance of the instance class.
|
76
|
+
# @yield [Hash] When no BaseInstance set.
|
77
|
+
def each_resource(url, offset = 0, &block)
|
78
|
+
return enum_for(:each_resource, url) unless block_given?
|
79
|
+
return unless url
|
80
|
+
|
81
|
+
response = params(offset: offset).get(path: url).json
|
82
|
+
|
83
|
+
resources = response.fetch(@array_key.to_sym)
|
84
|
+
current_count = response.fetch(:offset) + response.fetch(:limit)
|
85
|
+
|
86
|
+
resources&.each { |value| yield value } # rubocop:disable Style/ExplicitBlockArgument
|
87
|
+
|
88
|
+
if resources.empty?
|
89
|
+
reset_params
|
90
|
+
return
|
91
|
+
end
|
92
|
+
|
93
|
+
each_resource(url, current_count, &block)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
data/lib/ibm/cloud/sdk/vpc.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
# typed: true
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
-
|
5
|
-
require_relative 'vpc/
|
6
|
-
require_relative 'vpc/base_instance'
|
4
|
+
require 'ibm/cloud/sdk_http'
|
5
|
+
require_relative 'vpc/http'
|
7
6
|
|
8
7
|
require_relative 'vpc/floatingips'
|
9
8
|
require_relative 'vpc/flowlogcollectors'
|
@@ -29,20 +28,23 @@ module IBM
|
|
29
28
|
module Cloud
|
30
29
|
module SDK
|
31
30
|
# Container that encapsulates the VPC API.
|
32
|
-
class Vpc
|
31
|
+
class Vpc
|
32
|
+
include VPC::VpcHTTP
|
33
|
+
|
33
34
|
# Create an API Client object for the VPC IaaS service
|
34
35
|
#
|
35
36
|
# @param region [String] the IBM Power Cloud instance region
|
36
37
|
# @param connection [IBM::Cloud::SDK::VPC::Connection] A connection object.
|
37
38
|
# @param logger [Logger] An instance of an instanciated logger.
|
38
|
-
def initialize(region, connection, logger: nil)
|
39
|
+
def initialize(region, connection, token, logger: nil)
|
39
40
|
@region = region
|
41
|
+
@token = token
|
40
42
|
@connection = connection
|
41
43
|
|
42
44
|
@logger = logger || Logger.new($stdout, level: :warn)
|
43
45
|
end
|
44
46
|
|
45
|
-
attr_reader :
|
47
|
+
attr_reader :logger, :token, :connection
|
46
48
|
attr_accessor :region
|
47
49
|
|
48
50
|
# The Region API endpoint.
|
@@ -6,14 +6,14 @@ module IBM
|
|
6
6
|
module SDK
|
7
7
|
module VPC
|
8
8
|
# Class that deals with groups of floating IPs.
|
9
|
-
class FloatingIPs <
|
9
|
+
class FloatingIPs < VPCCollection
|
10
10
|
def initialize(parent)
|
11
11
|
super(parent, 'floating_ips', child_class: FloatingIP)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
# Class that deals with a single floating IP.
|
16
|
-
class FloatingIP <
|
16
|
+
class FloatingIP < VPCInstance; end
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -6,14 +6,14 @@ module IBM
|
|
6
6
|
module SDK
|
7
7
|
module VPC
|
8
8
|
# A list of subnets
|
9
|
-
class FlowLogCollectors <
|
9
|
+
class FlowLogCollectors < VPCCollection
|
10
10
|
def initialize(parent)
|
11
11
|
super(parent, 'flow_log_collectors', child_class: FlowLogCollectors)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
# A single subnet
|
16
|
-
class FlowLogCollector <
|
16
|
+
class FlowLogCollector < VPCInstance; end
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require_relative '../http'
|
5
|
+
require_relative 'vpc_http'
|
6
|
+
|
7
|
+
module IBM
|
8
|
+
module Cloud
|
9
|
+
module SDK
|
10
|
+
module VPC
|
11
|
+
# Container that encapsulates the VPC API.
|
12
|
+
# This class is used as a base for collection APIs.
|
13
|
+
# @param parent [Object] The parent instance in the API chain.
|
14
|
+
# @param endpoint [string] A path from the parent to the desired endpoint. In most cases is should be 1 word.
|
15
|
+
# @param array_key [string] The key that the API response holds the endpoint data. When nil the endpoint will be used.
|
16
|
+
# @param child_class [Object] The Object to be used when instanciating the single instance for this class.
|
17
|
+
class VPCCollection < SDKHTTP::BaseCollection
|
18
|
+
include VpcHTTP
|
19
|
+
|
20
|
+
# A chainable method to set query filters on the collection.
|
21
|
+
# @example vpc.images.params(limit: 1).all
|
22
|
+
#
|
23
|
+
# @param start [String] A server-supplied token determining what resource to start the page on.
|
24
|
+
# @param limit [Integer] The number of resources to return on a page allowed values are between 1 and 100
|
25
|
+
# @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
|
26
|
+
# @return [BaseCollection] This class with the param instance variable set.
|
27
|
+
def params(start: nil, limit: nil, resource_group: nil)
|
28
|
+
@params[:start] = start if start
|
29
|
+
@params[:limit] = limit if limit
|
30
|
+
@params[:resource_group] = resource_group if resource_group
|
31
|
+
self
|
32
|
+
end
|
33
|
+
|
34
|
+
# Determine if the collection has a total_count key in its response.
|
35
|
+
# @return [Boolean]
|
36
|
+
def has_count?
|
37
|
+
fetch.json&.key?(:total_count)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Get the total count if it exists in the response. Returns nil otherwise.
|
41
|
+
# @return [Integer] The total count reuturned by the server.
|
42
|
+
def count
|
43
|
+
fetch.json&.[](:total_count)
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
# Return a wrapped instance if set.
|
49
|
+
# @param value [Hash] The hash returned from server.
|
50
|
+
def hash_instance(value)
|
51
|
+
return @instance.new(self, data: value, id_key: @instance_id) if @instance
|
52
|
+
|
53
|
+
value
|
54
|
+
end
|
55
|
+
|
56
|
+
# Create a generator that removes the need for pagination.
|
57
|
+
# @param url [String] Full URL to send to server.
|
58
|
+
# @return [Enumerator] Object to page through results.
|
59
|
+
# @yield [BaseInstance] An instance of the instance class.
|
60
|
+
# @yield [Hash] When no VPCInstance set.
|
61
|
+
def each_resource(url, &block)
|
62
|
+
return enum_for(:each_resource, url) unless block_given?
|
63
|
+
return unless url
|
64
|
+
|
65
|
+
response = get(path: url).json
|
66
|
+
resources = response.fetch(@array_key.to_sym)
|
67
|
+
|
68
|
+
resources&.each { |value| yield hash_instance(value) }
|
69
|
+
# VPC has a next key that holds the next URL.
|
70
|
+
return unless response.key?(:next)
|
71
|
+
|
72
|
+
# The :next data structure is a hash with a href member.
|
73
|
+
next_url = response.dig(:next, :href)
|
74
|
+
return unless next_url
|
75
|
+
|
76
|
+
each_resource(next_url, &block)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../http'
|
4
|
+
|
5
|
+
module IBM
|
6
|
+
module Cloud
|
7
|
+
module SDK
|
8
|
+
# Module holds basic HTTP functionality.
|
9
|
+
module VPC
|
10
|
+
# Generic methods for accessing VPC.
|
11
|
+
module VpcHTTP
|
12
|
+
include SDKHTTP::BaseHTTPMixin
|
13
|
+
|
14
|
+
def metadata(query = nil, payload = nil)
|
15
|
+
@params ||= {}
|
16
|
+
@params.merge!(query) if query
|
17
|
+
|
18
|
+
payload ||= {}
|
19
|
+
{
|
20
|
+
query: { version: '2020-08-01', generation: 2 }.merge(@params),
|
21
|
+
body: payload,
|
22
|
+
headers: { "Authorization": @token.authorization_header }
|
23
|
+
}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ibm/cloud/sdk/tags'
|
4
|
+
|
5
|
+
require_relative 'vpc_http'
|
6
|
+
|
7
|
+
module IBM
|
8
|
+
module Cloud
|
9
|
+
module SDK
|
10
|
+
module VPC
|
11
|
+
# Container that encapsulates the VPC API.
|
12
|
+
class VPCInstance < SDKHTTP::BaseInstance
|
13
|
+
include VpcHTTP
|
14
|
+
|
15
|
+
# Get the CRN for the resource.
|
16
|
+
# @return [String]
|
17
|
+
def crn
|
18
|
+
self[:crn]
|
19
|
+
end
|
20
|
+
|
21
|
+
# Get the tags associated with this resource.
|
22
|
+
# @return [Enumerator] An enumerator with the results.
|
23
|
+
def tags
|
24
|
+
IBM::Cloud::SDK::Tags.new(@connection, @token, logger: @logger).attached_to(crn)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -6,14 +6,14 @@ module IBM
|
|
6
6
|
module SDK
|
7
7
|
module VPC
|
8
8
|
# A list of IKEPolicy
|
9
|
-
class IKEPolicies <
|
9
|
+
class IKEPolicies < VPCCollection
|
10
10
|
def initialize(parent)
|
11
11
|
super(parent, 'ike_policies', child_class: IKEPolicy)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
# A single IKEPolicy
|
16
|
-
class IKEPolicy <
|
16
|
+
class IKEPolicy < VPCInstance
|
17
17
|
def connections
|
18
18
|
get('connections')
|
19
19
|
end
|
@@ -6,14 +6,14 @@ module IBM
|
|
6
6
|
module SDK
|
7
7
|
module VPC
|
8
8
|
# Work with multiple images.
|
9
|
-
class Images <
|
9
|
+
class Images < VPCCollection
|
10
10
|
def initialize(parent)
|
11
11
|
super(parent, 'images', child_class: Image)
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
# Work with a single image.
|
16
|
-
class Image <
|
16
|
+
class Image < VPCInstance
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -5,16 +5,16 @@ module IBM
|
|
5
5
|
module Cloud
|
6
6
|
module SDK
|
7
7
|
module VPC
|
8
|
-
module
|
8
|
+
module INSTANCE
|
9
9
|
# Get a Floating IP.
|
10
|
-
class FloatingIps <
|
10
|
+
class FloatingIps < VPCCollection
|
11
11
|
def initialize(parent)
|
12
12
|
super(parent, 'floating_ips', child_class: FloatingIp)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
# Get a single floating IP.
|
17
|
-
class FloatingIp <
|
17
|
+
class FloatingIp < VPCInstance
|
18
18
|
end
|
19
19
|
end
|
20
20
|
end
|
@@ -7,41 +7,16 @@ module IBM
|
|
7
7
|
module Cloud
|
8
8
|
module SDK
|
9
9
|
module VPC
|
10
|
-
module
|
10
|
+
module INSTANCE
|
11
11
|
# All netowrk interfaces.
|
12
|
-
class NetworkInterfaces <
|
12
|
+
class NetworkInterfaces < VPCCollection
|
13
13
|
def initialize(parent)
|
14
|
-
super(parent, 'network_interfaces')
|
15
|
-
end
|
16
|
-
|
17
|
-
def all
|
18
|
-
get.subkey('network_interfaces')
|
19
|
-
# get
|
20
|
-
end
|
21
|
-
|
22
|
-
def update(payload)
|
23
|
-
post(payload)
|
24
|
-
end
|
25
|
-
|
26
|
-
def instance(id)
|
27
|
-
NetworkInterface.new(self, id)
|
14
|
+
super(parent, 'network_interfaces', child_class: NetworkInterface)
|
28
15
|
end
|
29
16
|
end
|
30
17
|
|
31
18
|
# A single network insterface.
|
32
|
-
class NetworkInterface <
|
33
|
-
def remove
|
34
|
-
delete
|
35
|
-
end
|
36
|
-
|
37
|
-
def details
|
38
|
-
get
|
39
|
-
end
|
40
|
-
|
41
|
-
def update(payload)
|
42
|
-
patch(payload)
|
43
|
-
end
|
44
|
-
|
19
|
+
class NetworkInterface < VPCInstance
|
45
20
|
def floating_ips
|
46
21
|
FloatingIps.new(self)
|
47
22
|
end
|