hcloud 1.0.3 → 1.1.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/CHANGELOG.md +27 -0
- data/Gemfile.lock +20 -24
- data/LICENSE +21 -0
- data/README.md +1 -1
- data/bin/console +4 -4
- data/hcloud.gemspec +1 -2
- data/lib/hcloud/client.rb +4 -0
- data/lib/hcloud/entry_loader.rb +61 -13
- data/lib/hcloud/errors.rb +1 -1
- data/lib/hcloud/firewall.rb +26 -0
- data/lib/hcloud/firewall_resource.rb +23 -0
- data/lib/hcloud/floating_ip_resource.rb +2 -2
- data/lib/hcloud/future.rb +26 -0
- data/lib/hcloud/image_resource.rb +1 -1
- data/lib/hcloud/network.rb +2 -2
- data/lib/hcloud/network_resource.rb +2 -2
- data/lib/hcloud/server.rb +4 -1
- data/lib/hcloud/server_resource.rb +3 -2
- data/lib/hcloud/ssh_key_resource.rb +2 -2
- data/lib/hcloud/typhoeus_ext.rb +1 -1
- data/lib/hcloud/version.rb +1 -1
- data/lib/hcloud/volume_resource.rb +2 -2
- data/lib/hcloud.rb +4 -0
- metadata +9 -32
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0f32bc658bc4cb2d5151d8af866b7f09769b688bdda0fb3626932ba02268dd1c
|
|
4
|
+
data.tar.gz: c9882c417f63c0b7100540cbfb3c86c299674904ac4676a5b85e934d888a72d8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d0f0a02ffe7bf1f53b2da59775df790d3340616a4c1a30c15cd24c6556d8412e713286b7d690e9c618ebfa9682b81f2ee1a6543e5c056b02c121f0655db3a818
|
|
7
|
+
data.tar.gz: 3c5e42fdca1fa5e0e1ce8050052583b4055ae5a0b9206a8d020721d5f845ebdc26ffd99696d4fa9fac943cc9cf17f6b0de3306daa74bdc7f87d4fa719f963ac2
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [v1.1.0](https://github.com/tonobo/hcloud-ruby/tree/v1.1.0) (2022-11-29)
|
|
4
|
+
|
|
5
|
+
[Full Changelog](https://github.com/tonobo/hcloud-ruby/compare/v1.0.3...v1.1.0)
|
|
6
|
+
|
|
7
|
+
**Closed issues:**
|
|
8
|
+
|
|
9
|
+
- Doubles tests failure with seed 50938 [\#46](https://github.com/tonobo/hcloud-ruby/issues/46)
|
|
10
|
+
- \[Feature\] Add missing Resources/Endpoints Q1/2022 [\#24](https://github.com/tonobo/hcloud-ruby/issues/24)
|
|
11
|
+
- \[Dependencies\] Unpin activesupport [\#23](https://github.com/tonobo/hcloud-ruby/issues/23)
|
|
12
|
+
|
|
13
|
+
**Merged pull requests:**
|
|
14
|
+
|
|
15
|
+
- handle action array responses for firewall actions [\#48](https://github.com/tonobo/hcloud-ruby/pull/48) ([aufziehvogel](https://github.com/aufziehvogel))
|
|
16
|
+
- fix auto pagination test to always use three pages [\#47](https://github.com/tonobo/hcloud-ruby/pull/47) ([aufziehvogel](https://github.com/aufziehvogel))
|
|
17
|
+
- label support \(create, update, search\) [\#45](https://github.com/tonobo/hcloud-ruby/pull/45) ([aufziehvogel](https://github.com/aufziehvogel))
|
|
18
|
+
- set Github Workflow badge for build status [\#44](https://github.com/tonobo/hcloud-ruby/pull/44) ([aufziehvogel](https://github.com/aufziehvogel))
|
|
19
|
+
- fix rubocop linting warnings [\#42](https://github.com/tonobo/hcloud-ruby/pull/42) ([aufziehvogel](https://github.com/aufziehvogel))
|
|
20
|
+
- Implement firewall support [\#41](https://github.com/tonobo/hcloud-ruby/pull/41) ([aufziehvogel](https://github.com/aufziehvogel))
|
|
21
|
+
- Create unit tests for networks [\#40](https://github.com/tonobo/hcloud-ruby/pull/40) ([aufziehvogel](https://github.com/aufziehvogel))
|
|
22
|
+
- fix typo in exception name ResourceUnavailable [\#39](https://github.com/tonobo/hcloud-ruby/pull/39) ([aufziehvogel](https://github.com/aufziehvogel))
|
|
23
|
+
- Bump rack from 2.2.3 to 2.2.3.1 [\#38](https://github.com/tonobo/hcloud-ruby/pull/38) ([dependabot[bot]](https://github.com/apps/dependabot))
|
|
24
|
+
- dependency: update + unpin activesupport [\#36](https://github.com/tonobo/hcloud-ruby/pull/36) ([RaphaelPour](https://github.com/RaphaelPour))
|
|
25
|
+
- Add MIT license to gemspec [\#34](https://github.com/tonobo/hcloud-ruby/pull/34) ([bastelfreak](https://github.com/bastelfreak))
|
|
26
|
+
- Create LICENSE [\#33](https://github.com/tonobo/hcloud-ruby/pull/33) ([RaphaelPour](https://github.com/RaphaelPour))
|
|
27
|
+
- Update server attributes [\#32](https://github.com/tonobo/hcloud-ruby/pull/32) ([RaphaelPour](https://github.com/RaphaelPour))
|
|
28
|
+
|
|
3
29
|
## [v1.0.3](https://github.com/tonobo/hcloud-ruby/tree/v1.0.3) (2022-02-17)
|
|
4
30
|
|
|
5
31
|
[Full Changelog](https://github.com/tonobo/hcloud-ruby/compare/v1.0.2...v1.0.3)
|
|
@@ -10,6 +36,7 @@
|
|
|
10
36
|
|
|
11
37
|
**Merged pull requests:**
|
|
12
38
|
|
|
39
|
+
- bump version to v1.0.3 [\#22](https://github.com/tonobo/hcloud-ruby/pull/22) ([RaphaelPour](https://github.com/RaphaelPour))
|
|
13
40
|
- lib: adjust code to work with 3.x ruby versions [\#21](https://github.com/tonobo/hcloud-ruby/pull/21) ([Kjarrigan](https://github.com/Kjarrigan))
|
|
14
41
|
- ci: add github workflow [\#20](https://github.com/tonobo/hcloud-ruby/pull/20) ([RaphaelPour](https://github.com/RaphaelPour))
|
|
15
42
|
|
data/Gemfile.lock
CHANGED
|
@@ -3,21 +3,19 @@ PATH
|
|
|
3
3
|
specs:
|
|
4
4
|
hcloud (1.0.3)
|
|
5
5
|
activemodel
|
|
6
|
-
activesupport (= 6.1.4.4)
|
|
7
6
|
oj
|
|
8
7
|
typhoeus
|
|
9
8
|
|
|
10
9
|
GEM
|
|
11
10
|
remote: https://rubygems.org/
|
|
12
11
|
specs:
|
|
13
|
-
activemodel (
|
|
14
|
-
activesupport (=
|
|
15
|
-
activesupport (
|
|
12
|
+
activemodel (7.0.3)
|
|
13
|
+
activesupport (= 7.0.3)
|
|
14
|
+
activesupport (7.0.3)
|
|
16
15
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
17
16
|
i18n (>= 1.6, < 2)
|
|
18
17
|
minitest (>= 5.1)
|
|
19
18
|
tzinfo (~> 2.0)
|
|
20
|
-
zeitwerk (~> 2.3)
|
|
21
19
|
addressable (2.8.0)
|
|
22
20
|
public_suffix (>= 2.0.2, < 5.0)
|
|
23
21
|
ast (2.4.2)
|
|
@@ -25,12 +23,12 @@ GEM
|
|
|
25
23
|
codecov (0.6.0)
|
|
26
24
|
simplecov (>= 0.15, < 0.22)
|
|
27
25
|
coderay (1.1.3)
|
|
28
|
-
concurrent-ruby (1.1.
|
|
26
|
+
concurrent-ruby (1.1.10)
|
|
29
27
|
crack (0.4.5)
|
|
30
28
|
rexml
|
|
31
29
|
diff-lcs (1.5.0)
|
|
32
30
|
docile (1.4.0)
|
|
33
|
-
dry-configurable (0.
|
|
31
|
+
dry-configurable (0.15.0)
|
|
34
32
|
concurrent-ruby (~> 1.0)
|
|
35
33
|
dry-core (~> 0.6)
|
|
36
34
|
dry-container (0.9.0)
|
|
@@ -50,8 +48,8 @@ GEM
|
|
|
50
48
|
dry-logic (~> 1.0, >= 1.0.2)
|
|
51
49
|
ethon (0.15.0)
|
|
52
50
|
ffi (>= 1.15.0)
|
|
53
|
-
faker (2.
|
|
54
|
-
i18n (>= 1.
|
|
51
|
+
faker (2.20.0)
|
|
52
|
+
i18n (>= 1.8.11, < 2)
|
|
55
53
|
ffi (1.15.5)
|
|
56
54
|
grape (1.6.2)
|
|
57
55
|
activesupport
|
|
@@ -67,22 +65,22 @@ GEM
|
|
|
67
65
|
minitest (5.15.0)
|
|
68
66
|
mustermann (1.1.1)
|
|
69
67
|
ruby2_keywords (~> 0.0.1)
|
|
70
|
-
mustermann-grape (1.0.
|
|
68
|
+
mustermann-grape (1.0.2)
|
|
71
69
|
mustermann (>= 1.0.0)
|
|
72
70
|
oj (3.13.11)
|
|
73
|
-
parallel (1.
|
|
74
|
-
parser (3.1.
|
|
71
|
+
parallel (1.22.1)
|
|
72
|
+
parser (3.1.2.0)
|
|
75
73
|
ast (~> 2.4.1)
|
|
76
74
|
pry (0.14.1)
|
|
77
75
|
coderay (~> 1.1)
|
|
78
76
|
method_source (~> 1.0)
|
|
79
|
-
public_suffix (4.0.
|
|
80
|
-
rack (2.2.3)
|
|
77
|
+
public_suffix (4.0.7)
|
|
78
|
+
rack (2.2.3.1)
|
|
81
79
|
rack-accept (0.4.5)
|
|
82
80
|
rack (>= 0.4)
|
|
83
81
|
rainbow (3.1.1)
|
|
84
82
|
rake (13.0.6)
|
|
85
|
-
regexp_parser (2.
|
|
83
|
+
regexp_parser (2.4.0)
|
|
86
84
|
rexml (3.2.5)
|
|
87
85
|
rspec (3.11.0)
|
|
88
86
|
rspec-core (~> 3.11.0)
|
|
@@ -93,21 +91,21 @@ GEM
|
|
|
93
91
|
rspec-expectations (3.11.0)
|
|
94
92
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
95
93
|
rspec-support (~> 3.11.0)
|
|
96
|
-
rspec-mocks (3.11.
|
|
94
|
+
rspec-mocks (3.11.1)
|
|
97
95
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
98
96
|
rspec-support (~> 3.11.0)
|
|
99
97
|
rspec-support (3.11.0)
|
|
100
|
-
rubocop (1.
|
|
98
|
+
rubocop (1.29.0)
|
|
101
99
|
parallel (~> 1.10)
|
|
102
100
|
parser (>= 3.1.0.0)
|
|
103
101
|
rainbow (>= 2.2.2, < 4.0)
|
|
104
102
|
regexp_parser (>= 1.8, < 3.0)
|
|
105
|
-
rexml
|
|
106
|
-
rubocop-ast (>= 1.
|
|
103
|
+
rexml (>= 3.2.5, < 4.0)
|
|
104
|
+
rubocop-ast (>= 1.17.0, < 2.0)
|
|
107
105
|
ruby-progressbar (~> 1.7)
|
|
108
106
|
unicode-display_width (>= 1.4.0, < 3.0)
|
|
109
|
-
rubocop-ast (1.
|
|
110
|
-
parser (>= 3.
|
|
107
|
+
rubocop-ast (1.17.0)
|
|
108
|
+
parser (>= 3.1.1.0)
|
|
111
109
|
ruby-progressbar (1.11.0)
|
|
112
110
|
ruby2_keywords (0.0.5)
|
|
113
111
|
simplecov (0.21.2)
|
|
@@ -125,7 +123,6 @@ GEM
|
|
|
125
123
|
addressable (>= 2.8.0)
|
|
126
124
|
crack (>= 0.3.2)
|
|
127
125
|
hashdiff (>= 0.4.0, < 2.0.0)
|
|
128
|
-
zeitwerk (2.5.4)
|
|
129
126
|
|
|
130
127
|
PLATFORMS
|
|
131
128
|
ruby
|
|
@@ -133,7 +130,6 @@ PLATFORMS
|
|
|
133
130
|
|
|
134
131
|
DEPENDENCIES
|
|
135
132
|
activemodel
|
|
136
|
-
activesupport (= 6.1.4.4)
|
|
137
133
|
bundler
|
|
138
134
|
codecov
|
|
139
135
|
faker
|
|
@@ -146,4 +142,4 @@ DEPENDENCIES
|
|
|
146
142
|
webmock
|
|
147
143
|
|
|
148
144
|
BUNDLED WITH
|
|
149
|
-
2.3.
|
|
145
|
+
2.3.9
|
data/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022 Tim Foerster
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Hcloud
|
|
2
2
|
|
|
3
|
-
[](https://github.com/tonobo/hcloud-ruby/actions/workflows/ruby.yml)
|
|
4
4
|
[](https://codecov.io/gh/tonobo/hcloud-ruby)
|
|
5
5
|
[](https://badge.fury.io/rb/hcloud)
|
|
6
6
|
[](https://codeclimate.com/github/tonobo/hcloud-ruby/maintainability)
|
data/bin/console
CHANGED
|
@@ -8,8 +8,8 @@ require 'hcloud'
|
|
|
8
8
|
# with your gem easier. You can also use a different console, if you like.
|
|
9
9
|
|
|
10
10
|
# (If you use this, don't forget to add pry to your Gemfile!)
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
require 'pry'
|
|
12
|
+
Pry.start
|
|
13
13
|
|
|
14
|
-
require 'irb'
|
|
15
|
-
IRB.start(__FILE__)
|
|
14
|
+
# require 'irb'
|
|
15
|
+
# IRB.start(__FILE__)
|
data/hcloud.gemspec
CHANGED
|
@@ -12,6 +12,7 @@ Gem::Specification.new do |spec|
|
|
|
12
12
|
|
|
13
13
|
spec.summary = 'HetznerCloud native Ruby client'
|
|
14
14
|
spec.homepage = 'https://github.com/tonobo/hcloud-ruby'
|
|
15
|
+
spec.license = 'MIT'
|
|
15
16
|
|
|
16
17
|
spec.required_ruby_version = '>= 2.7.0'
|
|
17
18
|
|
|
@@ -23,14 +24,12 @@ Gem::Specification.new do |spec|
|
|
|
23
24
|
spec.require_paths = ['lib']
|
|
24
25
|
|
|
25
26
|
spec.add_development_dependency 'activemodel'
|
|
26
|
-
spec.add_development_dependency 'activesupport', '6.1.4.4'
|
|
27
27
|
spec.add_development_dependency 'bundler'
|
|
28
28
|
spec.add_development_dependency 'grape'
|
|
29
29
|
spec.add_development_dependency 'rake'
|
|
30
30
|
spec.add_development_dependency 'rspec'
|
|
31
31
|
spec.add_development_dependency 'webmock'
|
|
32
32
|
spec.add_runtime_dependency 'activemodel'
|
|
33
|
-
spec.add_runtime_dependency 'activesupport', '6.1.4.4'
|
|
34
33
|
spec.add_runtime_dependency 'oj'
|
|
35
34
|
spec.add_runtime_dependency 'typhoeus'
|
|
36
35
|
end
|
data/lib/hcloud/client.rb
CHANGED
data/lib/hcloud/entry_loader.rb
CHANGED
|
@@ -74,34 +74,57 @@ module Hcloud
|
|
|
74
74
|
|
|
75
75
|
def from_response(response, autoload_action: nil)
|
|
76
76
|
attributes = response.resource_attributes
|
|
77
|
-
|
|
77
|
+
|
|
78
|
+
action_resp = _try_load_action(response) if autoload_action
|
|
79
|
+
return action_resp unless attributes || action_resp.nil?
|
|
80
|
+
|
|
78
81
|
client = response.context.client
|
|
79
82
|
if attributes.is_a?(Array)
|
|
80
|
-
results = attributes.map
|
|
83
|
+
results = attributes.map do |item|
|
|
84
|
+
new(client, item).tap do |entity|
|
|
85
|
+
entity.response = response
|
|
86
|
+
end
|
|
87
|
+
end
|
|
81
88
|
results.tap { |ary| ary.extend(Collection) }.response = response
|
|
82
89
|
return results
|
|
83
90
|
end
|
|
84
91
|
|
|
85
|
-
|
|
86
|
-
|
|
92
|
+
if action_resp.nil?
|
|
93
|
+
return new(client, attributes).tap { |entity| entity.response = response }
|
|
94
|
+
end
|
|
87
95
|
|
|
88
96
|
[
|
|
89
|
-
|
|
90
|
-
new(attributes).tap { |entity| entity.response = response }
|
|
97
|
+
action_resp,
|
|
98
|
+
new(client, attributes).tap { |entity| entity.response = response }
|
|
91
99
|
]
|
|
92
100
|
end
|
|
93
|
-
end
|
|
94
101
|
|
|
95
|
-
|
|
102
|
+
def _try_load_action(response)
|
|
103
|
+
# some API endpoints return a list of actions (e.g. firewall action
|
|
104
|
+
# apply_to_resources), some a single action (e.g. server action
|
|
105
|
+
# attach_iso)
|
|
106
|
+
actions = response.parsed_json[:actions]
|
|
107
|
+
action = response.parsed_json[:action]
|
|
108
|
+
|
|
109
|
+
client = response.context.client
|
|
110
|
+
|
|
111
|
+
if actions
|
|
112
|
+
return actions.map do |act|
|
|
113
|
+
Action.new(client, act)
|
|
114
|
+
end
|
|
115
|
+
elsif action
|
|
116
|
+
return Action.new(client, action)
|
|
117
|
+
end
|
|
96
118
|
|
|
97
|
-
|
|
98
|
-
if client.is_a?(Hash)
|
|
99
|
-
kwargs = client
|
|
100
|
-
client = nil
|
|
119
|
+
nil
|
|
101
120
|
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
attr_accessor :response
|
|
102
124
|
|
|
125
|
+
def initialize(client = nil, resource = {})
|
|
103
126
|
@client = client
|
|
104
|
-
_load(
|
|
127
|
+
_load(resource)
|
|
105
128
|
end
|
|
106
129
|
|
|
107
130
|
def inspect
|
|
@@ -179,7 +202,10 @@ module Hcloud
|
|
|
179
202
|
instance_variable_set("@#{key}", value)
|
|
180
203
|
end
|
|
181
204
|
|
|
205
|
+
# rubocop: disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength, Metrics/AbcSize
|
|
182
206
|
def _load(resource)
|
|
207
|
+
return if resource.nil?
|
|
208
|
+
|
|
183
209
|
@_attributes = {}.with_indifferent_access
|
|
184
210
|
|
|
185
211
|
resource.each do |key, value|
|
|
@@ -195,8 +221,30 @@ module Hcloud
|
|
|
195
221
|
next
|
|
196
222
|
end
|
|
197
223
|
|
|
224
|
+
# if schema definition is [Class]
|
|
225
|
+
if definition.is_a?(Array) && definition.first.include?(EntryLoader)
|
|
226
|
+
|
|
227
|
+
# just set attribute to an empty array if value is no array or empty
|
|
228
|
+
if !value.is_a?(Array) || value.empty?
|
|
229
|
+
_update_attribute(key, [])
|
|
230
|
+
next
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
if value.first.is_a?(Integer)
|
|
234
|
+
# If value is an integer, this is the id of an object which's class can be
|
|
235
|
+
# retreived from definition. Load a future object that can on access retreive the
|
|
236
|
+
# data from the api and convert it to a proper object.
|
|
237
|
+
_update_attribute(key, value.map { |id| Future.new(client, definition.first, id) })
|
|
238
|
+
else
|
|
239
|
+
# Otherwise the value *is* the content of the object
|
|
240
|
+
_update_attribute(key, value.map { |item| definition.first.new(client, item) })
|
|
241
|
+
end
|
|
242
|
+
next
|
|
243
|
+
end
|
|
244
|
+
|
|
198
245
|
_update_attribute(key, value.is_a?(Hash) ? value.with_indifferent_access : value)
|
|
199
246
|
end
|
|
200
247
|
end
|
|
248
|
+
# rubocop: enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength, Metrics/AbcSize
|
|
201
249
|
end
|
|
202
250
|
end
|
data/lib/hcloud/errors.rb
CHANGED
|
@@ -9,7 +9,7 @@ module Hcloud
|
|
|
9
9
|
class Locked < Error; end
|
|
10
10
|
class NotFound < Error; end
|
|
11
11
|
class RateLimitExceeded < Error; end
|
|
12
|
-
class
|
|
12
|
+
class ResourceUnavailable < Error; end
|
|
13
13
|
class ServiceError < Error; end
|
|
14
14
|
class UniquenessError < Error; end
|
|
15
15
|
class UnknownError < Error; end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Hcloud
|
|
4
|
+
class Firewall
|
|
5
|
+
require 'hcloud/firewall_resource'
|
|
6
|
+
|
|
7
|
+
include EntryLoader
|
|
8
|
+
|
|
9
|
+
updatable :name
|
|
10
|
+
destructible
|
|
11
|
+
|
|
12
|
+
has_actions
|
|
13
|
+
|
|
14
|
+
def set_rules(rules:) # rubocop:disable Naming/AccessorMethodName
|
|
15
|
+
prepare_request('actions/set_rules', j: COLLECT_ARGS.call(__method__, binding))
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def apply_to_resources(apply_to:)
|
|
19
|
+
prepare_request('actions/apply_to_resources', j: COLLECT_ARGS.call(__method__, binding))
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def remove_from_resources(remove_from:)
|
|
23
|
+
prepare_request('actions/remove_from_resources', j: COLLECT_ARGS.call(__method__, binding))
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Hcloud
|
|
4
|
+
class FirewallResource < AbstractResource
|
|
5
|
+
filter_attributes :name, :label_selector
|
|
6
|
+
|
|
7
|
+
def [](arg)
|
|
8
|
+
case arg
|
|
9
|
+
when Integer then find_by(id: arg)
|
|
10
|
+
when String then find_by(name: arg)
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def create(name:, rules: [], apply_to: [], labels: {})
|
|
15
|
+
prepare_request(
|
|
16
|
+
'firewalls', j: COLLECT_ARGS.call(__method__, binding),
|
|
17
|
+
expected_code: 201
|
|
18
|
+
) do |response|
|
|
19
|
+
Firewall.new(client, response.parsed_json[:firewall])
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Hcloud
|
|
4
4
|
class FloatingIPResource < AbstractResource
|
|
5
|
-
filter_attributes :name
|
|
5
|
+
filter_attributes :name, :label_selector
|
|
6
6
|
|
|
7
7
|
bind_to FloatingIP
|
|
8
8
|
|
|
@@ -13,7 +13,7 @@ module Hcloud
|
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
def create(type:, server: nil, home_location: nil, description: nil)
|
|
16
|
+
def create(type:, server: nil, home_location: nil, description: nil, labels: {})
|
|
17
17
|
prepare_request(
|
|
18
18
|
'floating_ips', j: COLLECT_ARGS.call(__method__, binding),
|
|
19
19
|
expected_code: 201
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'active_support/core_ext/string/inflections'
|
|
4
|
+
|
|
5
|
+
module Hcloud
|
|
6
|
+
class Future < Delegator
|
|
7
|
+
# rubocop: disable Lint/MissingSuper
|
|
8
|
+
def initialize(client, target_class, id)
|
|
9
|
+
@target_class = target_class
|
|
10
|
+
@id = id
|
|
11
|
+
@__client = client
|
|
12
|
+
end
|
|
13
|
+
# rubocop: enable Lint/MissingSuper
|
|
14
|
+
|
|
15
|
+
def __getobj__
|
|
16
|
+
# pluralize class name and convert it to symbol
|
|
17
|
+
@__getobj__ ||= @__client.public_send(
|
|
18
|
+
@target_class.name # full name of the class including namespaces
|
|
19
|
+
.demodulize # last module name only
|
|
20
|
+
.tableize # convert to table name, split words by _ + downcase
|
|
21
|
+
.pluralize
|
|
22
|
+
.to_sym
|
|
23
|
+
).find(@id)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
data/lib/hcloud/network.rb
CHANGED
|
@@ -19,7 +19,7 @@ module Hcloud
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def del_subnet(ip_range:)
|
|
22
|
-
prepare_request('actions/
|
|
22
|
+
prepare_request('actions/delete_subnet', j: COLLECT_ARGS.call(__method__, binding))
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def add_route(destination:, gateway:)
|
|
@@ -27,7 +27,7 @@ module Hcloud
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def del_route(destination:, gateway:)
|
|
30
|
-
prepare_request('actions/
|
|
30
|
+
prepare_request('actions/delete_route', j: COLLECT_ARGS.call(__method__, binding))
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
33
|
end
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Hcloud
|
|
4
4
|
class NetworkResource < AbstractResource
|
|
5
|
-
filter_attributes :name
|
|
5
|
+
filter_attributes :name, :label_selector
|
|
6
6
|
|
|
7
7
|
bind_to Network
|
|
8
8
|
|
|
@@ -13,7 +13,7 @@ module Hcloud
|
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
def create(name:, ip_range:, subnets: nil, routes: nil)
|
|
16
|
+
def create(name:, ip_range:, subnets: nil, routes: nil, labels: {})
|
|
17
17
|
prepare_request(
|
|
18
18
|
'networks', j: COLLECT_ARGS.call(__method__, binding),
|
|
19
19
|
expected_code: 201
|
data/lib/hcloud/server.rb
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Hcloud
|
|
4
4
|
class ServerResource < AbstractResource
|
|
5
|
-
filter_attributes :status, :name
|
|
5
|
+
filter_attributes :status, :name, :label_selector
|
|
6
6
|
|
|
7
7
|
bind_to Server
|
|
8
8
|
|
|
@@ -13,7 +13,8 @@ module Hcloud
|
|
|
13
13
|
start_after_create: nil,
|
|
14
14
|
ssh_keys: [],
|
|
15
15
|
networks: [],
|
|
16
|
-
user_data: nil
|
|
16
|
+
user_data: nil,
|
|
17
|
+
labels: {})
|
|
17
18
|
prepare_request('servers', j: COLLECT_ARGS.call(__method__, binding),
|
|
18
19
|
expected_code: 201) do |response|
|
|
19
20
|
[
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Hcloud
|
|
4
4
|
class SSHKeyResource < AbstractResource
|
|
5
|
-
filter_attributes :name
|
|
5
|
+
filter_attributes :name, :label_selector
|
|
6
6
|
|
|
7
7
|
def [](arg)
|
|
8
8
|
case arg
|
|
@@ -11,7 +11,7 @@ module Hcloud
|
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
def create(name:, public_key:)
|
|
14
|
+
def create(name:, public_key:, labels: {})
|
|
15
15
|
prepare_request(
|
|
16
16
|
'ssh_keys', j: COLLECT_ARGS.call(__method__, binding),
|
|
17
17
|
expected_code: 201
|
data/lib/hcloud/typhoeus_ext.rb
CHANGED
data/lib/hcloud/version.rb
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
module Hcloud
|
|
4
4
|
class VolumeResource < AbstractResource
|
|
5
|
-
filter_attributes :name
|
|
5
|
+
filter_attributes :name, :label_selector
|
|
6
6
|
|
|
7
7
|
def [](arg)
|
|
8
8
|
case arg
|
|
@@ -11,7 +11,7 @@ module Hcloud
|
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
def create(size:, name:, automount: nil, format: nil, location: nil, server: nil)
|
|
14
|
+
def create(size:, name:, automount: nil, format: nil, location: nil, server: nil, labels: {})
|
|
15
15
|
prepare_request(
|
|
16
16
|
'volumes', j: COLLECT_ARGS.call(__method__, binding),
|
|
17
17
|
expected_code: 201
|
data/lib/hcloud.rb
CHANGED
|
@@ -7,6 +7,7 @@ require 'active_support/core_ext/hash/indifferent_access'
|
|
|
7
7
|
module Hcloud
|
|
8
8
|
autoload :Error, 'hcloud/errors'
|
|
9
9
|
autoload :Client, 'hcloud/client'
|
|
10
|
+
autoload :Future, 'hcloud/future'
|
|
10
11
|
autoload :TyphoeusExt, 'hcloud/typhoeus_ext'
|
|
11
12
|
autoload :AbstractResource, 'hcloud/abstract_resource'
|
|
12
13
|
autoload :EntryLoader, 'hcloud/entry_loader'
|
|
@@ -35,6 +36,9 @@ module Hcloud
|
|
|
35
36
|
autoload :Network, 'hcloud/network'
|
|
36
37
|
autoload :NetworkResource, 'hcloud/network_resource'
|
|
37
38
|
|
|
39
|
+
autoload :Firewall, 'hcloud/firewall'
|
|
40
|
+
autoload :FirewallResource, 'hcloud/firewall_resource'
|
|
41
|
+
|
|
38
42
|
autoload :Volume, 'hcloud/volume'
|
|
39
43
|
autoload :VolumeResource, 'hcloud/volume_resource'
|
|
40
44
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hcloud
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tim Foerster
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: exe
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2022-
|
|
12
|
+
date: 2022-11-29 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: activemodel
|
|
@@ -25,20 +25,6 @@ dependencies:
|
|
|
25
25
|
- - ">="
|
|
26
26
|
- !ruby/object:Gem::Version
|
|
27
27
|
version: '0'
|
|
28
|
-
- !ruby/object:Gem::Dependency
|
|
29
|
-
name: activesupport
|
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
|
31
|
-
requirements:
|
|
32
|
-
- - '='
|
|
33
|
-
- !ruby/object:Gem::Version
|
|
34
|
-
version: 6.1.4.4
|
|
35
|
-
type: :development
|
|
36
|
-
prerelease: false
|
|
37
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
38
|
-
requirements:
|
|
39
|
-
- - '='
|
|
40
|
-
- !ruby/object:Gem::Version
|
|
41
|
-
version: 6.1.4.4
|
|
42
28
|
- !ruby/object:Gem::Dependency
|
|
43
29
|
name: bundler
|
|
44
30
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -123,20 +109,6 @@ dependencies:
|
|
|
123
109
|
- - ">="
|
|
124
110
|
- !ruby/object:Gem::Version
|
|
125
111
|
version: '0'
|
|
126
|
-
- !ruby/object:Gem::Dependency
|
|
127
|
-
name: activesupport
|
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
|
129
|
-
requirements:
|
|
130
|
-
- - '='
|
|
131
|
-
- !ruby/object:Gem::Version
|
|
132
|
-
version: 6.1.4.4
|
|
133
|
-
type: :runtime
|
|
134
|
-
prerelease: false
|
|
135
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
136
|
-
requirements:
|
|
137
|
-
- - '='
|
|
138
|
-
- !ruby/object:Gem::Version
|
|
139
|
-
version: 6.1.4.4
|
|
140
112
|
- !ruby/object:Gem::Dependency
|
|
141
113
|
name: oj
|
|
142
114
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -181,6 +153,7 @@ files:
|
|
|
181
153
|
- CHANGELOG.md
|
|
182
154
|
- Gemfile
|
|
183
155
|
- Gemfile.lock
|
|
156
|
+
- LICENSE
|
|
184
157
|
- README.md
|
|
185
158
|
- Rakefile
|
|
186
159
|
- bin/console
|
|
@@ -195,8 +168,11 @@ files:
|
|
|
195
168
|
- lib/hcloud/datacenter_resource.rb
|
|
196
169
|
- lib/hcloud/entry_loader.rb
|
|
197
170
|
- lib/hcloud/errors.rb
|
|
171
|
+
- lib/hcloud/firewall.rb
|
|
172
|
+
- lib/hcloud/firewall_resource.rb
|
|
198
173
|
- lib/hcloud/floating_ip.rb
|
|
199
174
|
- lib/hcloud/floating_ip_resource.rb
|
|
175
|
+
- lib/hcloud/future.rb
|
|
200
176
|
- lib/hcloud/image.rb
|
|
201
177
|
- lib/hcloud/image_resource.rb
|
|
202
178
|
- lib/hcloud/iso.rb
|
|
@@ -217,7 +193,8 @@ files:
|
|
|
217
193
|
- lib/hcloud/volume.rb
|
|
218
194
|
- lib/hcloud/volume_resource.rb
|
|
219
195
|
homepage: https://github.com/tonobo/hcloud-ruby
|
|
220
|
-
licenses:
|
|
196
|
+
licenses:
|
|
197
|
+
- MIT
|
|
221
198
|
metadata: {}
|
|
222
199
|
post_install_message:
|
|
223
200
|
rdoc_options: []
|
|
@@ -234,7 +211,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
234
211
|
- !ruby/object:Gem::Version
|
|
235
212
|
version: '0'
|
|
236
213
|
requirements: []
|
|
237
|
-
rubygems_version: 3.
|
|
214
|
+
rubygems_version: 3.1.6
|
|
238
215
|
signing_key:
|
|
239
216
|
specification_version: 4
|
|
240
217
|
summary: HetznerCloud native Ruby client
|