hyperb 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|