hcloud 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +24 -0
- data/.rubocop_todo.yml +148 -0
- data/.travis.yml +3 -1
- data/CHANGELOG.md +40 -0
- data/Gemfile +4 -3
- data/Rakefile +2 -2
- data/bin/console +3 -3
- data/hcloud.gemspec +19 -19
- data/lib/hcloud.rb +1 -1
- data/lib/hcloud/abstract_resource.rb +18 -19
- data/lib/hcloud/action.rb +3 -3
- data/lib/hcloud/action_resource.rb +6 -7
- data/lib/hcloud/client.rb +18 -18
- data/lib/hcloud/datacenter.rb +2 -3
- data/lib/hcloud/datacenter_resource.rb +12 -14
- data/lib/hcloud/entry_loader.rb +6 -6
- data/lib/hcloud/floating_ip.rb +13 -14
- data/lib/hcloud/floating_ip_resource.rb +12 -12
- data/lib/hcloud/image.rb +5 -5
- data/lib/hcloud/image_resource.rb +9 -10
- data/lib/hcloud/iso.rb +2 -2
- data/lib/hcloud/iso_resource.rb +4 -5
- data/lib/hcloud/location.rb +2 -3
- data/lib/hcloud/location_resource.rb +10 -11
- data/lib/hcloud/multi_reply.rb +5 -6
- data/lib/hcloud/pagination.rb +3 -3
- data/lib/hcloud/server.rb +33 -34
- data/lib/hcloud/server_resource.rb +14 -14
- data/lib/hcloud/server_type.rb +2 -3
- data/lib/hcloud/server_type_resource.rb +10 -11
- data/lib/hcloud/ssh_key.rb +4 -5
- data/lib/hcloud/ssh_key_resource.rb +11 -12
- data/lib/hcloud/version.rb +1 -1
- metadata +20 -17
data/lib/hcloud/multi_reply.rb
CHANGED
@@ -4,19 +4,18 @@ module Hcloud
|
|
4
4
|
attr_accessor :cb
|
5
5
|
|
6
6
|
def initialize(j:, pagination: nil)
|
7
|
-
|
8
|
-
|
7
|
+
@j = j
|
8
|
+
@pagination = pagination
|
9
9
|
end
|
10
10
|
|
11
11
|
def pagination
|
12
|
-
@pagination || Pagination.new(@j.first.to_h[
|
12
|
+
@pagination || Pagination.new(@j.first.to_h['meta'].to_h['pagination'], nil, nil)
|
13
13
|
end
|
14
14
|
|
15
|
-
def each
|
15
|
+
def each
|
16
16
|
@cb.call(@j).each do |member|
|
17
|
-
|
17
|
+
yield(member)
|
18
18
|
end
|
19
19
|
end
|
20
|
-
|
21
20
|
end
|
22
21
|
end
|
data/lib/hcloud/pagination.rb
CHANGED
data/lib/hcloud/server.rb
CHANGED
@@ -16,13 +16,13 @@ module Hcloud
|
|
16
16
|
outgoing_traffic: nil,
|
17
17
|
ingoing_traffic: nil,
|
18
18
|
included_traffic: nil
|
19
|
-
}
|
19
|
+
}.freeze
|
20
20
|
|
21
21
|
include EntryLoader
|
22
22
|
|
23
|
-
def update(name:)
|
23
|
+
def update(name:)
|
24
24
|
Server.new(
|
25
|
-
Oj.load(request(base_path, j: {name: name}, method: :put).run.body)[
|
25
|
+
Oj.load(request(base_path, j: { name: name }, method: :put).run.body)['server'],
|
26
26
|
parent,
|
27
27
|
client
|
28
28
|
)
|
@@ -32,56 +32,56 @@ module Hcloud
|
|
32
32
|
action(request(base_path, method: :delete))[0]
|
33
33
|
end
|
34
34
|
|
35
|
-
def enable_rescue(type:
|
35
|
+
def enable_rescue(type: 'linux64', ssh_keys: [])
|
36
36
|
query = {}
|
37
|
-
method(:enable_rescue).parameters.inject(query) do |r,x|
|
37
|
+
method(:enable_rescue).parameters.inject(query) do |r, x|
|
38
38
|
(var = eval(x.last.to_s)).nil? ? r : r.merge!(x.last => var)
|
39
39
|
end
|
40
|
-
a
|
41
|
-
[a, j[
|
40
|
+
a, j = action(request(base_path('actions/enable_rescue'), j: query))
|
41
|
+
[a, j['root_password']]
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
def reset_password
|
45
|
-
a
|
46
|
-
[a, j[
|
45
|
+
a, j = action(request(base_path('actions/reset_password'), method: :post))
|
46
|
+
[a, j['root_password']]
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
def create_image(description: nil, type: nil)
|
50
50
|
query = {}
|
51
|
-
method(:create_image).parameters.inject(query) do |r,x|
|
51
|
+
method(:create_image).parameters.inject(query) do |r, x|
|
52
52
|
(var = eval(x.last.to_s)).nil? ? r : r.merge!(x.last => var)
|
53
53
|
end
|
54
|
-
a
|
55
|
-
[a, Image.new(j[
|
54
|
+
a, j = action(request(base_path('actions/create_image'), j: query))
|
55
|
+
[a, Image.new(j['image'], parent, client)]
|
56
56
|
end
|
57
|
-
|
57
|
+
|
58
58
|
def rebuild(image:)
|
59
|
-
a
|
60
|
-
[a, j[
|
59
|
+
a, j = action(request(base_path('actions/rebuild'), j: { image: image }))
|
60
|
+
[a, j['root_password']]
|
61
61
|
end
|
62
62
|
|
63
63
|
def change_type(server_type:, upgrade_disk: nil)
|
64
64
|
query = {}
|
65
|
-
method(:change_type).parameters.inject(query) do |r,x|
|
65
|
+
method(:change_type).parameters.inject(query) do |r, x|
|
66
66
|
(var = eval(x.last.to_s)).nil? ? r : r.merge!(x.last => var)
|
67
67
|
end
|
68
|
-
action(request(base_path(
|
68
|
+
action(request(base_path('actions/change_type'), j: query))[0]
|
69
69
|
end
|
70
|
-
|
70
|
+
|
71
71
|
def enable_backup(backup_window:)
|
72
|
-
action(request(base_path(
|
73
|
-
j: {backup_window: backup_window}))[0]
|
72
|
+
action(request(base_path('actions/enable_backup'),
|
73
|
+
j: { backup_window: backup_window }))[0]
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
def attach_iso(iso:)
|
77
|
-
action(request(base_path(
|
78
|
-
j: {iso: iso}))[0]
|
77
|
+
action(request(base_path('actions/attach_iso'),
|
78
|
+
j: { iso: iso }))[0]
|
79
79
|
end
|
80
|
-
|
81
|
-
%w
|
82
|
-
poweron poweroff shutdown reboot reset
|
80
|
+
|
81
|
+
%w[
|
82
|
+
poweron poweroff shutdown reboot reset
|
83
83
|
disable_rescue disable_backup detach_iso
|
84
|
-
|
84
|
+
].each do |action|
|
85
85
|
define_method(action) do
|
86
86
|
action(request(base_path("actions/#{action}"), method: :post))[0]
|
87
87
|
end
|
@@ -96,15 +96,14 @@ module Hcloud
|
|
96
96
|
def action(request)
|
97
97
|
j = Oj.load(request.run.body)
|
98
98
|
[
|
99
|
-
Action.new(j[
|
99
|
+
Action.new(j['action'], parent, client),
|
100
100
|
j
|
101
101
|
]
|
102
102
|
end
|
103
103
|
|
104
|
-
def base_path(ext=nil)
|
105
|
-
return ["servers/#{id}",ext].compact.join(
|
106
|
-
raise ResourcePathError,
|
104
|
+
def base_path(ext = nil)
|
105
|
+
return ["servers/#{id}", ext].compact.join('/') unless id.nil?
|
106
|
+
raise ResourcePathError, 'Unable to build resource path. Id is nil.'
|
107
107
|
end
|
108
|
-
|
109
108
|
end
|
110
109
|
end
|
@@ -9,43 +9,43 @@ module Hcloud
|
|
9
9
|
ssh_keys: [],
|
10
10
|
user_data: nil)
|
11
11
|
query = {}
|
12
|
-
method(:create).parameters.inject(query) do |r,x|
|
12
|
+
method(:create).parameters.inject(query) do |r, x|
|
13
13
|
(var = eval(x.last.to_s)).nil? ? r : r.merge!(x.last => var)
|
14
14
|
end
|
15
|
-
j = Oj.load(request(
|
15
|
+
j = Oj.load(request('servers', j: query, code: 200).run.body)
|
16
16
|
[
|
17
|
-
Action.new(j[
|
18
|
-
Server.new(j[
|
19
|
-
j[
|
17
|
+
Action.new(j['action'], self, client),
|
18
|
+
Server.new(j['server'], self, client),
|
19
|
+
j['root_password']
|
20
20
|
]
|
21
21
|
end
|
22
22
|
|
23
23
|
def all
|
24
|
-
mj(
|
25
|
-
j.flat_map{|x| x[
|
24
|
+
mj('servers') do |j|
|
25
|
+
j.flat_map { |x| x['servers'].map { |x| Server.new(x, self, client) } }
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
def find(id)
|
30
30
|
Server.new(
|
31
|
-
Oj.load(request("servers/#{id.to_i}").run.body)[
|
31
|
+
Oj.load(request("servers/#{id.to_i}").run.body)['server'], self, client
|
32
32
|
)
|
33
33
|
end
|
34
34
|
|
35
35
|
def [](arg)
|
36
36
|
case arg
|
37
37
|
when Integer
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
begin
|
39
|
+
find(arg)
|
40
|
+
rescue Error::NotFound
|
41
|
+
end
|
42
42
|
when String
|
43
43
|
find_by(name: arg)
|
44
44
|
end
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
47
|
def find_by(name:)
|
48
|
-
x = Oj.load(request(
|
48
|
+
x = Oj.load(request('servers', q: { name: name }).run.body)['servers']
|
49
49
|
return nil if x.none?
|
50
50
|
x.each do |s|
|
51
51
|
return Server.new(s, self, client)
|
data/lib/hcloud/server_type.rb
CHANGED
@@ -3,37 +3,36 @@ module Hcloud
|
|
3
3
|
include Enumerable
|
4
4
|
|
5
5
|
def all
|
6
|
-
j = Oj.load(request(
|
7
|
-
j[
|
6
|
+
j = Oj.load(request('server_types').run.body)
|
7
|
+
j['server_types'].map { |x| ServerType.new(x, self, client) }
|
8
8
|
end
|
9
9
|
|
10
10
|
def find(id)
|
11
11
|
ServerType.new(
|
12
|
-
Oj.load(request("server_types/#{id}").run.body)[
|
12
|
+
Oj.load(request("server_types/#{id}").run.body)['server_type'],
|
13
13
|
self,
|
14
14
|
client
|
15
15
|
)
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
def find_by(name:)
|
19
|
-
x = Oj.load(request(
|
19
|
+
x = Oj.load(request('server_types', q: { name: name }).run.body)['server_types']
|
20
20
|
return nil if x.none?
|
21
21
|
x.each do |s|
|
22
22
|
return ServerType.new(s, self, client)
|
23
23
|
end
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
def [](arg)
|
27
27
|
case arg
|
28
28
|
when Integer
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
begin
|
30
|
+
find(arg)
|
31
|
+
rescue Error::NotFound
|
32
|
+
end
|
33
33
|
when String
|
34
34
|
find_by(name: arg)
|
35
35
|
end
|
36
36
|
end
|
37
|
-
|
38
37
|
end
|
39
38
|
end
|
data/lib/hcloud/ssh_key.rb
CHANGED
@@ -5,20 +5,19 @@ module Hcloud
|
|
5
5
|
name: nil,
|
6
6
|
fingerprint: nil,
|
7
7
|
public_key: nil
|
8
|
-
}
|
8
|
+
}.freeze
|
9
9
|
include EntryLoader
|
10
10
|
|
11
11
|
def update(name:)
|
12
|
-
j = Oj.load(request("ssh_keys/#{id.to_i}",
|
13
|
-
j: {name: name},
|
12
|
+
j = Oj.load(request("ssh_keys/#{id.to_i}",
|
13
|
+
j: { name: name },
|
14
14
|
method: :put).run.body)
|
15
|
-
SSHKey.new(j[
|
15
|
+
SSHKey.new(j['ssh_key'], self, client)
|
16
16
|
end
|
17
17
|
|
18
18
|
def destroy
|
19
19
|
request("ssh_keys/#{id}", method: :delete).run.body
|
20
20
|
true
|
21
21
|
end
|
22
|
-
|
23
22
|
end
|
24
23
|
end
|
@@ -1,43 +1,42 @@
|
|
1
1
|
module Hcloud
|
2
2
|
class SSHKeyResource < AbstractResource
|
3
3
|
def all
|
4
|
-
mj(
|
5
|
-
j.flat_map{|x| x[
|
4
|
+
mj('ssh_keys') do |j|
|
5
|
+
j.flat_map { |x| x['ssh_keys'].map { |x| SSHKey.new(x, self, client) } }
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
9
|
def create(name:, public_key:)
|
10
|
-
j = Oj.load(request(
|
11
|
-
SSHKey.new(j[
|
10
|
+
j = Oj.load(request('ssh_keys', j: { name: name, public_key: public_key }).run.body)
|
11
|
+
SSHKey.new(j['ssh_key'], self, client)
|
12
12
|
end
|
13
13
|
|
14
14
|
def find(id)
|
15
15
|
SSHKey.new(
|
16
|
-
Oj.load(request("ssh_keys/#{id}").run.body)[
|
16
|
+
Oj.load(request("ssh_keys/#{id}").run.body)['ssh_key'],
|
17
17
|
self,
|
18
18
|
client
|
19
19
|
)
|
20
20
|
end
|
21
21
|
|
22
22
|
def find_by(name:)
|
23
|
-
x = Oj.load(request(
|
23
|
+
x = Oj.load(request('ssh_keys', q: { name: name }).run.body)['ssh_keys']
|
24
24
|
return nil if x.none?
|
25
25
|
x.each do |s|
|
26
26
|
return SSHKey.new(s, self, client)
|
27
27
|
end
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
30
|
def [](arg)
|
31
31
|
case arg
|
32
32
|
when Integer
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
begin
|
34
|
+
find(arg)
|
35
|
+
rescue Error::NotFound
|
36
|
+
end
|
37
37
|
when String
|
38
38
|
find_by(name: arg)
|
39
39
|
end
|
40
40
|
end
|
41
|
-
|
42
41
|
end
|
43
42
|
end
|
data/lib/hcloud/version.rb
CHANGED
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hcloud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Foerster
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-02-
|
11
|
+
date: 2018-02-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '1.15'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '1.15'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: grape
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,19 +53,19 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
61
|
+
version: '10.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
68
|
+
version: '10.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rspec
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,7 +95,7 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: activesupport
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - ">="
|
@@ -123,7 +123,7 @@ dependencies:
|
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
126
|
+
name: typhoeus
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
129
|
- - ">="
|
@@ -145,7 +145,10 @@ extra_rdoc_files: []
|
|
145
145
|
files:
|
146
146
|
- ".gitignore"
|
147
147
|
- ".rspec"
|
148
|
+
- ".rubocop.yml"
|
149
|
+
- ".rubocop_todo.yml"
|
148
150
|
- ".travis.yml"
|
151
|
+
- CHANGELOG.md
|
149
152
|
- Gemfile
|
150
153
|
- README.md
|
151
154
|
- Rakefile
|