hcloud 1.1.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +8 -1
- data/CHANGELOG.md +52 -0
- data/Gemfile.lock +66 -57
- data/hcloud.gemspec +1 -2
- data/lib/hcloud/abstract_resource.rb +1 -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 +24 -35
- data/lib/hcloud/firewall.rb +12 -1
- data/lib/hcloud/firewall_resource.rb +8 -1
- data/lib/hcloud/floating_ip.rb +5 -1
- data/lib/hcloud/floating_ip_resource.rb +6 -1
- data/lib/hcloud/future.rb +4 -1
- data/lib/hcloud/image.rb +2 -0
- data/lib/hcloud/image_resource.rb +1 -1
- 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 +17 -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/resource_loader.rb +62 -0
- data/lib/hcloud/server.rb +51 -2
- data/lib/hcloud/server_resource.rb +9 -1
- data/lib/hcloud/ssh_key.rb +4 -0
- data/lib/hcloud/ssh_key_resource.rb +7 -1
- 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 +7 -1
- data/lib/hcloud.rb +18 -0
- metadata +19 -23
- 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: d0476422e0663e6960e40d0198cfcc4544701def1670fbefae008cfcb4208a41
|
4
|
+
data.tar.gz: 192b15230064d1f5fea319268ce5ea897785e9bcc5c7f970ee50451490339fe7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9676ed391c7b0474fdb4c3b16d9ff2556ffe0909dfb2bc16a3d9fb9eed48d178b5d6d7ea7cc42eb93ebed99d38854846bbe0791e36a3967fd8c45ba5ca2fcd60
|
7
|
+
data.tar.gz: e9c4d5118d2e16ce1421cdc42c0413326bb58b17f986f91081d2db04004cb1a1e60edbcb4f84eec904adc6d6e71d5d7db4f052f4b1a07b2d0bede23184d87410
|
data/.github/workflows/ruby.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,56 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [v1.3.0](https://github.com/tonobo/hcloud-ruby/tree/v1.3.0) (2024-02-20)
|
4
|
+
|
5
|
+
[Full Changelog](https://github.com/tonobo/hcloud-ruby/compare/v1.2.0...v1.3.0)
|
6
|
+
|
7
|
+
**Closed issues:**
|
8
|
+
|
9
|
+
- \[Enhancement\] Add missing fields / endpoints to Images + Servers [\#30](https://github.com/tonobo/hcloud-ruby/issues/30)
|
10
|
+
|
11
|
+
**Merged pull requests:**
|
12
|
+
|
13
|
+
- fix activemodel in Gemfile.lock [\#87](https://github.com/tonobo/hcloud-ruby/pull/87) ([skoch-hc](https://github.com/skoch-hc))
|
14
|
+
- Fix typo for pagination method [\#85](https://github.com/tonobo/hcloud-ruby/pull/85) ([coorasse](https://github.com/coorasse))
|
15
|
+
- \(\#82\) fix undefined method `.blank?` [\#84](https://github.com/tonobo/hcloud-ruby/pull/84) ([bastelfreak](https://github.com/bastelfreak))
|
16
|
+
- CI: Run on PRs and pushes to master [\#83](https://github.com/tonobo/hcloud-ruby/pull/83) ([bastelfreak](https://github.com/bastelfreak))
|
17
|
+
- Dont list activemodel as dev- and runtime dep [\#80](https://github.com/tonobo/hcloud-ruby/pull/80) ([bastelfreak](https://github.com/bastelfreak))
|
18
|
+
- version: bump to v1.2.0 [\#79](https://github.com/tonobo/hcloud-ruby/pull/79) ([aufziehvogel](https://github.com/aufziehvogel))
|
19
|
+
- build\(deps\): bump rack from 3.0.1 to 3.0.6.1 [\#75](https://github.com/tonobo/hcloud-ruby/pull/75) ([dependabot[bot]](https://github.com/apps/dependabot))
|
20
|
+
- add missing features to existing resources [\#60](https://github.com/tonobo/hcloud-ruby/pull/60) ([aufziehvogel](https://github.com/aufziehvogel))
|
21
|
+
|
22
|
+
## [v1.2.0](https://github.com/tonobo/hcloud-ruby/tree/v1.2.0) (2023-10-11)
|
23
|
+
|
24
|
+
[Full Changelog](https://github.com/tonobo/hcloud-ruby/compare/v1.1.0...v1.2.0)
|
25
|
+
|
26
|
+
**Closed issues:**
|
27
|
+
|
28
|
+
- question: could you point out the differences to other hcloud gem? [\#71](https://github.com/tonobo/hcloud-ruby/issues/71)
|
29
|
+
- \[Feature\] Add Primary IPs [\#57](https://github.com/tonobo/hcloud-ruby/issues/57)
|
30
|
+
- \[Feature\] Add Primary IPs [\#56](https://github.com/tonobo/hcloud-ruby/issues/56)
|
31
|
+
- \[Bug\] Firewalls do not expose actions [\#54](https://github.com/tonobo/hcloud-ruby/issues/54)
|
32
|
+
- \[Bug\] IPv6 global address is not parsed correctly [\#49](https://github.com/tonobo/hcloud-ruby/issues/49)
|
33
|
+
- \[Feature\] Add LoadBalancers and -Types [\#29](https://github.com/tonobo/hcloud-ruby/issues/29)
|
34
|
+
- \[Feature\] Add PlacementGroups [\#27](https://github.com/tonobo/hcloud-ruby/issues/27)
|
35
|
+
- \[Feature\] Add Certificates [\#26](https://github.com/tonobo/hcloud-ruby/issues/26)
|
36
|
+
- \[Feature\] Add Firewalls [\#25](https://github.com/tonobo/hcloud-ruby/issues/25)
|
37
|
+
|
38
|
+
**Merged pull requests:**
|
39
|
+
|
40
|
+
- version: bump to v1.2.0 [\#78](https://github.com/tonobo/hcloud-ruby/pull/78) ([aufziehvogel](https://github.com/aufziehvogel))
|
41
|
+
- lib: import active\_support before cherry-picking imports [\#77](https://github.com/tonobo/hcloud-ruby/pull/77) ([aufziehvogel](https://github.com/aufziehvogel))
|
42
|
+
- Dependencies: Drop rake, as it's unnecessary [\#74](https://github.com/tonobo/hcloud-ruby/pull/74) ([Kjarrigan](https://github.com/Kjarrigan))
|
43
|
+
- server: return `next_actions` data on create [\#72](https://github.com/tonobo/hcloud-ruby/pull/72) ([aufziehvogel](https://github.com/aufziehvogel))
|
44
|
+
- lib: implement primary IPs [\#65](https://github.com/tonobo/hcloud-ruby/pull/65) ([aufziehvogel](https://github.com/aufziehvogel))
|
45
|
+
- lib: implement certificates [\#64](https://github.com/tonobo/hcloud-ruby/pull/64) ([aufziehvogel](https://github.com/aufziehvogel))
|
46
|
+
- spec: include context doubles for doubles tests [\#63](https://github.com/tonobo/hcloud-ruby/pull/63) ([aufziehvogel](https://github.com/aufziehvogel))
|
47
|
+
- fix: return actions info on firewall create [\#59](https://github.com/tonobo/hcloud-ruby/pull/59) ([aufziehvogel](https://github.com/aufziehvogel))
|
48
|
+
- fix: do not interpret leading : in JSON as symbol [\#58](https://github.com/tonobo/hcloud-ruby/pull/58) ([aufziehvogel](https://github.com/aufziehvogel))
|
49
|
+
- lib: implement load balancer [\#55](https://github.com/tonobo/hcloud-ruby/pull/55) ([aufziehvogel](https://github.com/aufziehvogel))
|
50
|
+
- implement double tests for existing resources [\#53](https://github.com/tonobo/hcloud-ruby/pull/53) ([aufziehvogel](https://github.com/aufziehvogel))
|
51
|
+
- Add PlacementGroup [\#52](https://github.com/tonobo/hcloud-ruby/pull/52) ([aufziehvogel](https://github.com/aufziehvogel))
|
52
|
+
- firewall: please linter [\#51](https://github.com/tonobo/hcloud-ruby/pull/51) ([RaphaelPour](https://github.com/RaphaelPour))
|
53
|
+
|
3
54
|
## [v1.1.0](https://github.com/tonobo/hcloud-ruby/tree/v1.1.0) (2022-11-29)
|
4
55
|
|
5
56
|
[Full Changelog](https://github.com/tonobo/hcloud-ruby/compare/v1.0.3...v1.1.0)
|
@@ -12,6 +63,7 @@
|
|
12
63
|
|
13
64
|
**Merged pull requests:**
|
14
65
|
|
66
|
+
- version: bump to v1.1.0 [\#50](https://github.com/tonobo/hcloud-ruby/pull/50) ([aufziehvogel](https://github.com/aufziehvogel))
|
15
67
|
- handle action array responses for firewall actions [\#48](https://github.com/tonobo/hcloud-ruby/pull/48) ([aufziehvogel](https://github.com/aufziehvogel))
|
16
68
|
- fix auto pagination test to always use three pages [\#47](https://github.com/tonobo/hcloud-ruby/pull/47) ([aufziehvogel](https://github.com/aufziehvogel))
|
17
69
|
- label support \(create, update, search\) [\#45](https://github.com/tonobo/hcloud-ruby/pull/45) ([aufziehvogel](https://github.com/aufziehvogel))
|
data/Gemfile.lock
CHANGED
@@ -1,110 +1,120 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
hcloud (1.0
|
4
|
+
hcloud (1.3.0)
|
5
5
|
activemodel
|
6
|
+
activesupport
|
6
7
|
oj
|
7
8
|
typhoeus
|
8
9
|
|
9
10
|
GEM
|
10
11
|
remote: https://rubygems.org/
|
11
12
|
specs:
|
12
|
-
activemodel (7.
|
13
|
-
activesupport (= 7.
|
14
|
-
activesupport (7.
|
13
|
+
activemodel (7.1.1)
|
14
|
+
activesupport (= 7.1.1)
|
15
|
+
activesupport (7.1.1)
|
16
|
+
base64
|
17
|
+
bigdecimal
|
15
18
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
19
|
+
connection_pool (>= 2.2.5)
|
20
|
+
drb
|
16
21
|
i18n (>= 1.6, < 2)
|
17
22
|
minitest (>= 5.1)
|
23
|
+
mutex_m
|
18
24
|
tzinfo (~> 2.0)
|
19
|
-
addressable (2.8.
|
20
|
-
public_suffix (>= 2.0.2, <
|
25
|
+
addressable (2.8.1)
|
26
|
+
public_suffix (>= 2.0.2, < 6.0)
|
21
27
|
ast (2.4.2)
|
28
|
+
base64 (0.1.1)
|
29
|
+
bigdecimal (3.1.4)
|
22
30
|
builder (3.2.4)
|
23
31
|
codecov (0.6.0)
|
24
32
|
simplecov (>= 0.15, < 0.22)
|
25
33
|
coderay (1.1.3)
|
26
34
|
concurrent-ruby (1.1.10)
|
35
|
+
connection_pool (2.4.1)
|
27
36
|
crack (0.4.5)
|
28
37
|
rexml
|
29
38
|
diff-lcs (1.5.0)
|
30
39
|
docile (1.4.0)
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
dry-container (0.9.0)
|
40
|
+
drb (2.1.1)
|
41
|
+
ruby2_keywords
|
42
|
+
dry-core (1.0.0)
|
35
43
|
concurrent-ruby (~> 1.0)
|
36
|
-
|
37
|
-
dry-
|
44
|
+
zeitwerk (~> 2.6)
|
45
|
+
dry-inflector (1.0.0)
|
46
|
+
dry-logic (1.5.0)
|
38
47
|
concurrent-ruby (~> 1.0)
|
39
|
-
|
40
|
-
|
48
|
+
dry-core (~> 1.0, < 2)
|
49
|
+
zeitwerk (~> 2.6)
|
50
|
+
dry-types (1.7.0)
|
41
51
|
concurrent-ruby (~> 1.0)
|
42
|
-
dry-core (~> 0
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
dry-inflector (~> 0.1, >= 0.1.2)
|
48
|
-
dry-logic (~> 1.0, >= 1.0.2)
|
49
|
-
ethon (0.15.0)
|
52
|
+
dry-core (~> 1.0, < 2)
|
53
|
+
dry-inflector (~> 1.0, < 2)
|
54
|
+
dry-logic (>= 1.4, < 2)
|
55
|
+
zeitwerk (~> 2.6)
|
56
|
+
ethon (0.16.0)
|
50
57
|
ffi (>= 1.15.0)
|
51
|
-
faker (
|
58
|
+
faker (3.0.0)
|
52
59
|
i18n (>= 1.8.11, < 2)
|
53
|
-
ffi (1.
|
54
|
-
grape (1.
|
55
|
-
activesupport
|
60
|
+
ffi (1.16.3)
|
61
|
+
grape (1.8.0)
|
62
|
+
activesupport (>= 5)
|
56
63
|
builder
|
57
64
|
dry-types (>= 1.1)
|
58
65
|
mustermann-grape (~> 1.0.0)
|
59
66
|
rack (>= 1.3.0)
|
60
67
|
rack-accept
|
61
68
|
hashdiff (1.0.1)
|
62
|
-
i18n (1.
|
69
|
+
i18n (1.12.0)
|
63
70
|
concurrent-ruby (~> 1.0)
|
71
|
+
json (2.6.2)
|
64
72
|
method_source (1.0.0)
|
65
|
-
minitest (5.
|
66
|
-
mustermann (
|
73
|
+
minitest (5.16.3)
|
74
|
+
mustermann (3.0.0)
|
67
75
|
ruby2_keywords (~> 0.0.1)
|
68
76
|
mustermann-grape (1.0.2)
|
69
77
|
mustermann (>= 1.0.0)
|
70
|
-
|
78
|
+
mutex_m (0.1.2)
|
79
|
+
oj (3.16.3)
|
80
|
+
bigdecimal (>= 3.0)
|
71
81
|
parallel (1.22.1)
|
72
|
-
parser (3.1.
|
82
|
+
parser (3.1.3.0)
|
73
83
|
ast (~> 2.4.1)
|
74
84
|
pry (0.14.1)
|
75
85
|
coderay (~> 1.1)
|
76
86
|
method_source (~> 1.0)
|
77
|
-
public_suffix (
|
78
|
-
rack (
|
87
|
+
public_suffix (5.0.0)
|
88
|
+
rack (3.0.6.1)
|
79
89
|
rack-accept (0.4.5)
|
80
90
|
rack (>= 0.4)
|
81
91
|
rainbow (3.1.1)
|
82
|
-
|
83
|
-
regexp_parser (2.4.0)
|
92
|
+
regexp_parser (2.6.1)
|
84
93
|
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.
|
94
|
+
rspec (3.12.0)
|
95
|
+
rspec-core (~> 3.12.0)
|
96
|
+
rspec-expectations (~> 3.12.0)
|
97
|
+
rspec-mocks (~> 3.12.0)
|
98
|
+
rspec-core (3.12.0)
|
99
|
+
rspec-support (~> 3.12.0)
|
100
|
+
rspec-expectations (3.12.0)
|
92
101
|
diff-lcs (>= 1.2.0, < 2.0)
|
93
|
-
rspec-support (~> 3.
|
94
|
-
rspec-mocks (3.
|
102
|
+
rspec-support (~> 3.12.0)
|
103
|
+
rspec-mocks (3.12.0)
|
95
104
|
diff-lcs (>= 1.2.0, < 2.0)
|
96
|
-
rspec-support (~> 3.
|
97
|
-
rspec-support (3.
|
98
|
-
rubocop (1.
|
105
|
+
rspec-support (~> 3.12.0)
|
106
|
+
rspec-support (3.12.0)
|
107
|
+
rubocop (1.39.0)
|
108
|
+
json (~> 2.3)
|
99
109
|
parallel (~> 1.10)
|
100
|
-
parser (>= 3.1.
|
110
|
+
parser (>= 3.1.2.1)
|
101
111
|
rainbow (>= 2.2.2, < 4.0)
|
102
112
|
regexp_parser (>= 1.8, < 3.0)
|
103
113
|
rexml (>= 3.2.5, < 4.0)
|
104
|
-
rubocop-ast (>= 1.
|
114
|
+
rubocop-ast (>= 1.23.0, < 2.0)
|
105
115
|
ruby-progressbar (~> 1.7)
|
106
116
|
unicode-display_width (>= 1.4.0, < 3.0)
|
107
|
-
rubocop-ast (1.
|
117
|
+
rubocop-ast (1.23.0)
|
108
118
|
parser (>= 3.1.1.0)
|
109
119
|
ruby-progressbar (1.11.0)
|
110
120
|
ruby2_keywords (0.0.5)
|
@@ -114,32 +124,31 @@ GEM
|
|
114
124
|
simplecov_json_formatter (~> 0.1)
|
115
125
|
simplecov-html (0.12.3)
|
116
126
|
simplecov_json_formatter (0.1.4)
|
117
|
-
typhoeus (1.4.
|
127
|
+
typhoeus (1.4.1)
|
118
128
|
ethon (>= 0.9.0)
|
119
|
-
tzinfo (2.0.
|
129
|
+
tzinfo (2.0.5)
|
120
130
|
concurrent-ruby (~> 1.0)
|
121
|
-
unicode-display_width (2.
|
122
|
-
webmock (3.
|
131
|
+
unicode-display_width (2.3.0)
|
132
|
+
webmock (3.18.1)
|
123
133
|
addressable (>= 2.8.0)
|
124
134
|
crack (>= 0.3.2)
|
125
135
|
hashdiff (>= 0.4.0, < 2.0.0)
|
136
|
+
zeitwerk (2.6.6)
|
126
137
|
|
127
138
|
PLATFORMS
|
128
139
|
ruby
|
129
140
|
x86_64-linux
|
130
141
|
|
131
142
|
DEPENDENCIES
|
132
|
-
activemodel
|
133
143
|
bundler
|
134
144
|
codecov
|
135
145
|
faker
|
136
146
|
grape
|
137
147
|
hcloud!
|
138
148
|
pry
|
139
|
-
rake
|
140
149
|
rspec
|
141
150
|
rubocop
|
142
151
|
webmock
|
143
152
|
|
144
153
|
BUNDLED WITH
|
145
|
-
2.3.
|
154
|
+
2.3.25
|
data/hcloud.gemspec
CHANGED
@@ -23,13 +23,12 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
24
24
|
spec.require_paths = ['lib']
|
25
25
|
|
26
|
-
spec.add_development_dependency 'activemodel'
|
27
26
|
spec.add_development_dependency 'bundler'
|
28
27
|
spec.add_development_dependency 'grape'
|
29
|
-
spec.add_development_dependency 'rake'
|
30
28
|
spec.add_development_dependency 'rspec'
|
31
29
|
spec.add_development_dependency 'webmock'
|
32
30
|
spec.add_runtime_dependency 'activemodel'
|
31
|
+
spec.add_runtime_dependency 'activesupport'
|
33
32
|
spec.add_runtime_dependency 'oj'
|
34
33
|
spec.add_runtime_dependency 'typhoeus'
|
35
34
|
end
|
@@ -12,7 +12,7 @@ module Hcloud
|
|
12
12
|
def bind_to(klass)
|
13
13
|
resource = self
|
14
14
|
%w[find find_by where all [] page limit per_page order
|
15
|
-
to_a count pagnation each].each do |method|
|
15
|
+
to_a count pagnation pagination each].each do |method|
|
16
16
|
klass.define_singleton_method(method) do |*args, &block|
|
17
17
|
resource.new(client: Client.connection).public_send(method, *args, &block)
|
18
18
|
end
|
@@ -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
|
@@ -202,49 +223,17 @@ module Hcloud
|
|
202
223
|
instance_variable_set("@#{key}", value)
|
203
224
|
end
|
204
225
|
|
205
|
-
# rubocop: disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength, Metrics/AbcSize
|
206
226
|
def _load(resource)
|
207
227
|
return if resource.nil?
|
208
228
|
|
209
229
|
@_attributes = {}.with_indifferent_access
|
210
230
|
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
if definition == :time
|
215
|
-
_update_attribute(key, value ? Time.parse(value) : nil)
|
216
|
-
next
|
217
|
-
end
|
218
|
-
|
219
|
-
if definition.is_a?(Class) && definition.include?(EntryLoader)
|
220
|
-
_update_attribute(key, value ? definition.new(client, value) : nil)
|
221
|
-
next
|
222
|
-
end
|
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
|
231
|
+
loader = Hcloud::ResourceLoader.new(self.class.schema, client: client)
|
232
|
+
loaded_data = loader.load(resource)
|
244
233
|
|
234
|
+
loaded_data.each do |key, value|
|
245
235
|
_update_attribute(key, value.is_a?(Hash) ? value.with_indifferent_access : value)
|
246
236
|
end
|
247
237
|
end
|
248
|
-
# rubocop: enable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/MethodLength, Metrics/AbcSize
|
249
238
|
end
|
250
239
|
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
@@ -12,12 +12,14 @@ module Hcloud
|
|
12
12
|
)
|
13
13
|
|
14
14
|
protectable :delete
|
15
|
-
updatable :description
|
15
|
+
updatable :name, :description
|
16
16
|
destructible
|
17
17
|
|
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
|
@@ -13,7 +13,12 @@ module Hcloud
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
def create(type:, server: nil, home_location: nil, description: nil, labels: {})
|
16
|
+
def create(type:, name: nil, 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
|
data/lib/hcloud/future.rb
CHANGED
@@ -4,10 +4,13 @@ require 'active_support/core_ext/string/inflections'
|
|
4
4
|
|
5
5
|
module Hcloud
|
6
6
|
class Future < Delegator
|
7
|
+
attr_reader :raw_data
|
8
|
+
|
7
9
|
# rubocop: disable Lint/MissingSuper
|
8
|
-
def initialize(client, target_class, id)
|
10
|
+
def initialize(client, target_class, id, raw_data: nil)
|
9
11
|
@target_class = target_class
|
10
12
|
@id = id
|
13
|
+
@raw_data = raw_data
|
11
14
|
@__client = client
|
12
15
|
end
|
13
16
|
# rubocop: enable Lint/MissingSuper
|
data/lib/hcloud/image.rb
CHANGED