ibm-cloud-sdk 0.1.10 → 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 +3 -0
- data/lib/ibm/cloud/sdk/version.rb +1 -1
- data/lib/ibm/cloud/sdk/vpc/http/vpc_http.rb +9 -10
- data/lib/ibm/cloud/sdk/vpc/instance/actions.rb +75 -0
- data/lib/ibm/cloud/sdk/vpc/instances.rb +97 -0
- data/lib/ibm/cloud/sdk/vpc/vpn_gateway/local_cidrs.rb +1 -1
- data/lib/ibm/cloud/sdk/vpc/vpn_gateway/peer_cidrs.rb +1 -1
- data/lib/ibm/cloud/sdk_http/base_http_mixin.rb +77 -20
- data/lib/ibm/cloud/sdk_http/base_instance.rb +1 -1
- data/lib/ibm/cloud/sdk_http/connection.rb +7 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 336ae42302a72e720775cd6d0c6e193e4a6c9c2b2c4e2858b0c02e5d85e96380
|
4
|
+
data.tar.gz: 937ccbcf0d347b0bfaf06f959cf0e96a0aa9ea3816880795da47bfa60d0da3f5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 511b9535c80328b92c3e9645a46058f26fda766444ecaf76fd71f8f64ebeea490aaec3284544df68b0cb84bec69dd50f1298dc20d48af17351db6abb60e858bd
|
7
|
+
data.tar.gz: 3f1ac1719230d2a8c2ed9e2645d8311c61e7b697dfc36960df9019224392facd5aab3e815ad5fd486ef9a863c935a019e41672c83881c0650a8144901334a8ad
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# Changelog
|
2
2
|
All notable changes to the gem ibm-cloud-sdk-ruby will be documented here.
|
3
3
|
|
4
|
+
## v0.1.11 - 2020-10-28
|
5
|
+
- Add start, stop, and reboot actions on VPC instances
|
6
|
+
|
4
7
|
## v0.1.10 - 2020-10-08
|
5
8
|
- Change VPC http provider to HTTParty
|
6
9
|
- Add Tags API and clean up VPC
|
@@ -11,16 +11,15 @@ module IBM
|
|
11
11
|
module VpcHTTP
|
12
12
|
include SDKHTTP::BaseHTTPMixin
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
}
|
14
|
+
# Preprocess request parameters, add required version and generation parameters to query.
|
15
|
+
# @param query [Hash] A hash of query parameters.
|
16
|
+
# @param payload [Hash] A hash to send as the body.
|
17
|
+
# @param payload_type [Hash] If json then convert to json string, else send as form data.
|
18
|
+
# @return [Hash]
|
19
|
+
def metadata(query = nil, payload = nil, payload_type = 'json')
|
20
|
+
default_params = { version: '2020-08-01', generation: 2 }
|
21
|
+
default_params.merge!(query) if query
|
22
|
+
super(default_params, payload, payload_type)
|
24
23
|
end
|
25
24
|
end
|
26
25
|
end
|
@@ -1,6 +1,9 @@
|
|
1
1
|
# typed: true
|
2
2
|
# frozen_string_literal: true
|
3
3
|
|
4
|
+
require 'date'
|
5
|
+
require 'forwardable'
|
6
|
+
|
4
7
|
module IBM
|
5
8
|
module Cloud
|
6
9
|
module SDK
|
@@ -11,6 +14,78 @@ module IBM
|
|
11
14
|
def initialize(parent)
|
12
15
|
super(parent, 'actions')
|
13
16
|
end
|
17
|
+
|
18
|
+
# Send an action request to start the instance.
|
19
|
+
def start
|
20
|
+
create('start')
|
21
|
+
end
|
22
|
+
|
23
|
+
# Send an action request to stop the instance.
|
24
|
+
# @param force [Boolean] Clear the queue and run this action.
|
25
|
+
def stop(force: false)
|
26
|
+
create('stop', force: force)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Send an action request to reboot the instance.
|
30
|
+
# @param force [Boolean] Clear the queue and run this action.
|
31
|
+
def reboot(force: false)
|
32
|
+
create('reboot', force: force)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Send a custom action request.
|
36
|
+
# @param action [String] The type of action. Allowable values: [reboot, start, stop]
|
37
|
+
# @param force [Boolean] If set to true, the action will be forced immediately, and all queued actions deleted. Ignored for the start action.
|
38
|
+
def create(action, force: false)
|
39
|
+
@logger.info("Sending action request for #{action} with force #{force}.")
|
40
|
+
payload = { type: action }
|
41
|
+
payload[:force] = force if force
|
42
|
+
response = post(payload: payload)
|
43
|
+
Action.new(response)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# A base class that wraps the action response.
|
48
|
+
class Action
|
49
|
+
def initialize(response)
|
50
|
+
@response = response
|
51
|
+
@data = response.json
|
52
|
+
@keys = %i[type force created_at]
|
53
|
+
@deprecated = %i[completed_at started_at status id href]
|
54
|
+
|
55
|
+
clear_deprecated
|
56
|
+
add_inst_vars(@keys)
|
57
|
+
end
|
58
|
+
|
59
|
+
# Return the DateTime the action was created.
|
60
|
+
# @return [DateTime]
|
61
|
+
def created_at
|
62
|
+
return DateTime.parse(@created_at) if @created_at
|
63
|
+
|
64
|
+
@created_at
|
65
|
+
end
|
66
|
+
|
67
|
+
# The HTTP response object.
|
68
|
+
attr_accessor :response, :data
|
69
|
+
|
70
|
+
extend Forwardable
|
71
|
+
def_delegators :@data, :[], :dig, :each_pair, :each, :fetch, :has_key?, :has_value?, :include?, :index, :inspect, :key?, :keys, :length, :merge, :merge!, :clear, :to_h, :value?, :values, :pretty_print
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
# Iterate through an array of symbols. Set the instance variable and attr_accessor for each.
|
76
|
+
def add_inst_vars(keys)
|
77
|
+
keys.each do |k|
|
78
|
+
instance_variable_set "@#{k}", @data[k]
|
79
|
+
self.class.attr_accessor k unless respond_to?(k)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# Remove deprecated keys from hash.
|
84
|
+
def clear_deprecated
|
85
|
+
@data.each do |k, _v|
|
86
|
+
@data.delete(k) if @deprecated.include?(k)
|
87
|
+
end
|
88
|
+
end
|
14
89
|
end
|
15
90
|
end
|
16
91
|
end
|
@@ -38,21 +38,118 @@ module IBM
|
|
38
38
|
|
39
39
|
# Work with a single instance.
|
40
40
|
class Instance < VPCInstance
|
41
|
+
TRANSITIONAL_STATES = %w[pausing pending restarting resuming starting stopping].freeze
|
42
|
+
ERROR_STATE = 'failed'
|
43
|
+
RUNNING_STATE = 'running'
|
44
|
+
STOPPED_STATES = %w[stopped paused].freeze
|
45
|
+
|
46
|
+
# The id of this VM.
|
47
|
+
def id
|
48
|
+
@data[:id]
|
49
|
+
end
|
50
|
+
|
51
|
+
# The name of this VM.
|
52
|
+
def name
|
53
|
+
@data[:name]
|
54
|
+
end
|
55
|
+
|
56
|
+
# The status of the virtual server instance. Possible values: [failed,paused,pausing,pending,restarting,resuming,running,starting,stopped,stopping]
|
57
|
+
def status
|
58
|
+
@data[:status]
|
59
|
+
end
|
60
|
+
|
61
|
+
# Whether the state of the VM is in failed state.
|
62
|
+
# @return [Boolean]
|
63
|
+
def failed?
|
64
|
+
status == ERROR_STATE
|
65
|
+
end
|
66
|
+
|
67
|
+
# Whether the state of the VM is in the started state.
|
68
|
+
# @return [Boolean]
|
69
|
+
def started?
|
70
|
+
status == RUNNING_STATE
|
71
|
+
end
|
72
|
+
|
73
|
+
# Whether the state of the VM is in a stopped or paused state.
|
74
|
+
# @return [Boolean]
|
75
|
+
def stopped?
|
76
|
+
STOPPED_STATES.include?(status)
|
77
|
+
end
|
78
|
+
|
79
|
+
# Whether the state of the VM is in a transitional state.
|
80
|
+
# @return [Boolean]
|
81
|
+
def transitional?
|
82
|
+
TRANSITIONAL_STATES.include?(status)
|
83
|
+
end
|
84
|
+
|
85
|
+
# Interact with instance actions.
|
86
|
+
# @return [INSTANCE::Actions]
|
41
87
|
def actions
|
42
88
|
INSTANCE::Actions.new(self)
|
43
89
|
end
|
44
90
|
|
91
|
+
# Interact with instance network interfaces.
|
92
|
+
# @return [INSTANCE::NetworkInterfaces]
|
45
93
|
def network_interfaces
|
46
94
|
INSTANCE::NetworkInterfaces.new(self)
|
47
95
|
end
|
48
96
|
|
97
|
+
# Interact with instance volume attachements.
|
98
|
+
# @return [INSTANCE::VolumeAttachments]
|
49
99
|
def volume_attachments
|
50
100
|
INSTANCE::VolumeAttachments.new(self)
|
51
101
|
end
|
52
102
|
|
103
|
+
# Return the data used for initializing this VM.
|
53
104
|
def initialization
|
54
105
|
adhoc(method: 'get', path: 'initialization').json
|
55
106
|
end
|
107
|
+
|
108
|
+
# Wait for the VM instance to be in a stable state.
|
109
|
+
# @param sleep_time [Integer] The time to sleep between refreshes.
|
110
|
+
# @param timeout [Integer] The number of seconds before raising an error.
|
111
|
+
# @param block [Proc] A block to test against. Must return a boolean.
|
112
|
+
# @raise [RuntimeError] Instance goes into failed state.
|
113
|
+
# @raise [RuntimeError] Timeout has been reached.
|
114
|
+
def wait_for!(sleep_time: 5, timeout: 600, &block)
|
115
|
+
@logger.info("Starting wait for instance #{id}. Starts in state #{status}.")
|
116
|
+
loop do
|
117
|
+
refresh
|
118
|
+
raise "VM #{id} is in a failed state." if failed?
|
119
|
+
break if block.call(self)
|
120
|
+
|
121
|
+
timeout = sleep_counter(sleep_time, timeout)
|
122
|
+
raise "Time out while waiting #{id} to be stable." if timeout <= 0
|
123
|
+
end
|
124
|
+
@logger.info("Finished wait for instance #{id}. Ends in state #{status}.")
|
125
|
+
end
|
126
|
+
|
127
|
+
# Wait for the VM instance to be have a started status.
|
128
|
+
# @param sleep_time [Integer] The time to sleep between refreshes.
|
129
|
+
# @param timeout [Integer] The number of seconds before raising an error.
|
130
|
+
# @raise [RuntimeError] Instance goes into failed state.
|
131
|
+
# @raise [RuntimeError] Timeout has been reached.
|
132
|
+
def wait_for_started!(sleep_time: 5, timeout: 600)
|
133
|
+
wait_for!(sleep_time: sleep_time, timeout: timeout, &:started?)
|
134
|
+
end
|
135
|
+
|
136
|
+
# Wait for the VM instance to be have a stopped status.
|
137
|
+
# @param sleep_time [Integer] The time to sleep between refreshes.
|
138
|
+
# @param timeout [Integer] The number of seconds before raising an error.
|
139
|
+
# @raise [RuntimeError] Instance goes into failed state.
|
140
|
+
# @raise [RuntimeError] Timeout has been reached.
|
141
|
+
def wait_for_stopped!(sleep_time: 5, timeout: 600)
|
142
|
+
wait_for!(sleep_time: sleep_time, timeout: timeout, &:stopped?)
|
143
|
+
end
|
144
|
+
|
145
|
+
private
|
146
|
+
|
147
|
+
# Sleep for the specificed time and decrement timout by that number.
|
148
|
+
# @return [Integer] The current timeout.
|
149
|
+
def sleep_counter(sleep_time, timeout)
|
150
|
+
sleep sleep_time
|
151
|
+
timeout - sleep_time
|
152
|
+
end
|
56
153
|
end
|
57
154
|
end
|
58
155
|
end
|
@@ -10,47 +10,104 @@ module IBM
|
|
10
10
|
module BaseHTTPMixin
|
11
11
|
@connection = nil
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
# Run a custom query and verify response is 2xx or 404.
|
14
|
+
# @param method [String] The HTTP method to use.
|
15
|
+
# @param path [String] The relative path from the current object location.
|
16
|
+
# @param params [Hash] A hash of query parameters.
|
17
|
+
# @param payload [Hash] A hash to send as the body.
|
18
|
+
# @param payload_type [Hash] If json then convert to json string, else send as form data.
|
19
|
+
# @return [SDKResponse]
|
20
|
+
# @raise [Exceptions::HttpStatusError] Raise if status checks failed.
|
21
|
+
def adhoc(method: 'get', path: nil, params: nil, payload: nil, payload_type: 'json')
|
22
|
+
unchecked_response(method: method, path: path, params: params, payload: payload, payload_type: payload_type).raise_for_status!
|
15
23
|
end
|
16
24
|
|
17
|
-
|
18
|
-
|
25
|
+
# Run a custom query do not verify the response.
|
26
|
+
# @param method [String] The HTTP method to use.
|
27
|
+
# @param path [String] The relative path from the current object location.
|
28
|
+
# @param params [Hash] A hash of query parameters.
|
29
|
+
# @param payload [Hash] A hash to send as the body.
|
30
|
+
# @param payload_type [Hash] If json then convert to json string, else send as form data.
|
31
|
+
def unchecked_response(method: 'get', path: nil, params: nil, payload: nil, payload_type: 'json')
|
32
|
+
@connection.request(method.to_sym, url(path), metadata(params, payload, payload_type))
|
19
33
|
end
|
20
34
|
|
21
|
-
|
35
|
+
attr_reader :endpoint
|
36
|
+
|
37
|
+
# Perform a GET request and verify response is 2xx or 404.
|
38
|
+
# @param path [String] The relative path from the current object location.
|
39
|
+
# @param params [Hash] A hash of query parameters.
|
40
|
+
# @return [SDKResponse]
|
41
|
+
# @raise [Exceptions::HttpStatusError] Raise if status checks failed.
|
42
|
+
def get(path: nil, params: nil)
|
22
43
|
adhoc(method: 'get', path: path, params: params)
|
23
44
|
end
|
24
45
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
46
|
+
# Send a POST request and verify response is 2xx or 404.
|
47
|
+
# @param path [String] The relative path from the current object location.
|
48
|
+
# @param params [Hash] A hash of query parameters.
|
49
|
+
# @param payload [Hash] A hash to send as the body.
|
50
|
+
# @param payload_type [Hash] If json then convert to json string, else send as form data.
|
51
|
+
# @raise [Exceptions::HttpStatusError] Raise if status checks failed.
|
52
|
+
# @return [SDKResponse]
|
53
|
+
def post(payload: nil, path: nil, params: nil, payload_type: 'json')
|
54
|
+
adhoc(method: 'post', path: path, params: params, payload: payload, payload_type: payload_type)
|
29
55
|
end
|
30
56
|
|
31
|
-
|
32
|
-
|
57
|
+
# Send a PUT request and verify response is 2xx or 404.
|
58
|
+
# @param path [String] The relative path from the current object location.
|
59
|
+
# @param params [Hash] A hash of query parameters.
|
60
|
+
# @param payload [Hash] A hash to send as the body.
|
61
|
+
# @param payload_type [Hash] If json then convert to json string, else send as form data.
|
62
|
+
# @raise [Exceptions::HttpStatusError] Raise if status checks failed.
|
63
|
+
# @return [SDKResponse]
|
64
|
+
def put(payload: nil, path: nil, params: nil, payload_type: 'json')
|
65
|
+
adhoc(method: 'put', path: path, params: params, payload: payload, payload_type: payload_type)
|
33
66
|
end
|
34
67
|
|
35
|
-
|
36
|
-
|
68
|
+
# Send a PATCH request and verify response is 2xx or 404.
|
69
|
+
# @param path [String] The relative path from the current object location.
|
70
|
+
# @param params [Hash] A hash of query parameters.
|
71
|
+
# @param payload [Hash] A hash to send as the body.
|
72
|
+
# @param payload_type [Hash] If json then convert to json string, else send as form data.
|
73
|
+
# @raise [Exceptions::HttpStatusError] Raise if status checks failed.
|
74
|
+
# @return [SDKResponse]
|
75
|
+
def patch(payload: nil, path: nil, params: nil, payload_type: 'json')
|
76
|
+
adhoc(method: 'patch', path: path, params: params, payload: payload, payload_type: payload_type)
|
37
77
|
end
|
38
78
|
|
39
|
-
|
79
|
+
# Send a DELETE request and verify response is 2xx or 404.
|
80
|
+
# @param path [String] The relative path from the current object location.
|
81
|
+
# @param params [Hash] A hash of query parameters.
|
82
|
+
# @raise [Exceptions::HttpStatusError] Raise if status checks failed.
|
83
|
+
# @return [SDKResponse]
|
84
|
+
def delete(path: nil, params: nil)
|
40
85
|
adhoc(method: 'delete', path: path, params: params)
|
41
86
|
end
|
42
87
|
|
43
|
-
|
88
|
+
# Preprocess request parameters with any additional data.
|
89
|
+
# @param query [Hash] A hash of query parameters.
|
90
|
+
# @param payload [Hash] A hash to send as the body.
|
91
|
+
# @param payload_type [Hash] If json then convert to json string, else send as form data.
|
92
|
+
# @return [Hash]
|
93
|
+
def metadata(query = nil, payload = nil, payload_type = 'json')
|
44
94
|
@params ||= {}
|
45
|
-
query
|
46
|
-
|
47
|
-
{
|
48
|
-
query: @params
|
49
|
-
body: payload,
|
95
|
+
@params.merge!(query) if query
|
96
|
+
|
97
|
+
send_parameters = {
|
98
|
+
query: @params,
|
50
99
|
headers: { "Authorization": @token.authorization_header }
|
51
100
|
}
|
101
|
+
|
102
|
+
# Add payload if it is not nil.
|
103
|
+
if payload && payload.empty? == false
|
104
|
+
payload = payload.to_json if payload_type == 'json'
|
105
|
+
send_parameters[:body] = payload
|
106
|
+
end
|
107
|
+
send_parameters
|
52
108
|
end
|
53
109
|
|
110
|
+
# Merge path with current class's endpoint.
|
54
111
|
def url(path = nil)
|
55
112
|
return endpoint unless path
|
56
113
|
return path if URI.parse(path).relative? == false
|
@@ -11,7 +11,13 @@ module IBM
|
|
11
11
|
include HTTParty
|
12
12
|
|
13
13
|
def initialize(logger)
|
14
|
-
|
14
|
+
@logger = logger
|
15
|
+
self.class.logger(logger, :debug, :apache)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Set the logger type to curl which has more information.
|
19
|
+
def verbose_logger=(verbosity)
|
20
|
+
default_options[:log_format] = verbosity ? :curl : :apache
|
15
21
|
end
|
16
22
|
|
17
23
|
def default_options
|
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.11
|
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-10-
|
11
|
+
date: 2020-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -121,7 +121,7 @@ licenses:
|
|
121
121
|
- '"Apache-2.0"'
|
122
122
|
metadata:
|
123
123
|
homepage_uri: https://github.com/IBM-Cloud/ibm-cloud-sdk-ruby
|
124
|
-
changelog_uri: https://github.com/IBM-Cloud/ibm-cloud-sdk-ruby/blob/v0.1.
|
124
|
+
changelog_uri: https://github.com/IBM-Cloud/ibm-cloud-sdk-ruby/blob/v0.1.11/CHANGELOG.md
|
125
125
|
post_install_message:
|
126
126
|
rdoc_options: []
|
127
127
|
require_paths:
|