ibm-cloud-sdk 0.1.4 → 0.1.5
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 +6 -0
- data/lib/ibm/cloud/sdk/power_iaas.rb +8 -0
- data/lib/ibm/cloud/sdk/resource_controller.rb +2 -8
- data/lib/ibm/cloud/sdk/version.rb +1 -1
- data/lib/ibm/cloud/sdk/vpc.rb +11 -7
- data/lib/ibm/cloud/sdk/vpc/base_collection.rb +61 -21
- data/lib/ibm/cloud/sdk/vpc/base_instance.rb +1 -1
- data/lib/ibm/cloud/sdk/vpc/base_vpc.rb +4 -4
- data/lib/ibm/cloud/sdk/vpc/cloud_sdk.rb +4 -4
- data/lib/ibm/cloud/sdk/vpc/helpers/response.rb +3 -1
- data/lib/ibm/cloud/sdk/vpc/instance.rb +0 -1
- data/lib/ibm/cloud/sdk/vpc/instance_profiles.rb +21 -0
- metadata +4 -4
- data/lib/ibm/cloud/sdk/vpc/instance/profiles.rb +0 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8fe8cad325a98aabb1bd328c04aec7c1c4b7dbda4859d41a85baa51916a40d80
|
4
|
+
data.tar.gz: e40564d9e168b80623282caa7bb1b4efe5519e16a7757f8ac657ddbf57c0976a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2dabd16a4f84e7c7ade80f0a5d36f0796f15681a53f0f271b01ff6d98b41b00ea249f681c9c402961e53c0a94943c32c18d41e6f1421075be15561ce5c369c7e
|
7
|
+
data.tar.gz: 90bea5c5ae247170955e937be0fef41c8bd43f0d8749b8a3c08786f25759dd669e5f32e9a35bedada529a5936eb9ae0f06a329df4dcbb99a56c60d2f4dbb7659
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
# Changelog
|
2
2
|
All notable changes to the gem ibm-cloud-sdk-ruby will be documented here.
|
3
3
|
|
4
|
+
## v0.1.5 - 2020-09-21
|
5
|
+
- Added Enumerable based pagination support
|
6
|
+
- Move instance profiles
|
7
|
+
- Improve resource lookup by GUID
|
8
|
+
- Add support to create a PowerIaas volume
|
9
|
+
|
4
10
|
## v0.1.4 - 2020-09-17
|
5
11
|
- Added support for the IBM Virtual Private Cloud (VPC) service
|
6
12
|
|
@@ -120,6 +120,14 @@ module IBM
|
|
120
120
|
delete("cloud-instances/#{guid}/volumes/#{volume_id}")
|
121
121
|
end
|
122
122
|
|
123
|
+
# Create a volume
|
124
|
+
#
|
125
|
+
# @param volume_hash [Hash] New volume attributes
|
126
|
+
# @return [Hash] Volume
|
127
|
+
def create_volume(volume_hash)
|
128
|
+
post("cloud-instances/#{guid}/volumes", volume_hash.to_json)
|
129
|
+
end
|
130
|
+
|
123
131
|
# Get all networks in an IBM Power Cloud instance
|
124
132
|
#
|
125
133
|
# @return [Array<Hash>] all networks for this IBM Power Cloud instance
|
@@ -2,6 +2,7 @@ module IBM
|
|
2
2
|
module Cloud
|
3
3
|
module SDK
|
4
4
|
class ResourceController < BaseService
|
5
|
+
require "ibm/cloud/sdk/resource_controller/resource"
|
5
6
|
def endpoint
|
6
7
|
"https://resource-controller.cloud.ibm.com/v2"
|
7
8
|
end
|
@@ -10,15 +11,8 @@ module IBM
|
|
10
11
|
@token = token
|
11
12
|
end
|
12
13
|
|
13
|
-
def get_resources
|
14
|
-
resources = get("resource_instances")["resources"] || []
|
15
|
-
|
16
|
-
require "ibm/cloud/sdk/resource_controller/resource"
|
17
|
-
resources.map { |instance| Resource.new(instance) }
|
18
|
-
end
|
19
|
-
|
20
14
|
def get_resource(guid)
|
21
|
-
|
15
|
+
Resource.new(get("resource_instances/#{guid}"))
|
22
16
|
end
|
23
17
|
|
24
18
|
private
|
data/lib/ibm/cloud/sdk/vpc.rb
CHANGED
@@ -9,6 +9,7 @@ require_relative 'vpc/floatingips'
|
|
9
9
|
require_relative 'vpc/flowlogcollectors'
|
10
10
|
require_relative 'vpc/ike_policies'
|
11
11
|
require_relative 'vpc/images'
|
12
|
+
require_relative 'vpc/instance_profiles'
|
12
13
|
require_relative 'vpc/instances'
|
13
14
|
require_relative 'vpc/ipsec_policies'
|
14
15
|
require_relative 'vpc/keys'
|
@@ -32,17 +33,16 @@ module IBM
|
|
32
33
|
# Create an API Client object for the VPC IaaS service
|
33
34
|
#
|
34
35
|
# @param region [String] the IBM Power Cloud instance region
|
35
|
-
# @param
|
36
|
-
# @param logger [Logger]
|
37
|
-
def initialize(region,
|
36
|
+
# @param connection [IBM::Cloud::SDK::VPC::Connection] A connection object.
|
37
|
+
# @param logger [Logger] An instance of an instanciated logger.
|
38
|
+
def initialize(region, connection, logger: nil)
|
38
39
|
@region = region
|
39
|
-
@
|
40
|
-
@token = api_key
|
40
|
+
@connection = connection
|
41
41
|
|
42
|
-
@logger = logger || Logger.new($stdout)
|
42
|
+
@logger = logger || Logger.new($stdout, level: :warn)
|
43
43
|
end
|
44
44
|
|
45
|
-
attr_reader :
|
45
|
+
attr_reader :connection, :logger
|
46
46
|
attr_accessor :region
|
47
47
|
|
48
48
|
# The Region API endpoint.
|
@@ -67,6 +67,10 @@ module IBM
|
|
67
67
|
VPC::Images.new(self)
|
68
68
|
end
|
69
69
|
|
70
|
+
def instance_profiles
|
71
|
+
VPC::InstanceProfiles.new(self)
|
72
|
+
end
|
73
|
+
|
70
74
|
def instances
|
71
75
|
VPC::Instances.new(self)
|
72
76
|
end
|
@@ -6,9 +6,13 @@ module IBM
|
|
6
6
|
module SDK
|
7
7
|
# Container that encapsulates the VPC API.
|
8
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.
|
9
14
|
def initialize(parent, endpoint, array_key: nil, child_class: nil)
|
10
15
|
# Setup empty base instance variables.
|
11
|
-
@data = nil
|
12
16
|
@params = nil
|
13
17
|
|
14
18
|
array_key ||= endpoint
|
@@ -20,47 +24,83 @@ module IBM
|
|
20
24
|
super(parent, endpoint)
|
21
25
|
end
|
22
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
|
+
|
23
42
|
# Retrieve the collection from the cloud.
|
43
|
+
# @return [IBM::Cloud::SDK::VPC::Response] The http response object.
|
24
44
|
def fetch
|
25
45
|
@data ||= get(params: @params)
|
26
|
-
@data
|
27
46
|
end
|
28
47
|
|
48
|
+
# Get an iterable for the resource collection.
|
49
|
+
# @return [Enumerator] Use standard each, next idioms.
|
29
50
|
def all
|
30
|
-
|
31
|
-
|
51
|
+
each_resource(url)
|
52
|
+
end
|
32
53
|
|
33
|
-
|
54
|
+
# Fetch all data and return in an array.
|
55
|
+
# @return [Array] Hashes of the returned data.
|
56
|
+
def data
|
57
|
+
all.to_a
|
34
58
|
end
|
35
59
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
@params['resource_group'] = resource_group if resource_group
|
41
|
-
self
|
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)
|
42
64
|
end
|
43
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.
|
44
68
|
def count
|
45
|
-
fetch.
|
69
|
+
fetch.json&.fetch(:total_count)
|
46
70
|
end
|
47
71
|
|
48
|
-
|
49
|
-
|
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)
|
50
78
|
end
|
51
79
|
|
80
|
+
# Access a specific instance by either id or name depending on API.
|
52
81
|
def instance(id)
|
53
82
|
@instance.new(self, id)
|
54
83
|
end
|
55
84
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
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
|
61
102
|
|
62
|
-
|
63
|
-
post(payload)
|
103
|
+
each_resource(next_url, &block)
|
64
104
|
end
|
65
105
|
end
|
66
106
|
end
|
@@ -8,14 +8,14 @@ module IBM
|
|
8
8
|
class BaseVPC
|
9
9
|
def initialize(parent, endpoint = nil)
|
10
10
|
@endpoint = parent.url(endpoint)
|
11
|
-
@
|
11
|
+
@connection = parent.connection
|
12
12
|
@logger = parent.logger
|
13
13
|
end
|
14
14
|
|
15
|
-
attr_reader :endpoint, :
|
15
|
+
attr_reader :endpoint, :connection, :logger
|
16
16
|
|
17
17
|
def adhoc(method: 'get', path: nil, params: {}, payload_type: 'json', payload: {})
|
18
|
-
@
|
18
|
+
@connection.adhoc(method.to_sym, url(path), metadata(params, payload_type, payload))
|
19
19
|
end
|
20
20
|
|
21
21
|
def get(path: nil, params: {})
|
@@ -23,7 +23,7 @@ module IBM
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def post(payload = {}, path: nil, params: {}, type: 'json')
|
26
|
-
adhoc(method: 'post', path: path, params: params, payload: payload)
|
26
|
+
adhoc(method: 'post', path: path, params: params, payload: payload, payload_type: type)
|
27
27
|
end
|
28
28
|
|
29
29
|
def put(payload = {}, path: nil, params: {})
|
@@ -12,7 +12,7 @@ module IBM
|
|
12
12
|
@logger ||= Logger.new($stdout, level: :warn)
|
13
13
|
|
14
14
|
@client = HTTP.use(http_options(options))
|
15
|
-
@
|
15
|
+
@connection = IBM::Cloud::SDK::VPC::Connection.new(api_key, logger: @logger, client: @client)
|
16
16
|
end
|
17
17
|
|
18
18
|
def http_options(options = {})
|
@@ -24,10 +24,10 @@ module IBM
|
|
24
24
|
)
|
25
25
|
end
|
26
26
|
|
27
|
-
attr_reader :logger, :
|
27
|
+
attr_reader :logger, :connection
|
28
28
|
|
29
29
|
def vpc(region = 'us-east')
|
30
|
-
IBM::Cloud::SDK::Vpc.new(region, @
|
30
|
+
IBM::Cloud::SDK::Vpc.new(region, @connection, logger: @logger)
|
31
31
|
end
|
32
32
|
end
|
33
|
-
end
|
33
|
+
end
|
@@ -32,6 +32,8 @@ module IBM
|
|
32
32
|
response.code
|
33
33
|
end
|
34
34
|
|
35
|
+
alias_method :status, :code
|
36
|
+
|
35
37
|
# Return the raw connection object.
|
36
38
|
def connection
|
37
39
|
response.connection
|
@@ -73,7 +75,7 @@ module IBM
|
|
73
75
|
sym_key = key.to_sym
|
74
76
|
return ret.fetch(sym_key) if ret.key?(sym_key)
|
75
77
|
|
76
|
-
raise "Key not found in #{ret}."
|
78
|
+
raise "Key #{key} not found in #{ret}."
|
77
79
|
end
|
78
80
|
|
79
81
|
# Check to see if the returned object is the expected object.
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# typed: true
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
module IBM
|
5
|
+
module Cloud
|
6
|
+
module SDK
|
7
|
+
module VPC
|
8
|
+
# Work with multiple profiles.
|
9
|
+
class InstanceProfiles < BaseCollection
|
10
|
+
def initialize(parent)
|
11
|
+
super(parent, 'instance/profiles', child_class: Profile, array_key: 'profiles')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# Get a single profile.
|
16
|
+
class Profile < BaseInstance
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ibm-cloud-sdk
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- IBM Cloud Developers
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-09-
|
11
|
+
date: 2020-09-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -79,8 +79,8 @@ files:
|
|
79
79
|
- lib/ibm/cloud/sdk/vpc/instance/actions.rb
|
80
80
|
- lib/ibm/cloud/sdk/vpc/instance/floating_ips.rb
|
81
81
|
- lib/ibm/cloud/sdk/vpc/instance/network_interfaces.rb
|
82
|
-
- lib/ibm/cloud/sdk/vpc/instance/profiles.rb
|
83
82
|
- lib/ibm/cloud/sdk/vpc/instance/volume_attachments.rb
|
83
|
+
- lib/ibm/cloud/sdk/vpc/instance_profiles.rb
|
84
84
|
- lib/ibm/cloud/sdk/vpc/instances.rb
|
85
85
|
- lib/ibm/cloud/sdk/vpc/ipsec_policies.rb
|
86
86
|
- lib/ibm/cloud/sdk/vpc/keys.rb
|
@@ -109,7 +109,7 @@ licenses:
|
|
109
109
|
- '"Apache-2.0"'
|
110
110
|
metadata:
|
111
111
|
homepage_uri: https://github.com/IBM-Cloud/ibm-cloud-sdk-ruby
|
112
|
-
changelog_uri: https://github.com/IBM-Cloud/ibm-cloud-sdk-ruby/blob/v0.1.
|
112
|
+
changelog_uri: https://github.com/IBM-Cloud/ibm-cloud-sdk-ruby/blob/v0.1.5/CHANGELOG.md
|
113
113
|
post_install_message:
|
114
114
|
rdoc_options: []
|
115
115
|
require_paths:
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# typed: true
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
module IBM
|
5
|
-
module Cloud
|
6
|
-
module SDK
|
7
|
-
module VPC
|
8
|
-
module INSTANCES
|
9
|
-
# Work with multiple profiles.
|
10
|
-
class Profiles < BaseVPC
|
11
|
-
def initialize(parent)
|
12
|
-
super(parent, 'instance/profiles')
|
13
|
-
end
|
14
|
-
|
15
|
-
def all
|
16
|
-
get
|
17
|
-
end
|
18
|
-
|
19
|
-
def instance(name)
|
20
|
-
Profile.new(self, name)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
# Get a single profile.
|
25
|
-
class Profile < BaseVPC
|
26
|
-
def details
|
27
|
-
get
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|