hetznercloud 1.0.0 → 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 +4 -0
- data/README.md +1 -1
- data/lib/hcloud/concerns/actionable.rb +7 -2
- data/lib/hcloud/errors.rb +22 -1
- data/lib/hcloud/http.rb +4 -4
- data/lib/hcloud/resources/firewall.rb +27 -1
- data/lib/hcloud/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96dedcad6852bc32b89ff4a0df8ee183ed6a8c49a88c840b06dc6c0cd075d255
|
4
|
+
data.tar.gz: b5105539a02269441777a43e045b80d7400ff7674d88f28553a8105f19a8d8d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20b1d95239793c7790db9ced2f88a3b44a6add5d553a4bf4e17420b6be2290af4fe452ae5146bb769395fb645b7526322c0d4c488e00280135bcc2128f6532b0
|
7
|
+
data.tar.gz: 5a5834d0ba17683ca5679ef7413297cca66200747e2ce36f37e6175db7c68b194ff267b832351c369ef8aaf98a82865ec2f0326a2a203640572db44d282e8a92
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -78,7 +78,7 @@ Not all Hetzner Cloud API endpoints have been implemented yet.
|
|
78
78
|
| Certificate Actions | Not implemented |
|
79
79
|
| Datacenters | Implemented |
|
80
80
|
| Firewalls | Implemented |
|
81
|
-
| Firewall Actions |
|
81
|
+
| Firewall Actions | Implemented |
|
82
82
|
| Floating IPs | Implemented |
|
83
83
|
| Floating IP Actions | Implemented |
|
84
84
|
| Images | Implemented |
|
@@ -19,9 +19,14 @@ module HCloud
|
|
19
19
|
action_names << name.to_s
|
20
20
|
|
21
21
|
define_method(name) do |**params|
|
22
|
-
|
22
|
+
response = client
|
23
23
|
.post("/#{resource_name.pluralize}/#{id}/actions/#{name}", params)
|
24
|
-
|
24
|
+
|
25
|
+
if response.key?(:actions)
|
26
|
+
response[:actions].map { |r| Action.new r }
|
27
|
+
else
|
28
|
+
Action.new response[:action]
|
29
|
+
end
|
25
30
|
end
|
26
31
|
end
|
27
32
|
end
|
data/lib/hcloud/errors.rb
CHANGED
@@ -2,9 +2,30 @@
|
|
2
2
|
|
3
3
|
module HCloud
|
4
4
|
module Errors
|
5
|
+
class Error < StandardError
|
6
|
+
attr_reader :data
|
7
|
+
|
8
|
+
def initialize(data = {})
|
9
|
+
@data = data
|
10
|
+
|
11
|
+
super [data[:message], full_messages&.join("\n")].compact.join("\n\n")
|
12
|
+
end
|
13
|
+
|
14
|
+
def full_messages
|
15
|
+
return unless data[:details]
|
16
|
+
|
17
|
+
data[:details][:fields].flat_map do |field|
|
18
|
+
Array(field.fetch(:messages, data[:message])).map do |detail|
|
19
|
+
"#{field[:name]} #{detail}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
5
25
|
class ActionFailed < Error; end
|
6
26
|
class Conflict < Error; end
|
7
|
-
class
|
27
|
+
class FirewallAlreadyApplied < Error; end
|
28
|
+
class FirewallAlreadyRemoved < Error; end
|
8
29
|
class FirewallResourceNotFound < Error; end
|
9
30
|
class Forbidden < Error; end
|
10
31
|
class IPNotAvailable < Error; end
|
data/lib/hcloud/http.rb
CHANGED
@@ -23,7 +23,7 @@ module HCloud
|
|
23
23
|
|
24
24
|
return data if response.status.success?
|
25
25
|
|
26
|
-
raise Errors.const_get(data.dig(:error, :code).camelize), data
|
26
|
+
raise Errors.const_get(data.dig(:error, :code).camelize), data[:error]
|
27
27
|
end
|
28
28
|
|
29
29
|
def put(path, body = {})
|
@@ -36,7 +36,7 @@ module HCloud
|
|
36
36
|
|
37
37
|
return data if response.status.success?
|
38
38
|
|
39
|
-
raise Errors.const_get(data.dig(:error, :code).camelize), data
|
39
|
+
raise Errors.const_get(data.dig(:error, :code).camelize), data[:error]
|
40
40
|
end
|
41
41
|
|
42
42
|
def post(path, body = {})
|
@@ -49,7 +49,7 @@ module HCloud
|
|
49
49
|
|
50
50
|
return data if response.status.success?
|
51
51
|
|
52
|
-
raise Errors.const_get(data.dig(:error, :code).camelize), data
|
52
|
+
raise Errors.const_get(data.dig(:error, :code).camelize), data[:error]
|
53
53
|
end
|
54
54
|
|
55
55
|
def delete(path)
|
@@ -62,7 +62,7 @@ module HCloud
|
|
62
62
|
.parse(:json)
|
63
63
|
.deep_symbolize_keys
|
64
64
|
|
65
|
-
raise Errors.const_get(data.dig(:error, :code).camelize), data
|
65
|
+
raise Errors.const_get(data.dig(:error, :code).camelize), data[:error]
|
66
66
|
end
|
67
67
|
|
68
68
|
private
|
@@ -50,9 +50,31 @@ module HCloud
|
|
50
50
|
# firewall.deleted?
|
51
51
|
# # => true
|
52
52
|
#
|
53
|
-
#
|
53
|
+
# == Apply a firewall to resources
|
54
|
+
#
|
55
|
+
# firewall = HCloud::Firewall.find(1)
|
56
|
+
# server = HCloud::Server.find(1)
|
57
|
+
#
|
58
|
+
# firewall.apply_to_resources(apply_to: [{ type: "server", server: { id: server.id } }])
|
59
|
+
# # => #<HCloud::Action ...>
|
60
|
+
#
|
61
|
+
# == Remove a firewall from resources
|
62
|
+
#
|
63
|
+
# firewall = HCloud::Firewall.find(1)
|
64
|
+
# server = HCloud::Server.find(1)
|
65
|
+
#
|
66
|
+
# firewall.remove_from_resources(remove_from: [{ type: "server", server: { id: server.id } }])
|
67
|
+
# # => #<HCloud::Action ...>
|
68
|
+
#
|
69
|
+
# == Set firewall rules
|
70
|
+
#
|
71
|
+
# firewall = HCloud::Firewall.find(1)
|
72
|
+
#
|
73
|
+
# firewall.set_rules(rules: [{ direction: "in", protocol: "tcp", ... }])
|
74
|
+
# # => #<HCloud::Action ...>
|
54
75
|
#
|
55
76
|
class Firewall < Resource
|
77
|
+
actionable
|
56
78
|
queryable
|
57
79
|
creatable
|
58
80
|
updatable
|
@@ -69,6 +91,10 @@ module HCloud
|
|
69
91
|
|
70
92
|
attribute :labels, default: -> { {} }
|
71
93
|
|
94
|
+
action :apply_to_resources
|
95
|
+
action :remove_from_resources
|
96
|
+
action :set_rules
|
97
|
+
|
72
98
|
def creatable_attributes
|
73
99
|
[:name, :labels, :apply_to, :rules]
|
74
100
|
end
|
data/lib/hcloud/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hetznercloud
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Dejonckheere
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-01-
|
11
|
+
date: 2022-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|