hyperb 0.6.0 → 0.7.0
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/.rubocop.yml +1 -1
- data/README.md +13 -1
- data/hyperb.gemspec +1 -0
- data/lib/hyperb/client.rb +24 -1
- data/lib/hyperb/containers/host_config.rb +1 -1
- data/lib/hyperb/error.rb +8 -1
- data/lib/hyperb/request.rb +23 -12
- data/lib/hyperb/version.rb +1 -1
- data/spec/client_spec.rb +26 -0
- data/spec/compose_spec.rb +1 -1
- data/spec/container_spec.rb +1 -1
- data/spec/containers_spec.rb +2 -2
- data/spec/error_spec.rb +1 -1
- data/spec/funcs_spec.rb +2 -2
- data/spec/helper.rb +14 -1
- data/spec/images_spec.rb +5 -6
- data/spec/misc_spec.rb +1 -1
- data/spec/network_spec.rb +1 -1
- data/spec/services_spec.rb +1 -1
- data/spec/snapshots_spec.rb +1 -1
- data/spec/volumes_spec.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9f045c224b54d0ecc9ee1e45cc89fb352aa5160
|
4
|
+
data.tar.gz: c4a8bac272ea63b754689d6e8dcd2f680d117b8c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ff12b4b5343c8e441052f51ab771579d7d1355aa3e507d7e89124581c1ea727aaf95f760a571ce04f9735ae01ccadc72a3fb322158774342bd207a59834b06c
|
7
|
+
data.tar.gz: 2544f2cd88858f8db54f16689dfaf7cc498282a781f2774ac249d725c913197aac77fc5b71ec58e704f987b895f98e64edbae22ee32cdaf8d4dc0ebf5a45edd1
|
data/.rubocop.yml
CHANGED
data/README.md
CHANGED
@@ -37,9 +37,21 @@ Or install it yourself as:
|
|
37
37
|
Hyper.sh requires you to create credentials on their [dashboard](https://console.hyper.sh/account/credential), after that you can configure your client as following:
|
38
38
|
|
39
39
|
```ruby
|
40
|
-
client = Hyperb::Client.new(access_key: 'ak', secret_key: 'sk')
|
40
|
+
client = Hyperb::Client.new(access_key: 'ak', secret_key: 'sk', region: 'us-west-1')
|
41
41
|
```
|
42
42
|
|
43
|
+
or
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
client = Hyperb::Client.new do |client|
|
47
|
+
client.secret_key = 'secret_key',
|
48
|
+
client.access_key = 'access_key',
|
49
|
+
client.region = 'eu-central-1'
|
50
|
+
end
|
51
|
+
```
|
52
|
+
|
53
|
+
If `region` is not set, `us-west-1` is set by default.
|
54
|
+
|
43
55
|
## Usage Examples
|
44
56
|
|
45
57
|
After configuring a `client`, you can run the following examples.
|
data/hyperb.gemspec
CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency 'simplecov', '~> 0.9'
|
26
26
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
27
27
|
spec.add_development_dependency 'pry', '~> 0.10.4'
|
28
|
+
spec.add_development_dependency 'pry-byebug'
|
28
29
|
|
29
30
|
spec.required_ruby_version = '>= 2.2'
|
30
31
|
end
|
data/lib/hyperb/client.rb
CHANGED
@@ -1,19 +1,42 @@
|
|
1
1
|
require 'hyperb/api'
|
2
|
+
require 'hyperb/error'
|
2
3
|
|
3
4
|
module Hyperb
|
4
5
|
# client class
|
5
6
|
class Client
|
6
7
|
include Hyperb::API
|
7
8
|
|
8
|
-
|
9
|
+
REGIONS = [
|
10
|
+
'us-west-1',
|
11
|
+
'eu-central-1'
|
12
|
+
].freeze
|
13
|
+
|
14
|
+
attr_accessor :secret_key, :access_key, :region
|
9
15
|
|
10
16
|
def initialize(options = {})
|
11
17
|
options.each do |key, value|
|
12
18
|
instance_variable_set("@#{key}", value)
|
13
19
|
end
|
20
|
+
validate_and_set_region
|
14
21
|
yield(self) if block_given?
|
15
22
|
end
|
16
23
|
|
24
|
+
def validate_and_set_region
|
25
|
+
if @region.nil?
|
26
|
+
@region = default_region
|
27
|
+
else
|
28
|
+
raise Hyperb::Error::UnsupportedRegion, @region.to_s unless supported_region?(@region)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def default_region
|
33
|
+
REGIONS.first
|
34
|
+
end
|
35
|
+
|
36
|
+
def supported_region?(region)
|
37
|
+
REGIONS.include?(region.to_s)
|
38
|
+
end
|
39
|
+
|
17
40
|
def credentials
|
18
41
|
{
|
19
42
|
secret_key: secret_key,
|
data/lib/hyperb/error.rb
CHANGED
@@ -3,6 +3,13 @@ module Hyperb
|
|
3
3
|
class Error < StandardError
|
4
4
|
attr_reader :code, :msg
|
5
5
|
|
6
|
+
# region not supported
|
7
|
+
class UnsupportedRegion < self
|
8
|
+
def initialize(region)
|
9
|
+
super("Unsupported region: #{region}", nil)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
6
13
|
# 4xx HTTP status code
|
7
14
|
ClientError = Class.new(self)
|
8
15
|
|
@@ -36,7 +43,7 @@ module Hyperb
|
|
36
43
|
500 => Hyperb::Error::InternalServerError
|
37
44
|
}.freeze
|
38
45
|
|
39
|
-
def initialize(msg, code)
|
46
|
+
def initialize(msg, code = nil)
|
40
47
|
super(msg)
|
41
48
|
@code = code
|
42
49
|
end
|
data/lib/hyperb/request.rb
CHANGED
@@ -11,12 +11,10 @@ module Hyperb
|
|
11
11
|
class Request
|
12
12
|
FMT = '%Y%m%dT%H%M%SZ'.freeze
|
13
13
|
VERSION = 'v1.23'.freeze
|
14
|
-
|
15
|
-
REGION = 'us-west-1'.freeze
|
14
|
+
|
16
15
|
SERVICE = 'hyper'.freeze
|
17
16
|
ALGORITHM = 'HYPER-HMAC-SHA256'.freeze
|
18
17
|
KEYPARTS_REQUEST = 'hyper_request'.freeze
|
19
|
-
BASE_URL = "https://#{HOST}/".freeze
|
20
18
|
|
21
19
|
attr_accessor :verb, :path, :client, :date, :headers, :signed
|
22
20
|
|
@@ -28,19 +26,27 @@ module Hyperb
|
|
28
26
|
@hashed_body = hexdigest(@body)
|
29
27
|
@verb = verb.upcase
|
30
28
|
@date = Time.now.utc.strftime(FMT)
|
29
|
+
|
30
|
+
set_base_url
|
31
|
+
|
31
32
|
@headers = {
|
32
33
|
content_type: 'application/json',
|
33
34
|
x_hyper_date: @date,
|
34
|
-
host:
|
35
|
+
host: @host,
|
35
36
|
x_hyper_content_sha256: @hashed_body
|
36
37
|
}
|
37
38
|
@headers.merge!(optional_headers) unless optional_headers.empty?
|
38
39
|
@signed = false
|
39
40
|
end
|
40
41
|
|
42
|
+
def set_base_url
|
43
|
+
@host = "#{client.region}.hyper.sh".freeze
|
44
|
+
@base_url = "https://#{@host}/".freeze
|
45
|
+
end
|
46
|
+
|
41
47
|
def perform
|
42
48
|
sign unless signed
|
43
|
-
final =
|
49
|
+
final = @base_url + @path + '?' + @query
|
44
50
|
options = {}
|
45
51
|
options[:body] = @body unless @body.empty?
|
46
52
|
response = HTTP.headers(@headers).public_send(@verb.downcase.to_sym, final, options)
|
@@ -84,7 +90,7 @@ module Hyperb
|
|
84
90
|
# https://docs.hyper.sh/Reference/API/2016-04-04%20[Ver.%201.23]/index.html
|
85
91
|
def signature
|
86
92
|
k_date = hmac('HYPER' + @client.secret_key, @date[0, 8])
|
87
|
-
k_region = hmac(k_date,
|
93
|
+
k_region = hmac(k_date, 'us-west-1')
|
88
94
|
k_service = hmac(k_region, SERVICE)
|
89
95
|
k_credentials = hmac(k_service, KEYPARTS_REQUEST)
|
90
96
|
hexhmac(k_credentials, string_to_sign)
|
@@ -108,7 +114,7 @@ module Hyperb
|
|
108
114
|
def credential_scope
|
109
115
|
[
|
110
116
|
@date[0, 8],
|
111
|
-
|
117
|
+
'us-west-1',
|
112
118
|
SERVICE,
|
113
119
|
KEYPARTS_REQUEST
|
114
120
|
].join("/") # rubocop:disable StringLiterals
|
@@ -129,13 +135,13 @@ module Hyperb
|
|
129
135
|
|
130
136
|
# func requests are very simple, they do not require signing
|
131
137
|
class FuncCallRequest
|
132
|
-
|
133
|
-
URL = "https://#{REGION}.hyperfunc.io/".freeze
|
134
|
-
|
135
|
-
attr_accessor :path, :query, :verb, :body, :headers
|
138
|
+
attr_accessor :client, :path, :query, :verb, :body, :headers
|
136
139
|
|
137
140
|
def initialize(client, path, query = {}, verb = 'GET', body = '')
|
138
141
|
@client = client
|
142
|
+
|
143
|
+
set_base_url
|
144
|
+
|
139
145
|
@path = path
|
140
146
|
@verb = verb
|
141
147
|
@query = URI.encode_www_form(query)
|
@@ -143,8 +149,13 @@ module Hyperb
|
|
143
149
|
@headers = { content_type: 'application/json' }
|
144
150
|
end
|
145
151
|
|
152
|
+
def set_base_url
|
153
|
+
@host = "#{client.region}.hyperfunc.io".freeze
|
154
|
+
@base_url = "https://#{@host}/".freeze
|
155
|
+
end
|
156
|
+
|
146
157
|
def perform
|
147
|
-
final_url =
|
158
|
+
final_url = @base_url + @path + '?' + @query
|
148
159
|
options = {}
|
149
160
|
options[:body] = @body unless @body.empty?
|
150
161
|
response = HTTP.headers(@headers).public_send(@verb.downcase.to_sym, final_url, options)
|
data/lib/hyperb/version.rb
CHANGED
data/spec/client_spec.rb
CHANGED
@@ -22,6 +22,32 @@ RSpec.describe Hyperb::Client do
|
|
22
22
|
client = Hyperb::Client.new(secret_key: 'SK')
|
23
23
|
expect(client.credentials?).to be false
|
24
24
|
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#region' do
|
28
|
+
|
29
|
+
it 'should set region' do
|
30
|
+
client = Hyperb::Client.new do |c|
|
31
|
+
c.access_key = 's'
|
32
|
+
c.secret_key = 'key'
|
33
|
+
c.region = 'eu-central-1'
|
34
|
+
end
|
35
|
+
expect(client.region).to eql('eu-central-1')
|
36
|
+
end
|
25
37
|
|
38
|
+
it 'should raise UnsupportedRegion' do
|
39
|
+
expect { Hyperb::Client.new(access_key: 's', secret_key: 'key', region: 'eu-unsup')}.to raise_error do |e|
|
40
|
+
expect(e).to be_a Hyperb::Error::UnsupportedRegion
|
41
|
+
expect(e.message).to eql('Unsupported region: eu-unsup')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should set default region' do
|
46
|
+
client = Hyperb::Client.new do |c|
|
47
|
+
c.access_key = 's'
|
48
|
+
c.secret_key = 'key'
|
49
|
+
end
|
50
|
+
expect(client.region).to eql(client.default_region)
|
51
|
+
end
|
26
52
|
end
|
27
53
|
end
|
data/spec/compose_spec.rb
CHANGED
@@ -5,7 +5,7 @@ RSpec.describe Hyperb::Compose do
|
|
5
5
|
|
6
6
|
before do
|
7
7
|
@client = Hyperb::Client.new(access_key: 'key', secret_key: '123')
|
8
|
-
@base_path =
|
8
|
+
@base_path = "#{base_url(@client)}/compose/"
|
9
9
|
end
|
10
10
|
|
11
11
|
describe '#compose_down' do
|
data/spec/container_spec.rb
CHANGED
data/spec/containers_spec.rb
CHANGED
@@ -6,7 +6,8 @@ RSpec.describe Hyperb::Containers do
|
|
6
6
|
before do
|
7
7
|
@client = Hyperb::Client.new(access_key: 'key', secret_key: '123')
|
8
8
|
|
9
|
-
@containers_base_path =
|
9
|
+
@containers_base_path = "#{base_url(@client)}/containers/"
|
10
|
+
|
10
11
|
@containers_path = @containers_base_path + 'json'
|
11
12
|
@remove_container_path = @containers_base_path
|
12
13
|
@create_container_path = @containers_base_path + 'create'
|
@@ -404,7 +405,6 @@ RSpec.describe Hyperb::Containers do
|
|
404
405
|
expect(a_request(:post, path)
|
405
406
|
.with(body: "")).to have_been_made
|
406
407
|
end
|
407
|
-
|
408
408
|
end
|
409
409
|
|
410
410
|
describe '#container_logs' do
|
data/spec/error_spec.rb
CHANGED
@@ -4,8 +4,8 @@ RSpec.describe Hyperb::Error do
|
|
4
4
|
|
5
5
|
before do
|
6
6
|
# random url for request mocking
|
7
|
-
@path = Hyperb::Request::BASE_URL + Hyperb::Request::VERSION + '/version'
|
8
7
|
@client = Hyperb::Client.new secret_key: '123', access_key: 'ak'
|
8
|
+
@path = "#{base_url(@client)}/version"
|
9
9
|
end
|
10
10
|
|
11
11
|
Hyperb::Error::ERRORS.each do |code, exception|
|
data/spec/funcs_spec.rb
CHANGED
@@ -4,8 +4,8 @@ RSpec.describe Hyperb::Funcs do
|
|
4
4
|
|
5
5
|
before do
|
6
6
|
@client = Hyperb::Client.new(access_key: 'key', secret_key: '123')
|
7
|
-
@funcs_path =
|
8
|
-
@call_path =
|
7
|
+
@funcs_path = "#{base_url(@client)}/funcs"
|
8
|
+
@call_path = funcs_base_url(@client)
|
9
9
|
end
|
10
10
|
|
11
11
|
describe '#funcs' do
|
data/spec/helper.rb
CHANGED
@@ -16,6 +16,7 @@ require 'webmock/rspec'
|
|
16
16
|
WebMock.disable_net_connect!(allow: 'coveralls.io')
|
17
17
|
|
18
18
|
RSpec.configure do |config|
|
19
|
+
|
19
20
|
# Enable flags like --only-failures and --next-failure
|
20
21
|
config.example_status_persistence_file_path = ".rspec_status"
|
21
22
|
|
@@ -25,6 +26,9 @@ RSpec.configure do |config|
|
|
25
26
|
config.expect_with :rspec do |c|
|
26
27
|
c.syntax = :expect
|
27
28
|
end
|
29
|
+
|
30
|
+
config.run_all_when_everything_filtered = true
|
31
|
+
config.filter_run focus: true
|
28
32
|
end
|
29
33
|
|
30
34
|
def fixture_path
|
@@ -33,4 +37,13 @@ end
|
|
33
37
|
|
34
38
|
def fixture(file)
|
35
39
|
File.new(fixture_path + '/' + file)
|
36
|
-
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def base_url(client)
|
43
|
+
host = "#{client.region}.hyper.sh".freeze
|
44
|
+
"https://#{host}/#{Hyperb::Request::VERSION}".freeze
|
45
|
+
end
|
46
|
+
|
47
|
+
def funcs_base_url(client)
|
48
|
+
"https://#{client.region}.hyperfunc.io/".freeze
|
49
|
+
end
|
data/spec/images_spec.rb
CHANGED
@@ -5,10 +5,10 @@ RSpec.describe Hyperb::Images do
|
|
5
5
|
|
6
6
|
before do
|
7
7
|
@client = Hyperb::Client.new(access_key: 'key', secret_key: '123')
|
8
|
-
@images_path =
|
9
|
-
@create_image_path =
|
10
|
-
@remove_image_path =
|
11
|
-
@inspect_image_path =
|
8
|
+
@images_path = "#{base_url(@client)}/images/json?all=true"
|
9
|
+
@create_image_path = "#{base_url(@client)}/images/create?fromImage=busybox"
|
10
|
+
@remove_image_path = "#{base_url(@client)}/images/busybox"
|
11
|
+
@inspect_image_path = "#{base_url(@client)}/images/busybox/json"
|
12
12
|
end
|
13
13
|
|
14
14
|
describe '#images' do
|
@@ -43,7 +43,6 @@ RSpec.describe Hyperb::Images do
|
|
43
43
|
expect(img.created).to be_a Fixnum
|
44
44
|
end
|
45
45
|
end
|
46
|
-
|
47
46
|
end
|
48
47
|
|
49
48
|
describe '#create_image' do
|
@@ -68,7 +67,7 @@ RSpec.describe Hyperb::Images do
|
|
68
67
|
end
|
69
68
|
|
70
69
|
it 'create image with auth_object' do
|
71
|
-
p =
|
70
|
+
p = "#{base_url(@client)}/images/create?fromImage=gcr.io/private/custom_busybox"
|
72
71
|
stub_request(:post, p)
|
73
72
|
.to_return(body: fixture('create_image.json'))
|
74
73
|
|
data/spec/misc_spec.rb
CHANGED
data/spec/network_spec.rb
CHANGED
@@ -4,7 +4,7 @@ RSpec.describe Hyperb::Network do
|
|
4
4
|
|
5
5
|
before do
|
6
6
|
@client = Hyperb::Client.new(access_key: 'key', secret_key: '123')
|
7
|
-
@base_path =
|
7
|
+
@base_path = "#{base_url(@client)}/fips"
|
8
8
|
end
|
9
9
|
|
10
10
|
describe '#fip_allocate' do
|
data/spec/services_spec.rb
CHANGED
@@ -5,7 +5,7 @@ RSpec.describe Hyperb::Services do
|
|
5
5
|
|
6
6
|
before do
|
7
7
|
@client = Hyperb::Client.new(access_key: 'key', secret_key: '123')
|
8
|
-
@base_path =
|
8
|
+
@base_path = "#{base_url(@client)}/services"
|
9
9
|
end
|
10
10
|
|
11
11
|
describe '#inspect_service' do
|
data/spec/snapshots_spec.rb
CHANGED
@@ -5,7 +5,7 @@ RSpec.describe Hyperb::Snapshots do
|
|
5
5
|
|
6
6
|
before do
|
7
7
|
@client = Hyperb::Client.new(access_key: 'key', secret_key: '123')
|
8
|
-
@base_path =
|
8
|
+
@base_path = "#{base_url(@client)}/snapshots"
|
9
9
|
end
|
10
10
|
|
11
11
|
describe '#create_snapshot' do
|
data/spec/volumes_spec.rb
CHANGED
@@ -5,7 +5,7 @@ RSpec.describe Hyperb::Volumes do
|
|
5
5
|
|
6
6
|
before do
|
7
7
|
@client = Hyperb::Client.new(access_key: 'key', secret_key: '123')
|
8
|
-
@base_path =
|
8
|
+
@base_path = "#{base_url(@client)}/volumes"
|
9
9
|
end
|
10
10
|
|
11
11
|
describe '#remove_volume' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyperb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- drish
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-09-
|
11
|
+
date: 2017-09-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|
@@ -114,6 +114,20 @@ dependencies:
|
|
114
114
|
- - ~>
|
115
115
|
- !ruby/object:Gem::Version
|
116
116
|
version: 0.10.4
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: pry-byebug
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - '>='
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - '>='
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
117
131
|
description: The Hyper.sh Ruby Gem
|
118
132
|
email:
|
119
133
|
- carlosderich@gmail.com
|