hcloud 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +31 -0
- data/Gemfile.lock +50 -53
- data/hcloud.gemspec +0 -1
- data/lib/hcloud/certificate.rb +22 -0
- data/lib/hcloud/certificate_resource.rb +43 -0
- data/lib/hcloud/client.rb +20 -0
- data/lib/hcloud/entry_loader.rb +21 -0
- data/lib/hcloud/firewall.rb +12 -1
- data/lib/hcloud/firewall_resource.rb +8 -1
- data/lib/hcloud/floating_ip.rb +4 -0
- data/lib/hcloud/floating_ip_resource.rb +5 -0
- data/lib/hcloud/load_balancer.rb +140 -0
- data/lib/hcloud/load_balancer_resource.rb +39 -0
- data/lib/hcloud/load_balancer_type.rb +13 -0
- data/lib/hcloud/load_balancer_type_resource.rb +16 -0
- data/lib/hcloud/network.rb +11 -0
- data/lib/hcloud/network_resource.rb +3 -0
- data/lib/hcloud/placement_group.rb +16 -0
- data/lib/hcloud/placement_group_resource.rb +30 -0
- data/lib/hcloud/primary_ip.rb +35 -0
- data/lib/hcloud/primary_ip_resource.rb +46 -0
- data/lib/hcloud/server.rb +12 -1
- data/lib/hcloud/server_resource.rb +4 -1
- data/lib/hcloud/ssh_key.rb +4 -0
- data/lib/hcloud/ssh_key_resource.rb +6 -0
- data/lib/hcloud/typhoeus_ext.rb +1 -1
- data/lib/hcloud/version.rb +1 -1
- data/lib/hcloud/volume.rb +5 -1
- data/lib/hcloud/volume_resource.rb +6 -0
- data/lib/hcloud.rb +16 -0
- metadata +13 -18
- data/Rakefile +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cdd378e8381d39a1fccf8cd2ce72ff3f024985fb5d5599978e928464e0018576
|
4
|
+
data.tar.gz: 885c2e766e37f274622be8a3519da323608576a765ba5dd7d104da1fd9c3237d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e163d935512c077fbc7e3c94281d48aa1ba95eab1e5743190a66ab800e729ab1c8a905a974f86ca78c0e280bd77bc5763b9ec25e3b8b55db4725a8115cbabce
|
7
|
+
data.tar.gz: e26b48bb02882a3ec78b4412236466619a0e21759b9ba2f9f518fd17a591a0e1a0f9d3e344f63ef3502cbf3e293fc62577250247cc4f1b04908c2532bdbee7e2
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,35 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [v1.2.0](https://github.com/tonobo/hcloud-ruby/tree/v1.2.0) (2023-10-10)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/tonobo/hcloud-ruby/compare/v1.1.0...v1.2.0)
|
6
|
+
|
7
|
+
**Closed issues:**
|
8
|
+
|
9
|
+
- \[Feature\] Add Primary IPs [\#57](https://github.com/tonobo/hcloud-ruby/issues/57)
|
10
|
+
- \[Feature\] Add Primary IPs [\#56](https://github.com/tonobo/hcloud-ruby/issues/56)
|
11
|
+
- \[Bug\] Firewalls do not expose actions [\#54](https://github.com/tonobo/hcloud-ruby/issues/54)
|
12
|
+
- \[Bug\] IPv6 global address is not parsed correctly [\#49](https://github.com/tonobo/hcloud-ruby/issues/49)
|
13
|
+
- \[Feature\] Add LoadBalancers and -Types [\#29](https://github.com/tonobo/hcloud-ruby/issues/29)
|
14
|
+
- \[Feature\] Add PlacementGroups [\#27](https://github.com/tonobo/hcloud-ruby/issues/27)
|
15
|
+
- \[Feature\] Add Certificates [\#26](https://github.com/tonobo/hcloud-ruby/issues/26)
|
16
|
+
- \[Feature\] Add Firewalls [\#25](https://github.com/tonobo/hcloud-ruby/issues/25)
|
17
|
+
|
18
|
+
**Merged pull requests:**
|
19
|
+
|
20
|
+
- lib: import active\_support before cherry-picking imports [\#77](https://github.com/tonobo/hcloud-ruby/pull/77) ([aufziehvogel](https://github.com/aufziehvogel))
|
21
|
+
- Dependencies: Drop rake, as it's unnecessary [\#74](https://github.com/tonobo/hcloud-ruby/pull/74) ([Kjarrigan](https://github.com/Kjarrigan))
|
22
|
+
- server: return `next_actions` data on create [\#72](https://github.com/tonobo/hcloud-ruby/pull/72) ([aufziehvogel](https://github.com/aufziehvogel))
|
23
|
+
- lib: implement primary IPs [\#65](https://github.com/tonobo/hcloud-ruby/pull/65) ([aufziehvogel](https://github.com/aufziehvogel))
|
24
|
+
- lib: implement certificates [\#64](https://github.com/tonobo/hcloud-ruby/pull/64) ([aufziehvogel](https://github.com/aufziehvogel))
|
25
|
+
- spec: include context doubles for doubles tests [\#63](https://github.com/tonobo/hcloud-ruby/pull/63) ([aufziehvogel](https://github.com/aufziehvogel))
|
26
|
+
- fix: return actions info on firewall create [\#59](https://github.com/tonobo/hcloud-ruby/pull/59) ([aufziehvogel](https://github.com/aufziehvogel))
|
27
|
+
- fix: do not interpret leading : in JSON as symbol [\#58](https://github.com/tonobo/hcloud-ruby/pull/58) ([aufziehvogel](https://github.com/aufziehvogel))
|
28
|
+
- lib: implement load balancer [\#55](https://github.com/tonobo/hcloud-ruby/pull/55) ([aufziehvogel](https://github.com/aufziehvogel))
|
29
|
+
- implement double tests for existing resources [\#53](https://github.com/tonobo/hcloud-ruby/pull/53) ([aufziehvogel](https://github.com/aufziehvogel))
|
30
|
+
- Add PlacementGroup [\#52](https://github.com/tonobo/hcloud-ruby/pull/52) ([aufziehvogel](https://github.com/aufziehvogel))
|
31
|
+
- firewall: please linter [\#51](https://github.com/tonobo/hcloud-ruby/pull/51) ([RaphaelPour](https://github.com/RaphaelPour))
|
32
|
+
|
3
33
|
## [v1.1.0](https://github.com/tonobo/hcloud-ruby/tree/v1.1.0) (2022-11-29)
|
4
34
|
|
5
35
|
[Full Changelog](https://github.com/tonobo/hcloud-ruby/compare/v1.0.3...v1.1.0)
|
@@ -12,6 +42,7 @@
|
|
12
42
|
|
13
43
|
**Merged pull requests:**
|
14
44
|
|
45
|
+
- version: bump to v1.1.0 [\#50](https://github.com/tonobo/hcloud-ruby/pull/50) ([aufziehvogel](https://github.com/aufziehvogel))
|
15
46
|
- handle action array responses for firewall actions [\#48](https://github.com/tonobo/hcloud-ruby/pull/48) ([aufziehvogel](https://github.com/aufziehvogel))
|
16
47
|
- fix auto pagination test to always use three pages [\#47](https://github.com/tonobo/hcloud-ruby/pull/47) ([aufziehvogel](https://github.com/aufziehvogel))
|
17
48
|
- label support \(create, update, search\) [\#45](https://github.com/tonobo/hcloud-ruby/pull/45) ([aufziehvogel](https://github.com/aufziehvogel))
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
hcloud (1.0
|
4
|
+
hcloud (1.2.0)
|
5
5
|
activemodel
|
6
6
|
oj
|
7
7
|
typhoeus
|
@@ -9,15 +9,15 @@ PATH
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
|
-
activemodel (7.0.
|
13
|
-
activesupport (= 7.0.
|
14
|
-
activesupport (7.0.
|
12
|
+
activemodel (7.0.4)
|
13
|
+
activesupport (= 7.0.4)
|
14
|
+
activesupport (7.0.4)
|
15
15
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
16
16
|
i18n (>= 1.6, < 2)
|
17
17
|
minitest (>= 5.1)
|
18
18
|
tzinfo (~> 2.0)
|
19
|
-
addressable (2.8.
|
20
|
-
public_suffix (>= 2.0.2, <
|
19
|
+
addressable (2.8.1)
|
20
|
+
public_suffix (>= 2.0.2, < 6.0)
|
21
21
|
ast (2.4.2)
|
22
22
|
builder (3.2.4)
|
23
23
|
codecov (0.6.0)
|
@@ -28,29 +28,25 @@ GEM
|
|
28
28
|
rexml
|
29
29
|
diff-lcs (1.5.0)
|
30
30
|
docile (1.4.0)
|
31
|
-
dry-
|
31
|
+
dry-core (1.0.0)
|
32
32
|
concurrent-ruby (~> 1.0)
|
33
|
-
|
34
|
-
dry-
|
33
|
+
zeitwerk (~> 2.6)
|
34
|
+
dry-inflector (1.0.0)
|
35
|
+
dry-logic (1.5.0)
|
35
36
|
concurrent-ruby (~> 1.0)
|
36
|
-
dry-
|
37
|
-
|
37
|
+
dry-core (~> 1.0, < 2)
|
38
|
+
zeitwerk (~> 2.6)
|
39
|
+
dry-types (1.7.0)
|
38
40
|
concurrent-ruby (~> 1.0)
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
concurrent-ruby (~> 1.0)
|
45
|
-
dry-container (~> 0.3)
|
46
|
-
dry-core (~> 0.5, >= 0.5)
|
47
|
-
dry-inflector (~> 0.1, >= 0.1.2)
|
48
|
-
dry-logic (~> 1.0, >= 1.0.2)
|
49
|
-
ethon (0.15.0)
|
41
|
+
dry-core (~> 1.0, < 2)
|
42
|
+
dry-inflector (~> 1.0, < 2)
|
43
|
+
dry-logic (>= 1.4, < 2)
|
44
|
+
zeitwerk (~> 2.6)
|
45
|
+
ethon (0.16.0)
|
50
46
|
ffi (>= 1.15.0)
|
51
|
-
faker (
|
47
|
+
faker (3.0.0)
|
52
48
|
i18n (>= 1.8.11, < 2)
|
53
|
-
ffi (1.
|
49
|
+
ffi (1.16.3)
|
54
50
|
grape (1.6.2)
|
55
51
|
activesupport
|
56
52
|
builder
|
@@ -59,52 +55,53 @@ GEM
|
|
59
55
|
rack (>= 1.3.0)
|
60
56
|
rack-accept
|
61
57
|
hashdiff (1.0.1)
|
62
|
-
i18n (1.
|
58
|
+
i18n (1.12.0)
|
63
59
|
concurrent-ruby (~> 1.0)
|
60
|
+
json (2.6.2)
|
64
61
|
method_source (1.0.0)
|
65
|
-
minitest (5.
|
66
|
-
mustermann (
|
62
|
+
minitest (5.16.3)
|
63
|
+
mustermann (3.0.0)
|
67
64
|
ruby2_keywords (~> 0.0.1)
|
68
65
|
mustermann-grape (1.0.2)
|
69
66
|
mustermann (>= 1.0.0)
|
70
|
-
oj (3.
|
67
|
+
oj (3.16.1)
|
71
68
|
parallel (1.22.1)
|
72
|
-
parser (3.1.
|
69
|
+
parser (3.1.3.0)
|
73
70
|
ast (~> 2.4.1)
|
74
71
|
pry (0.14.1)
|
75
72
|
coderay (~> 1.1)
|
76
73
|
method_source (~> 1.0)
|
77
|
-
public_suffix (
|
78
|
-
rack (
|
74
|
+
public_suffix (5.0.0)
|
75
|
+
rack (3.0.1)
|
79
76
|
rack-accept (0.4.5)
|
80
77
|
rack (>= 0.4)
|
81
78
|
rainbow (3.1.1)
|
82
|
-
|
83
|
-
regexp_parser (2.4.0)
|
79
|
+
regexp_parser (2.6.1)
|
84
80
|
rexml (3.2.5)
|
85
|
-
rspec (3.
|
86
|
-
rspec-core (~> 3.
|
87
|
-
rspec-expectations (~> 3.
|
88
|
-
rspec-mocks (~> 3.
|
89
|
-
rspec-core (3.
|
90
|
-
rspec-support (~> 3.
|
91
|
-
rspec-expectations (3.
|
81
|
+
rspec (3.12.0)
|
82
|
+
rspec-core (~> 3.12.0)
|
83
|
+
rspec-expectations (~> 3.12.0)
|
84
|
+
rspec-mocks (~> 3.12.0)
|
85
|
+
rspec-core (3.12.0)
|
86
|
+
rspec-support (~> 3.12.0)
|
87
|
+
rspec-expectations (3.12.0)
|
92
88
|
diff-lcs (>= 1.2.0, < 2.0)
|
93
|
-
rspec-support (~> 3.
|
94
|
-
rspec-mocks (3.
|
89
|
+
rspec-support (~> 3.12.0)
|
90
|
+
rspec-mocks (3.12.0)
|
95
91
|
diff-lcs (>= 1.2.0, < 2.0)
|
96
|
-
rspec-support (~> 3.
|
97
|
-
rspec-support (3.
|
98
|
-
rubocop (1.
|
92
|
+
rspec-support (~> 3.12.0)
|
93
|
+
rspec-support (3.12.0)
|
94
|
+
rubocop (1.39.0)
|
95
|
+
json (~> 2.3)
|
99
96
|
parallel (~> 1.10)
|
100
|
-
parser (>= 3.1.
|
97
|
+
parser (>= 3.1.2.1)
|
101
98
|
rainbow (>= 2.2.2, < 4.0)
|
102
99
|
regexp_parser (>= 1.8, < 3.0)
|
103
100
|
rexml (>= 3.2.5, < 4.0)
|
104
|
-
rubocop-ast (>= 1.
|
101
|
+
rubocop-ast (>= 1.23.0, < 2.0)
|
105
102
|
ruby-progressbar (~> 1.7)
|
106
103
|
unicode-display_width (>= 1.4.0, < 3.0)
|
107
|
-
rubocop-ast (1.
|
104
|
+
rubocop-ast (1.23.0)
|
108
105
|
parser (>= 3.1.1.0)
|
109
106
|
ruby-progressbar (1.11.0)
|
110
107
|
ruby2_keywords (0.0.5)
|
@@ -116,13 +113,14 @@ GEM
|
|
116
113
|
simplecov_json_formatter (0.1.4)
|
117
114
|
typhoeus (1.4.0)
|
118
115
|
ethon (>= 0.9.0)
|
119
|
-
tzinfo (2.0.
|
116
|
+
tzinfo (2.0.5)
|
120
117
|
concurrent-ruby (~> 1.0)
|
121
|
-
unicode-display_width (2.
|
122
|
-
webmock (3.
|
118
|
+
unicode-display_width (2.3.0)
|
119
|
+
webmock (3.18.1)
|
123
120
|
addressable (>= 2.8.0)
|
124
121
|
crack (>= 0.3.2)
|
125
122
|
hashdiff (>= 0.4.0, < 2.0.0)
|
123
|
+
zeitwerk (2.6.6)
|
126
124
|
|
127
125
|
PLATFORMS
|
128
126
|
ruby
|
@@ -136,10 +134,9 @@ DEPENDENCIES
|
|
136
134
|
grape
|
137
135
|
hcloud!
|
138
136
|
pry
|
139
|
-
rake
|
140
137
|
rspec
|
141
138
|
rubocop
|
142
139
|
webmock
|
143
140
|
|
144
141
|
BUNDLED WITH
|
145
|
-
2.3.
|
142
|
+
2.3.25
|
data/hcloud.gemspec
CHANGED
@@ -26,7 +26,6 @@ Gem::Specification.new do |spec|
|
|
26
26
|
spec.add_development_dependency 'activemodel'
|
27
27
|
spec.add_development_dependency 'bundler'
|
28
28
|
spec.add_development_dependency 'grape'
|
29
|
-
spec.add_development_dependency 'rake'
|
30
29
|
spec.add_development_dependency 'rspec'
|
31
30
|
spec.add_development_dependency 'webmock'
|
32
31
|
spec.add_runtime_dependency 'activemodel'
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hcloud
|
4
|
+
class Certificate
|
5
|
+
require 'hcloud/certificate_resource'
|
6
|
+
|
7
|
+
include EntryLoader
|
8
|
+
|
9
|
+
schema(
|
10
|
+
created: :time
|
11
|
+
)
|
12
|
+
|
13
|
+
updatable :name
|
14
|
+
destructible
|
15
|
+
|
16
|
+
has_actions
|
17
|
+
|
18
|
+
def retry
|
19
|
+
prepare_request('actions/retry', j: COLLECT_ARGS.call(__method__, binding))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hcloud
|
4
|
+
class CertificateResource < AbstractResource
|
5
|
+
filter_attributes :name, :label_selector, :type
|
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(
|
15
|
+
name:,
|
16
|
+
type: :uploaded,
|
17
|
+
certificate: nil,
|
18
|
+
private_key: nil,
|
19
|
+
domain_names: nil,
|
20
|
+
labels: {}
|
21
|
+
)
|
22
|
+
raise Hcloud::Error::InvalidInput, 'no name given' if name.blank?
|
23
|
+
|
24
|
+
case type
|
25
|
+
when :uploaded
|
26
|
+
raise Hcloud::Error::InvalidInput, 'no certificate given' if certificate.blank?
|
27
|
+
raise Hcloud::Error::InvalidInput, 'no private_key given' if private_key.blank?
|
28
|
+
when :managed
|
29
|
+
raise Hcloud::Error::InvalidInput, 'no domain_names given' if domain_names.to_a.empty?
|
30
|
+
end
|
31
|
+
|
32
|
+
prepare_request(
|
33
|
+
'certificates', j: COLLECT_ARGS.call(__method__, binding),
|
34
|
+
expected_code: 201
|
35
|
+
) do |response|
|
36
|
+
[
|
37
|
+
Action.new(client, response.parsed_json[:action]),
|
38
|
+
Certificate.new(client, response.parsed_json[:certificate])
|
39
|
+
]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/hcloud/client.rb
CHANGED
@@ -86,10 +86,18 @@ module Hcloud
|
|
86
86
|
SSHKeyResource.new(client: self)
|
87
87
|
end
|
88
88
|
|
89
|
+
def certificates
|
90
|
+
CertificateResource.new(client: self)
|
91
|
+
end
|
92
|
+
|
89
93
|
def floating_ips
|
90
94
|
FloatingIPResource.new(client: self)
|
91
95
|
end
|
92
96
|
|
97
|
+
def primary_ips
|
98
|
+
PrimaryIPResource.new(client: self)
|
99
|
+
end
|
100
|
+
|
93
101
|
def networks
|
94
102
|
NetworkResource.new(client: self)
|
95
103
|
end
|
@@ -102,6 +110,18 @@ module Hcloud
|
|
102
110
|
VolumeResource.new(client: self)
|
103
111
|
end
|
104
112
|
|
113
|
+
def placement_groups
|
114
|
+
PlacementGroupResource.new(client: self)
|
115
|
+
end
|
116
|
+
|
117
|
+
def load_balancer_types
|
118
|
+
LoadBalancerTypeResource.new(client: self)
|
119
|
+
end
|
120
|
+
|
121
|
+
def load_balancers
|
122
|
+
LoadBalancerResource.new(client: self)
|
123
|
+
end
|
124
|
+
|
105
125
|
class ResourceFuture < Delegator
|
106
126
|
def initialize(request) # rubocop:disable Lint/MissingSuper
|
107
127
|
@request = request
|
data/lib/hcloud/entry_loader.rb
CHANGED
@@ -68,6 +68,27 @@ module Hcloud
|
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
+
def has_metrics # rubocop:disable Naming/PredicateName
|
72
|
+
define_method(:metrics) do |**kwargs|
|
73
|
+
raise Hcloud::Error::InvalidInput, 'no type given' if kwargs[:type].blank?
|
74
|
+
raise Hcloud::Error::InvalidInput, 'no start given' if kwargs[:start].blank?
|
75
|
+
raise Hcloud::Error::InvalidInput, 'no end given' if kwargs[:end].blank?
|
76
|
+
if kwargs[:start] > kwargs[:end]
|
77
|
+
raise Hcloud::Error::InvalidInput, 'start time must be before end time'
|
78
|
+
end
|
79
|
+
|
80
|
+
params = {
|
81
|
+
type: kwargs[:type],
|
82
|
+
start: kwargs[:start].iso8601,
|
83
|
+
end: kwargs[:end].iso8601,
|
84
|
+
step: kwargs[:step].to_i
|
85
|
+
}
|
86
|
+
prepare_request('metrics', method: :get, params: params) do |response|
|
87
|
+
response.parsed_json[:metrics].with_indifferent_access
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
71
92
|
def resource_class
|
72
93
|
ancestors.reverse.find { |const| const.include?(Hcloud::EntryLoader) }
|
73
94
|
end
|
data/lib/hcloud/firewall.rb
CHANGED
@@ -6,20 +6,31 @@ module Hcloud
|
|
6
6
|
|
7
7
|
include EntryLoader
|
8
8
|
|
9
|
+
schema(
|
10
|
+
created: :time
|
11
|
+
)
|
12
|
+
|
9
13
|
updatable :name
|
10
14
|
destructible
|
11
15
|
|
12
16
|
has_actions
|
13
17
|
|
14
|
-
def set_rules(rules:)
|
18
|
+
def set_rules(rules:)
|
19
|
+
# Set rules to empty when nil is passed
|
20
|
+
rules = rules.to_a
|
21
|
+
|
15
22
|
prepare_request('actions/set_rules', j: COLLECT_ARGS.call(__method__, binding))
|
16
23
|
end
|
17
24
|
|
18
25
|
def apply_to_resources(apply_to:)
|
26
|
+
raise Hcloud::Error::InvalidInput, 'no apply_to resources given' if apply_to.nil?
|
27
|
+
|
19
28
|
prepare_request('actions/apply_to_resources', j: COLLECT_ARGS.call(__method__, binding))
|
20
29
|
end
|
21
30
|
|
22
31
|
def remove_from_resources(remove_from:)
|
32
|
+
raise Hcloud::Error::InvalidInput, 'no remove_from resources given' if remove_from.nil?
|
33
|
+
|
23
34
|
prepare_request('actions/remove_from_resources', j: COLLECT_ARGS.call(__method__, binding))
|
24
35
|
end
|
25
36
|
end
|
@@ -12,11 +12,18 @@ module Hcloud
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def create(name:, rules: [], apply_to: [], labels: {})
|
15
|
+
raise Hcloud::Error::InvalidInput, 'no name given' if name.blank?
|
16
|
+
|
15
17
|
prepare_request(
|
16
18
|
'firewalls', j: COLLECT_ARGS.call(__method__, binding),
|
17
19
|
expected_code: 201
|
18
20
|
) do |response|
|
19
|
-
|
21
|
+
[
|
22
|
+
response.parsed_json[:actions].map do |action|
|
23
|
+
Action.new(client, action)
|
24
|
+
end,
|
25
|
+
Firewall.new(client, response.parsed_json[:firewall])
|
26
|
+
]
|
20
27
|
end
|
21
28
|
end
|
22
29
|
end
|
data/lib/hcloud/floating_ip.rb
CHANGED
@@ -18,6 +18,8 @@ module Hcloud
|
|
18
18
|
has_actions
|
19
19
|
|
20
20
|
def assign(server:)
|
21
|
+
raise Hcloud::Error::InvalidInput, 'no server given' if server.nil?
|
22
|
+
|
21
23
|
prepare_request('actions/assign', j: COLLECT_ARGS.call(__method__, binding))
|
22
24
|
end
|
23
25
|
|
@@ -26,6 +28,8 @@ module Hcloud
|
|
26
28
|
end
|
27
29
|
|
28
30
|
def change_dns_ptr(ip:, dns_ptr:)
|
31
|
+
raise Hcloud::Error::InvalidInput, 'no IP given' if ip.blank?
|
32
|
+
|
29
33
|
prepare_request('actions/change_dns_ptr', j: COLLECT_ARGS.call(__method__, binding))
|
30
34
|
end
|
31
35
|
end
|
@@ -14,6 +14,11 @@ module Hcloud
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def create(type:, server: nil, home_location: nil, description: nil, labels: {})
|
17
|
+
raise Hcloud::Error::InvalidInput, 'no type given' if type.blank?
|
18
|
+
if server.nil? && home_location.nil?
|
19
|
+
raise Hcloud::Error::InvalidInput, 'either server or home_location must be given'
|
20
|
+
end
|
21
|
+
|
17
22
|
prepare_request(
|
18
23
|
'floating_ips', j: COLLECT_ARGS.call(__method__, binding),
|
19
24
|
expected_code: 201
|
@@ -0,0 +1,140 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/core_ext/hash/keys'
|
4
|
+
|
5
|
+
module Hcloud
|
6
|
+
class LoadBalancer
|
7
|
+
require 'hcloud/load_balancer_resource'
|
8
|
+
|
9
|
+
include EntryLoader
|
10
|
+
|
11
|
+
schema(
|
12
|
+
location: Location,
|
13
|
+
load_balancer_type: LoadBalancerType,
|
14
|
+
created: :time
|
15
|
+
)
|
16
|
+
|
17
|
+
protectable :delete
|
18
|
+
updatable :name
|
19
|
+
destructible
|
20
|
+
|
21
|
+
has_metrics
|
22
|
+
has_actions
|
23
|
+
|
24
|
+
%w[enable_public_interface disable_public_interface].each do |action|
|
25
|
+
define_method(action) do
|
26
|
+
prepare_request("actions/#{action}", method: :post)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def attach_to_network(network:, ip: nil)
|
31
|
+
raise Hcloud::Error::InvalidInput, 'no network given' if network.nil?
|
32
|
+
|
33
|
+
prepare_request('actions/attach_to_network', j: COLLECT_ARGS.call(__method__, binding))
|
34
|
+
end
|
35
|
+
|
36
|
+
def detach_from_network(network:)
|
37
|
+
raise Hcloud::Error::InvalidInput, 'no network given' if network.nil?
|
38
|
+
|
39
|
+
prepare_request('actions/detach_from_network', j: COLLECT_ARGS.call(__method__, binding))
|
40
|
+
end
|
41
|
+
|
42
|
+
def change_dns_ptr(ip:, dns_ptr:)
|
43
|
+
raise Hcloud::Error::InvalidInput, 'no IP given' if ip.blank?
|
44
|
+
raise Hcloud::Error::InvalidInput, 'no dns_ptr given' if dns_ptr.blank?
|
45
|
+
|
46
|
+
prepare_request('actions/change_dns_ptr', j: COLLECT_ARGS.call(__method__, binding))
|
47
|
+
end
|
48
|
+
|
49
|
+
def change_type(load_balancer_type:)
|
50
|
+
raise Hcloud::Error::InvalidInput, 'no type given' if load_balancer_type.blank?
|
51
|
+
|
52
|
+
prepare_request('actions/change_type', j: COLLECT_ARGS.call(__method__, binding))
|
53
|
+
end
|
54
|
+
|
55
|
+
def change_algorithm(type:)
|
56
|
+
raise Hcloud::Error::InvalidInput, 'no type given' if type.blank?
|
57
|
+
|
58
|
+
prepare_request('actions/change_algorithm', j: COLLECT_ARGS.call(__method__, binding))
|
59
|
+
end
|
60
|
+
|
61
|
+
def add_service(
|
62
|
+
protocol:, listen_port:, destination_port:, health_check:, proxyprotocol:, http: nil
|
63
|
+
)
|
64
|
+
validate_service_input(
|
65
|
+
protocol: protocol,
|
66
|
+
listen_port: listen_port,
|
67
|
+
destination_port: destination_port,
|
68
|
+
health_check: health_check,
|
69
|
+
proxyprotocol: proxyprotocol
|
70
|
+
)
|
71
|
+
|
72
|
+
prepare_request('actions/add_service', j: COLLECT_ARGS.call(__method__, binding))
|
73
|
+
end
|
74
|
+
|
75
|
+
def update_service(
|
76
|
+
protocol:, listen_port:, destination_port:, health_check:, proxyprotocol:, http: nil
|
77
|
+
)
|
78
|
+
validate_service_input(
|
79
|
+
protocol: protocol,
|
80
|
+
listen_port: listen_port,
|
81
|
+
destination_port: destination_port,
|
82
|
+
health_check: health_check,
|
83
|
+
proxyprotocol: proxyprotocol
|
84
|
+
)
|
85
|
+
|
86
|
+
prepare_request('actions/update_service', j: COLLECT_ARGS.call(__method__, binding))
|
87
|
+
end
|
88
|
+
|
89
|
+
def delete_service(listen_port:)
|
90
|
+
raise Hcloud::Error::InvalidInput, 'no listen_port given' if listen_port.nil?
|
91
|
+
|
92
|
+
prepare_request('actions/delete_service', j: COLLECT_ARGS.call(__method__, binding))
|
93
|
+
end
|
94
|
+
|
95
|
+
def add_target(type:, server: nil, label_selector: nil, ip: nil, use_private_ip: false)
|
96
|
+
validate_target_input(
|
97
|
+
type: type, server: server, label_selector: label_selector, ip: ip
|
98
|
+
)
|
99
|
+
|
100
|
+
prepare_request('actions/add_target', j: COLLECT_ARGS.call(__method__, binding))
|
101
|
+
end
|
102
|
+
|
103
|
+
def remove_target(type:, server: nil, label_selector: nil, ip: nil)
|
104
|
+
validate_target_input(
|
105
|
+
type: type, server: server, label_selector: label_selector, ip: ip
|
106
|
+
)
|
107
|
+
|
108
|
+
prepare_request('actions/remove_target', j: COLLECT_ARGS.call(__method__, binding))
|
109
|
+
end
|
110
|
+
|
111
|
+
private
|
112
|
+
|
113
|
+
def validate_service_input(
|
114
|
+
protocol:, listen_port:, destination_port:, health_check:, proxyprotocol:
|
115
|
+
)
|
116
|
+
raise Hcloud::Error::InvalidInput, 'no protocol given' if protocol.blank?
|
117
|
+
raise Hcloud::Error::InvalidInput, 'no listen_port given' if listen_port.nil?
|
118
|
+
raise Hcloud::Error::InvalidInput, 'no destination_port given' if destination_port.nil?
|
119
|
+
raise Hcloud::Error::InvalidInput, 'no health_check given' if health_check.nil?
|
120
|
+
raise Hcloud::Error::InvalidInput, 'no proxyprotocol given' if proxyprotocol.nil?
|
121
|
+
end
|
122
|
+
|
123
|
+
def validate_target_input(type:, server: nil, label_selector: nil, ip: nil)
|
124
|
+
raise Hcloud::Error::InvalidInput, 'no type given' if type.nil?
|
125
|
+
|
126
|
+
case type.to_sym
|
127
|
+
when :server
|
128
|
+
raise Hcloud::Error::InvalidInput, 'invalid server given' unless server.to_h.key?(:id)
|
129
|
+
when :ip
|
130
|
+
raise Hcloud::Error::InvalidInput, 'no IP given' if ip.blank?
|
131
|
+
when :label_selector
|
132
|
+
unless label_selector.to_h.key?(:selector)
|
133
|
+
raise Hcloud::Error::InvalidInput, 'invalid label_selector given'
|
134
|
+
end
|
135
|
+
else
|
136
|
+
raise Hcloud::Error::InvalidInput, 'invalid type given'
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hcloud
|
4
|
+
class LoadBalancerResource < AbstractResource
|
5
|
+
filter_attributes :name, :label_selector
|
6
|
+
|
7
|
+
bind_to LoadBalancer
|
8
|
+
|
9
|
+
def [](arg)
|
10
|
+
case arg
|
11
|
+
when Integer then find_by(id: arg)
|
12
|
+
when String then find_by(name: arg)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def create(
|
17
|
+
name:, load_balancer_type:, algorithm:, location: nil, network_zone: nil,
|
18
|
+
network: nil, public_interface: nil, services: nil, targets: nil,
|
19
|
+
labels: {}
|
20
|
+
)
|
21
|
+
raise Hcloud::Error::InvalidInput, 'no name given' if name.blank?
|
22
|
+
raise Hcloud::Error::InvalidInput, 'no type given' if load_balancer_type.blank?
|
23
|
+
if !algorithm.to_h.key?(:type) || algorithm[:type].blank?
|
24
|
+
raise Hcloud::Error::InvalidInput, 'invalid algorithm given'
|
25
|
+
end
|
26
|
+
if location.blank? && network_zone.blank?
|
27
|
+
raise Hcloud::Error::InvalidInput, 'either location or network_zone must be given'
|
28
|
+
end
|
29
|
+
|
30
|
+
prepare_request(
|
31
|
+
'load_balancers', j: COLLECT_ARGS.call(__method__, binding),
|
32
|
+
expected_code: 201
|
33
|
+
) do |response|
|
34
|
+
action = Action.new(client, response[:action]) if response[:action]
|
35
|
+
[action, LoadBalancer.new(client, response[:load_balancer])]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hcloud
|
4
|
+
class LoadBalancerTypeResource < AbstractResource
|
5
|
+
filter_attributes :name
|
6
|
+
|
7
|
+
bind_to LoadBalancerType
|
8
|
+
|
9
|
+
def [](arg)
|
10
|
+
case arg
|
11
|
+
when Integer then find_by(id: arg)
|
12
|
+
when String then find_by(name: arg)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/lib/hcloud/network.rb
CHANGED
@@ -15,18 +15,29 @@ module Hcloud
|
|
15
15
|
has_actions
|
16
16
|
|
17
17
|
def add_subnet(type:, network_zone:, ip_range: nil)
|
18
|
+
raise Hcloud::Error::InvalidInput, 'no type given' if type.blank?
|
19
|
+
raise Hcloud::Error::InvalidInput, 'no network_zone given' if network_zone.blank?
|
20
|
+
|
18
21
|
prepare_request('actions/add_subnet', j: COLLECT_ARGS.call(__method__, binding))
|
19
22
|
end
|
20
23
|
|
21
24
|
def del_subnet(ip_range:)
|
25
|
+
raise Hcloud::Error::InvalidInput, 'no ip_range given' if ip_range.blank?
|
26
|
+
|
22
27
|
prepare_request('actions/delete_subnet', j: COLLECT_ARGS.call(__method__, binding))
|
23
28
|
end
|
24
29
|
|
25
30
|
def add_route(destination:, gateway:)
|
31
|
+
raise Hcloud::Error::InvalidInput, 'no destination given' if destination.blank?
|
32
|
+
raise Hcloud::Error::InvalidInput, 'no gateway given' if gateway.blank?
|
33
|
+
|
26
34
|
prepare_request('actions/add_route', j: COLLECT_ARGS.call(__method__, binding))
|
27
35
|
end
|
28
36
|
|
29
37
|
def del_route(destination:, gateway:)
|
38
|
+
raise Hcloud::Error::InvalidInput, 'no destination given' if destination.blank?
|
39
|
+
raise Hcloud::Error::InvalidInput, 'no gateway given' if gateway.blank?
|
40
|
+
|
30
41
|
prepare_request('actions/delete_route', j: COLLECT_ARGS.call(__method__, binding))
|
31
42
|
end
|
32
43
|
end
|
@@ -14,6 +14,9 @@ module Hcloud
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def create(name:, ip_range:, subnets: nil, routes: nil, labels: {})
|
17
|
+
raise Hcloud::Error::InvalidInput, 'no name given' if name.blank?
|
18
|
+
raise Hcloud::Error::InvalidInput, 'no IP range given' if ip_range.blank?
|
19
|
+
|
17
20
|
prepare_request(
|
18
21
|
'networks', j: COLLECT_ARGS.call(__method__, binding),
|
19
22
|
expected_code: 201
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hcloud
|
4
|
+
class PlacementGroupResource < AbstractResource
|
5
|
+
filter_attributes :type, :name
|
6
|
+
|
7
|
+
bind_to PlacementGroup
|
8
|
+
|
9
|
+
def [](arg)
|
10
|
+
return find_by(name: arg) if arg.is_a?(String)
|
11
|
+
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
# currently only spread is available
|
16
|
+
def create(name:, type: 'spread', labels: {})
|
17
|
+
if type.to_s != 'spread'
|
18
|
+
raise Hcloud::Error::InvalidInput, "invalid type #{type.inspect}, only 'spread' is allowed"
|
19
|
+
end
|
20
|
+
raise Hcloud::Error::InvalidInput, 'no name given' if name.blank?
|
21
|
+
|
22
|
+
prepare_request(
|
23
|
+
'placement_groups', j: COLLECT_ARGS.call(__method__, binding),
|
24
|
+
expected_code: 201
|
25
|
+
) do |response|
|
26
|
+
PlacementGroup.new(client, response.parsed_json[:placement_group])
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hcloud
|
4
|
+
class PrimaryIP
|
5
|
+
require 'hcloud/primary_ip_resource'
|
6
|
+
|
7
|
+
include EntryLoader
|
8
|
+
|
9
|
+
schema(
|
10
|
+
datacenter: Datacenter,
|
11
|
+
created: :time
|
12
|
+
)
|
13
|
+
|
14
|
+
protectable :delete
|
15
|
+
updatable :name, :auto_delete
|
16
|
+
destructible
|
17
|
+
|
18
|
+
def assign(assignee_id:, assignee_type: 'server')
|
19
|
+
raise Hcloud::Error::InvalidInput, 'no assignee_id given' if assignee_id.nil?
|
20
|
+
raise Hcloud::Error::InvalidInput, 'no assignee_type given' if assignee_type.nil?
|
21
|
+
|
22
|
+
prepare_request('actions/assign', j: COLLECT_ARGS.call(__method__, binding))
|
23
|
+
end
|
24
|
+
|
25
|
+
def unassign
|
26
|
+
prepare_request('actions/unassign', method: :post)
|
27
|
+
end
|
28
|
+
|
29
|
+
def change_dns_ptr(ip:, dns_ptr:)
|
30
|
+
raise Hcloud::Error::InvalidInput, 'no IP given' if ip.blank?
|
31
|
+
|
32
|
+
prepare_request('actions/change_dns_ptr', j: { ip: ip, dns_ptr: dns_ptr })
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Hcloud
|
4
|
+
class PrimaryIPResource < AbstractResource
|
5
|
+
filter_attributes :name, :label_selector, :ip
|
6
|
+
|
7
|
+
bind_to PrimaryIP
|
8
|
+
|
9
|
+
def [](arg)
|
10
|
+
case arg
|
11
|
+
when Integer then find_by(id: arg)
|
12
|
+
when String then find_by(name: arg)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def create(
|
17
|
+
name:,
|
18
|
+
type:,
|
19
|
+
assignee_id: nil,
|
20
|
+
assignee_type: 'server',
|
21
|
+
datacenter: nil,
|
22
|
+
auto_delete: nil,
|
23
|
+
labels: {}
|
24
|
+
)
|
25
|
+
raise Hcloud::Error::InvalidInput, 'no name given' if name.blank?
|
26
|
+
|
27
|
+
unless %w[ipv4 ipv6].include?(type.to_s)
|
28
|
+
raise Hcloud::Error::InvalidInput, 'invalid type given'
|
29
|
+
end
|
30
|
+
|
31
|
+
raise Hcloud::Error::InvalidInput, 'no assignee_type given' if assignee_type.blank?
|
32
|
+
|
33
|
+
if assignee_id.nil? && datacenter.nil?
|
34
|
+
raise Hcloud::Error::InvalidInput, 'either assignee_id or datacenter must be given'
|
35
|
+
end
|
36
|
+
|
37
|
+
prepare_request(
|
38
|
+
'primary_ips', j: COLLECT_ARGS.call(__method__, binding),
|
39
|
+
expected_code: 201
|
40
|
+
) do |response|
|
41
|
+
action = Action.new(client, response[:action]) if response[:action]
|
42
|
+
[action, PrimaryIP.new(client, response[:primary_ip])]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/hcloud/server.rb
CHANGED
@@ -37,10 +37,15 @@ module Hcloud
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def rebuild(image:)
|
40
|
+
raise Hcloud::Error::InvalidInput, 'no image given' if image.blank?
|
41
|
+
|
40
42
|
prepare_request('actions/rebuild', j: { image: image }) { |j| j[:root_password] }
|
41
43
|
end
|
42
44
|
|
43
|
-
def change_type(server_type:, upgrade_disk:
|
45
|
+
def change_type(server_type:, upgrade_disk:)
|
46
|
+
raise Hcloud::Error::InvalidInput, 'no server_type given' if server_type.blank?
|
47
|
+
raise Hcloud::Error::InvalidInput, 'no upgrade_disk given' if upgrade_disk.nil?
|
48
|
+
|
44
49
|
prepare_request('actions/change_type', j: COLLECT_ARGS.call(__method__, binding))
|
45
50
|
end
|
46
51
|
|
@@ -51,14 +56,20 @@ module Hcloud
|
|
51
56
|
end
|
52
57
|
|
53
58
|
def attach_iso(iso:)
|
59
|
+
raise Hcloud::Error::InvalidInput, 'no iso given' if iso.blank?
|
60
|
+
|
54
61
|
prepare_request('actions/attach_iso', j: { iso: iso })
|
55
62
|
end
|
56
63
|
|
57
64
|
def attach_to_network(network:, ip: nil, alias_ips: nil)
|
65
|
+
raise Hcloud::Error::InvalidInput, 'no network given' if network.nil?
|
66
|
+
|
58
67
|
prepare_request('actions/attach_to_network', j: COLLECT_ARGS.call(__method__, binding))
|
59
68
|
end
|
60
69
|
|
61
70
|
def detach_from_network(network:)
|
71
|
+
raise Hcloud::Error::InvalidInput, 'no network given' if network.nil?
|
72
|
+
|
62
73
|
prepare_request('actions/detach_from_network', j: { network: network })
|
63
74
|
end
|
64
75
|
|
@@ -20,7 +20,10 @@ module Hcloud
|
|
20
20
|
[
|
21
21
|
Action.new(client, response.parsed_json[:action]),
|
22
22
|
Server.new(client, response.parsed_json[:server]),
|
23
|
-
response.parsed_json[:root_password]
|
23
|
+
response.parsed_json[:root_password],
|
24
|
+
response.parsed_json[:next_actions].to_a.map do |action|
|
25
|
+
Action.new(client, action)
|
26
|
+
end
|
24
27
|
]
|
25
28
|
end
|
26
29
|
end
|
data/lib/hcloud/ssh_key.rb
CHANGED
@@ -12,6 +12,12 @@ module Hcloud
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def create(name:, public_key:, labels: {})
|
15
|
+
raise Hcloud::Error::InvalidInput, 'no name given' if name.blank?
|
16
|
+
|
17
|
+
unless public_key.to_s.starts_with?('ssh')
|
18
|
+
raise Hcloud::Error::InvalidInput, 'no valid SSH key given'
|
19
|
+
end
|
20
|
+
|
15
21
|
prepare_request(
|
16
22
|
'ssh_keys', j: COLLECT_ARGS.call(__method__, binding),
|
17
23
|
expected_code: 201
|
data/lib/hcloud/typhoeus_ext.rb
CHANGED
@@ -30,7 +30,7 @@ module Hcloud
|
|
30
30
|
def parsed_json
|
31
31
|
return {} if code == 204
|
32
32
|
|
33
|
-
@parsed_json ||= Oj.load(body, symbol_keys: true).tap do |json|
|
33
|
+
@parsed_json ||= Oj.load(body, symbol_keys: true, mode: :compat).tap do |json|
|
34
34
|
next unless request.hydra
|
35
35
|
|
36
36
|
check_for_error(
|
data/lib/hcloud/version.rb
CHANGED
data/lib/hcloud/volume.rb
CHANGED
@@ -17,7 +17,9 @@ module Hcloud
|
|
17
17
|
|
18
18
|
has_actions
|
19
19
|
|
20
|
-
def attach(server:, automount:)
|
20
|
+
def attach(server:, automount: nil)
|
21
|
+
raise Hcloud::Error::InvalidInput, 'no server given' if server.nil?
|
22
|
+
|
21
23
|
prepare_request('actions/attach', j: COLLECT_ARGS.call(__method__, binding))
|
22
24
|
end
|
23
25
|
|
@@ -26,6 +28,8 @@ module Hcloud
|
|
26
28
|
end
|
27
29
|
|
28
30
|
def resize(size:)
|
31
|
+
raise Hcloud::Error::InvalidInput, 'invalid size given' unless size.to_i > self.size
|
32
|
+
|
29
33
|
prepare_request('actions/resize', j: COLLECT_ARGS.call(__method__, binding))
|
30
34
|
end
|
31
35
|
end
|
@@ -12,6 +12,12 @@ module Hcloud
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def create(size:, name:, automount: nil, format: nil, location: nil, server: nil, labels: {})
|
15
|
+
raise Hcloud::Error::InvalidInput, 'no name given' if name.blank?
|
16
|
+
raise Hcloud::Error::InvalidInput, 'invalid size given' unless size.to_i >= 10
|
17
|
+
if location.blank? && server.nil?
|
18
|
+
raise Hcloud::Error::InvalidInput, 'location or server must be given'
|
19
|
+
end
|
20
|
+
|
15
21
|
prepare_request(
|
16
22
|
'volumes', j: COLLECT_ARGS.call(__method__, binding),
|
17
23
|
expected_code: 201
|
data/lib/hcloud.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'hcloud/version'
|
4
|
+
require 'active_support'
|
4
5
|
require 'active_support/core_ext/object/to_query'
|
5
6
|
require 'active_support/core_ext/hash/indifferent_access'
|
6
7
|
|
@@ -21,9 +22,15 @@ module Hcloud
|
|
21
22
|
autoload :FloatingIP, 'hcloud/floating_ip'
|
22
23
|
autoload :FloatingIPResource, 'hcloud/floating_ip_resource'
|
23
24
|
|
25
|
+
autoload :PrimaryIP, 'hcloud/primary_ip'
|
26
|
+
autoload :PrimaryIPResource, 'hcloud/primary_ip_resource'
|
27
|
+
|
24
28
|
autoload :SSHKey, 'hcloud/ssh_key'
|
25
29
|
autoload :SSHKeyResource, 'hcloud/ssh_key_resource'
|
26
30
|
|
31
|
+
autoload :Certificate, 'hcloud/certificate'
|
32
|
+
autoload :CertificateResource, 'hcloud/certificate_resource'
|
33
|
+
|
27
34
|
autoload :Datacenter, 'hcloud/datacenter'
|
28
35
|
autoload :DatacenterResource, 'hcloud/datacenter_resource'
|
29
36
|
|
@@ -50,6 +57,15 @@ module Hcloud
|
|
50
57
|
|
51
58
|
autoload :Pagination, 'hcloud/pagination'
|
52
59
|
|
60
|
+
autoload :PlacementGroup, 'hcloud/placement_group'
|
61
|
+
autoload :PlacementGroupResource, 'hcloud/placement_group_resource'
|
62
|
+
|
63
|
+
autoload :LoadBalancerType, 'hcloud/load_balancer_type'
|
64
|
+
autoload :LoadBalancerTypeResource, 'hcloud/load_balancer_type_resource'
|
65
|
+
|
66
|
+
autoload :LoadBalancer, 'hcloud/load_balancer'
|
67
|
+
autoload :LoadBalancerResource, 'hcloud/load_balancer_resource'
|
68
|
+
|
53
69
|
COLLECT_ARGS = proc do |method_name, bind|
|
54
70
|
query = bind.receiver.method(method_name).parameters.inject({}) do |hash, (_type, name)|
|
55
71
|
hash.merge(name => bind.local_variable_get(name))
|
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.
|
4
|
+
version: 1.2.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:
|
12
|
+
date: 2023-10-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
@@ -53,20 +53,6 @@ dependencies:
|
|
53
53
|
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
|
-
name: rake
|
58
|
-
requirement: !ruby/object:Gem::Requirement
|
59
|
-
requirements:
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: '0'
|
63
|
-
type: :development
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - ">="
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
70
56
|
- !ruby/object:Gem::Dependency
|
71
57
|
name: rspec
|
72
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -155,7 +141,6 @@ files:
|
|
155
141
|
- Gemfile.lock
|
156
142
|
- LICENSE
|
157
143
|
- README.md
|
158
|
-
- Rakefile
|
159
144
|
- bin/console
|
160
145
|
- bin/setup
|
161
146
|
- hcloud.gemspec
|
@@ -163,6 +148,8 @@ files:
|
|
163
148
|
- lib/hcloud/abstract_resource.rb
|
164
149
|
- lib/hcloud/action.rb
|
165
150
|
- lib/hcloud/action_resource.rb
|
151
|
+
- lib/hcloud/certificate.rb
|
152
|
+
- lib/hcloud/certificate_resource.rb
|
166
153
|
- lib/hcloud/client.rb
|
167
154
|
- lib/hcloud/datacenter.rb
|
168
155
|
- lib/hcloud/datacenter_resource.rb
|
@@ -177,11 +164,19 @@ files:
|
|
177
164
|
- lib/hcloud/image_resource.rb
|
178
165
|
- lib/hcloud/iso.rb
|
179
166
|
- lib/hcloud/iso_resource.rb
|
167
|
+
- lib/hcloud/load_balancer.rb
|
168
|
+
- lib/hcloud/load_balancer_resource.rb
|
169
|
+
- lib/hcloud/load_balancer_type.rb
|
170
|
+
- lib/hcloud/load_balancer_type_resource.rb
|
180
171
|
- lib/hcloud/location.rb
|
181
172
|
- lib/hcloud/location_resource.rb
|
182
173
|
- lib/hcloud/network.rb
|
183
174
|
- lib/hcloud/network_resource.rb
|
184
175
|
- lib/hcloud/pagination.rb
|
176
|
+
- lib/hcloud/placement_group.rb
|
177
|
+
- lib/hcloud/placement_group_resource.rb
|
178
|
+
- lib/hcloud/primary_ip.rb
|
179
|
+
- lib/hcloud/primary_ip_resource.rb
|
185
180
|
- lib/hcloud/server.rb
|
186
181
|
- lib/hcloud/server_resource.rb
|
187
182
|
- lib/hcloud/server_type.rb
|
@@ -211,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
211
206
|
- !ruby/object:Gem::Version
|
212
207
|
version: '0'
|
213
208
|
requirements: []
|
214
|
-
rubygems_version: 3.
|
209
|
+
rubygems_version: 3.3.7
|
215
210
|
signing_key:
|
216
211
|
specification_version: 4
|
217
212
|
summary: HetznerCloud native Ruby client
|
data/Rakefile
DELETED