hetznercloud 1.4.0 → 1.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/Gemfile +13 -0
  4. data/README.md +76 -32
  5. data/config/inflections.rb +3 -0
  6. data/lib/hcloud/client.rb +4 -3
  7. data/lib/hcloud/collection.rb +4 -2
  8. data/lib/hcloud/concerns/concerns.rb +4 -0
  9. data/lib/hcloud/concerns/labelable.rb +11 -0
  10. data/lib/hcloud/concerns/queryable.rb +2 -0
  11. data/lib/hcloud/entities/primary_ip_prices.rb +8 -0
  12. data/lib/hcloud/entities/private_network.rb +15 -0
  13. data/lib/hcloud/entities/protection.rb +0 -2
  14. data/lib/hcloud/entities/server_protection.rb +11 -0
  15. data/lib/hcloud/errors.rb +1 -0
  16. data/lib/hcloud/http.rb +4 -2
  17. data/lib/hcloud/resource_type.rb +32 -2
  18. data/lib/hcloud/resources/action.rb +5 -6
  19. data/lib/hcloud/resources/certificate.rb +8 -6
  20. data/lib/hcloud/resources/datacenter.rb +1 -1
  21. data/lib/hcloud/resources/firewall.rb +7 -5
  22. data/lib/hcloud/resources/floating_ip.rb +7 -5
  23. data/lib/hcloud/resources/image.rb +6 -7
  24. data/lib/hcloud/resources/iso.rb +1 -1
  25. data/lib/hcloud/resources/load_balancer.rb +7 -5
  26. data/lib/hcloud/resources/load_balancer_type.rb +1 -1
  27. data/lib/hcloud/resources/location.rb +1 -1
  28. data/lib/hcloud/resources/metadata.rb +33 -0
  29. data/lib/hcloud/resources/network.rb +5 -3
  30. data/lib/hcloud/resources/placement_group.rb +7 -5
  31. data/lib/hcloud/resources/pricing.rb +2 -0
  32. data/lib/hcloud/resources/primary_ip.rb +8 -6
  33. data/lib/hcloud/resources/server.rb +9 -7
  34. data/lib/hcloud/resources/server_type.rb +2 -1
  35. data/lib/hcloud/resources/ssh_key.rb +8 -6
  36. data/lib/hcloud/resources/volume.rb +8 -6
  37. data/lib/hcloud/version.rb +2 -2
  38. data/lib/http/mime_type/yaml.rb +23 -0
  39. data/lib/http/rate_limiter.rb +40 -0
  40. metadata +9 -128
@@ -11,7 +11,7 @@ module HCloud
11
11
  #
12
12
  # == Search ISOs
13
13
  #
14
- # HCloud::ISO.all.where(name: "debian-10.10.0-amd64-netinst.iso")
14
+ # HCloud::ISO.where(name: "debian-10.10.0-amd64-netinst.iso")
15
15
  # # => #<HCloud::ISO id: 7631, ...>
16
16
  #
17
17
  # == Find ISO by ID
@@ -11,15 +11,18 @@ module HCloud
11
11
  #
12
12
  # == Sort load balancers
13
13
  #
14
- # HCloud::LoadBalancer.all.sort(name: :desc)
14
+ # HCloud::LoadBalancer.sort(name: :desc)
15
15
  # # => [#<HCloud::LoadBalancer id: 1, ...>, ...]
16
16
  #
17
- # HCloud::LoadBalancer.all.sort(:id, name: :asc)
17
+ # HCloud::LoadBalancer.sort(:id, name: :asc)
18
18
  # # => [#<HCloud::LoadBalancer id: 1, ...>, ...]
19
19
  #
20
20
  # == Search load balancers
21
21
  #
22
- # HCloud::LoadBalancer.all.where(name: "my_load_balancer")
22
+ # HCloud::LoadBalancer.where(name: "my_load_balancer")
23
+ # # => #<HCloud::LoadBalancer id: 1, ...>
24
+ #
25
+ # HCloud::LoadBalancer.where(label_selector: { environment: "production" })
23
26
  # # => #<HCloud::LoadBalancer id: 1, ...>
24
27
  #
25
28
  # == Find load balancer by ID
@@ -65,6 +68,7 @@ module HCloud
65
68
  updatable
66
69
  deletable
67
70
  meterable
71
+ labelable
68
72
 
69
73
  attribute :id, :integer
70
74
  attribute :name
@@ -94,8 +98,6 @@ module HCloud
94
98
 
95
99
  attribute :protection, :protection
96
100
 
97
- attribute :labels, default: -> { {} }
98
-
99
101
  def creatable_attributes
100
102
  [:name, :labels, :algorithm, :network_zone, :public_interface, :services, :targets, load_balancer_type: [:id, :name], location: [:id, :name], network: [:id, :name]]
101
103
  end
@@ -11,7 +11,7 @@ module HCloud
11
11
  #
12
12
  # == Search load balancer types
13
13
  #
14
- # HCloud::LoadBalancerType.all.where(name: "cx11")
14
+ # HCloud::LoadBalancerType.where(name: "cx11")
15
15
  # # => #<HCloud::LoadBalancerType id: 1, ...>
16
16
  #
17
17
  # == Find load balancer type by ID
@@ -11,7 +11,7 @@ module HCloud
11
11
  #
12
12
  # == Search locations
13
13
  #
14
- # HCloud::Location.all.where(name: "fsn1")
14
+ # HCloud::Location.where(name: "fsn1")
15
15
  # # => #<HCloud::Location id: 1, ...>
16
16
  #
17
17
  # == Find location by ID
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HCloud
4
+ ##
5
+ # Server metadata.
6
+ #
7
+ # This resource allows a Hetzner server to retrieve metadata about itself.
8
+ # It cannot be used outside of Hetzner servers.
9
+ #
10
+ # == Find metadata
11
+ #
12
+ # HCloud::Metadata.find
13
+ # # => #<HCloud::Metadata ...>
14
+ #
15
+ class Metadata < Resource
16
+ ENDPOINT = "https://169.254.169.254/hetzner/v1/metadata"
17
+
18
+ attribute :hostname
19
+ attribute :instance_id, :integer
20
+ attribute :public_ipv4
21
+ attribute :availability_zone
22
+ attribute :region
23
+
24
+ attribute :private_networks, :private_network, array: true, default: -> { [] }
25
+
26
+ def self.find
27
+ new(::HTTP
28
+ .get(ENDPOINT)
29
+ .parse(:yaml)
30
+ .deep_transform_keys { |key| key.underscore.to_sym })
31
+ end
32
+ end
33
+ end
@@ -11,7 +11,10 @@ module HCloud
11
11
  #
12
12
  # == Search networks
13
13
  #
14
- # HCloud::Network.all.where(name: "my_network")
14
+ # HCloud::Network.where(name: "my_network")
15
+ # # => #<HCloud::Network id: 1, ...>
16
+ #
17
+ # HCloud::Network.where(label_selector: { environment: "production" })
15
18
  # # => #<HCloud::Network id: 1, ...>
16
19
  #
17
20
  # == Find network by ID
@@ -106,6 +109,7 @@ module HCloud
106
109
  creatable
107
110
  updatable
108
111
  deletable
112
+ labelable
109
113
 
110
114
  attribute :id, :integer
111
115
  attribute :name
@@ -121,8 +125,6 @@ module HCloud
121
125
 
122
126
  attribute :protection, :protection
123
127
 
124
- attribute :labels, default: -> { {} }
125
-
126
128
  action :change_protection
127
129
 
128
130
  action :add_route
@@ -11,15 +11,18 @@ module HCloud
11
11
  #
12
12
  # == Sort placement groups
13
13
  #
14
- # HCloud::PlacementGroup.all.sort(name: :desc)
14
+ # HCloud::PlacementGroup.sort(name: :desc)
15
15
  # # => [#<HCloud::PlacementGroup id: 1, ...>, ...]
16
16
  #
17
- # HCloud::PlacementGroup.all.sort(:id, name: :asc)
17
+ # HCloud::PlacementGroup.sort(:id, name: :asc)
18
18
  # # => [#<HCloud::PlacementGroup id: 1, ...>, ...]
19
19
  #
20
20
  # == Search placement groups
21
21
  #
22
- # HCloud::PlacementGroup.all.where(name: "my_placement_group")
22
+ # HCloud::PlacementGroup.where(name: "my_placement_group")
23
+ # # => #<HCloud::PlacementGroup id: 2, ...>
24
+ #
25
+ # HCloud::PlacementGroup.where(label_selector: { environment: "production" })
23
26
  # # => #<HCloud::PlacementGroup id: 2, ...>
24
27
  #
25
28
  # == Find placement group by ID
@@ -55,6 +58,7 @@ module HCloud
55
58
  creatable
56
59
  updatable
57
60
  deletable
61
+ labelable
58
62
 
59
63
  attribute :id, :integer
60
64
  attribute :name
@@ -62,8 +66,6 @@ module HCloud
62
66
 
63
67
  attribute :servers, :server, array: true, default: -> { [] }
64
68
 
65
- attribute :labels, default: -> { {} }
66
-
67
69
  def creatable_attributes
68
70
  [:name, :type, :labels]
69
71
  end
@@ -21,6 +21,8 @@ module HCloud
21
21
 
22
22
  attribute :load_balancer_types, :load_balancer_type_price, array: true, default: -> { [] }
23
23
 
24
+ attribute :primary_ips, :primary_ip_prices, array: true, default: -> { [] }
25
+
24
26
  attribute :server_backup, :server_backup_price
25
27
 
26
28
  attribute :server_types, :server_type_price, array: true, default: -> { [] }
@@ -11,18 +11,21 @@ module HCloud
11
11
  #
12
12
  # == Sort primary IPs
13
13
  #
14
- # HCloud::PrimaryIP.all.sort(id: :asc)
14
+ # HCloud::PrimaryIP.sort(id: :asc)
15
15
  # # => [#<HCloud::PrimaryIP id: 1, ...>, ...]
16
16
  #
17
- # HCloud::PrimaryIP.all.sort(:id, created: :asc)
17
+ # HCloud::PrimaryIP.sort(:id, created: :asc)
18
18
  # # => [#<HCloud::PrimaryIP id: 1, ...>, ...]
19
19
  #
20
20
  # == Search primary IPs
21
21
  #
22
- # HCloud::PrimaryIP.all.where(name: "my_primary_ip")
22
+ # HCloud::PrimaryIP.where(name: "my_primary_ip")
23
23
  # # => #<HCloud::PrimaryIP id: 1, ...>
24
24
  #
25
- # HCloud::PrimaryIP.all.where(ip: "1.2.3.4")
25
+ # HCloud::PrimaryIP.where(ip: "1.2.3.4")
26
+ # # => #<HCloud::PrimaryIP id: 1, ...>
27
+ #
28
+ # HCloud::PrimaryIP.where(label_selector: { environment: "production" })
26
29
  # # => #<HCloud::PrimaryIP id: 1, ...>
27
30
  #
28
31
  # == Find primary IP by ID
@@ -107,6 +110,7 @@ module HCloud
107
110
  creatable
108
111
  updatable
109
112
  deletable
113
+ labelable
110
114
 
111
115
  attribute :id, :integer
112
116
  attribute :name
@@ -125,8 +129,6 @@ module HCloud
125
129
 
126
130
  attribute :protection, :protection
127
131
 
128
- attribute :labels, default: -> { {} }
129
-
130
132
  alias auto_delete? auto_delete
131
133
  alias blocked? blocked
132
134
 
@@ -11,18 +11,21 @@ module HCloud
11
11
  #
12
12
  # == Sort servers
13
13
  #
14
- # HCloud::Server.all.sort(name: :desc)
14
+ # HCloud::Server.sort(name: :desc)
15
15
  # # => [#<HCloud::Server id: 1, ...>, ...]
16
16
  #
17
- # HCloud::Server.all.sort(:id, name: :asc)
17
+ # HCloud::Server.sort(:id, name: :asc)
18
18
  # # => [#<HCloud::Server id: 1, ...>, ...]
19
19
  #
20
20
  # == Search servers
21
21
  #
22
- # HCloud::Server.all.where(name: "my_server")
22
+ # HCloud::Server.where(name: "my_server")
23
23
  # # => #<HCloud::Server id: 1, ...>
24
24
  #
25
- # HCloud::Server.all.where(status: "running")
25
+ # HCloud::Server.where(status: "running")
26
+ # # => #<HCloud::Server id: 1, ...>
27
+ #
28
+ # HCloud::Server.where(label_selector: { environment: "production" })
26
29
  # # => #<HCloud::Server id: 1, ...>
27
30
  #
28
31
  # == Find server by ID
@@ -72,6 +75,7 @@ module HCloud
72
75
  updatable
73
76
  deletable
74
77
  meterable
78
+ labelable
75
79
 
76
80
  attribute :id, :integer
77
81
  attribute :name
@@ -107,7 +111,7 @@ module HCloud
107
111
 
108
112
  attribute :primary_disk_size, :integer
109
113
 
110
- attribute :protection, :protection
114
+ attribute :protection, :server_protection
111
115
 
112
116
  attribute :image, :image
113
117
 
@@ -118,8 +122,6 @@ module HCloud
118
122
 
119
123
  attribute :iso, :iso
120
124
 
121
- attribute :labels, default: -> { {} }
122
-
123
125
  attribute :load_balancers, :load_balancer, array: true, default: -> { [] }
124
126
 
125
127
  attribute :volumes, :volume, array: true, default: -> { [] }
@@ -11,7 +11,7 @@ module HCloud
11
11
  #
12
12
  # == Search server types
13
13
  #
14
- # HCloud::ServerType.all.where(name: "cx11")
14
+ # HCloud::ServerType.where(name: "cx11")
15
15
  # # => #<HCloud::ServerType id: 1, ...>
16
16
  #
17
17
  # == Find server type by ID
@@ -26,6 +26,7 @@ module HCloud
26
26
  attribute :name
27
27
  attribute :description
28
28
 
29
+ attribute :architecture
29
30
  attribute :cores, :integer
30
31
  attribute :disk, :integer
31
32
  attribute :memory, :integer
@@ -11,18 +11,21 @@ module HCloud
11
11
  #
12
12
  # == Sort SSH keys
13
13
  #
14
- # HCloud::SSHKey.all.sort(name: :desc)
14
+ # HCloud::SSHKey.sort(name: :desc)
15
15
  # # => [#<HCloud::SSHKey id: 1, ...>, ...]
16
16
  #
17
- # HCloud::SSHKey.all.sort(:id, name: :asc)
17
+ # HCloud::SSHKey.sort(:id, name: :asc)
18
18
  # # => [#<HCloud::SSHKey id: 1, ...>, ...]
19
19
  #
20
20
  # == Search SSH keys
21
21
  #
22
- # HCloud::SSHKey.all.where(name: "cx11")
22
+ # HCloud::SSHKey.where(name: "cx11")
23
23
  # # => #<HCloud::SSHKey id: 1, ...>
24
24
  #
25
- # HCloud::SSHKey.all.where(fingerprint: "B6:6C:CD:DA:A2:24:43:39:98:80:0F:F5:51:17:7E")
25
+ # HCloud::SSHKey.where(fingerprint: "B6:6C:CD:DA:A2:24:43:39:98:80:0F:F5:51:17:7E")
26
+ # # => #<HCloud::SSHKey id: 1, ...>
27
+ #
28
+ # HCloud::SSHKey.where(label_selector: { environment: "production" })
26
29
  # # => #<HCloud::SSHKey id: 1, ...>
27
30
  #
28
31
  # == Find SSH key by ID
@@ -58,14 +61,13 @@ module HCloud
58
61
  creatable
59
62
  updatable
60
63
  deletable
64
+ labelable
61
65
 
62
66
  attribute :id, :integer
63
67
  attribute :name
64
68
  attribute :public_key
65
69
  attribute :fingerprint
66
70
 
67
- attribute :labels, default: -> { {} }
68
-
69
71
  def creatable_attributes
70
72
  [:name, :public_key, :labels]
71
73
  end
@@ -11,18 +11,21 @@ module HCloud
11
11
  #
12
12
  # == Sort volumes
13
13
  #
14
- # HCloud::Volume.all.sort(name: :desc)
14
+ # HCloud::Volume.sort(name: :desc)
15
15
  # # => [#<HCloud::Volume id: 1, ...>, ...]
16
16
  #
17
- # HCloud::Volume.all.sort(:id, name: :asc)
17
+ # HCloud::Volume.sort(:id, name: :asc)
18
18
  # # => [#<HCloud::Volume id: 1, ...>, ...]
19
19
  #
20
20
  # == Search volumes
21
21
  #
22
- # HCloud::Volume.all.where(name: "my_volume")
22
+ # HCloud::Volume.where(name: "my_volume")
23
23
  # # => #<HCloud::Volume id: 1, ...>
24
24
  #
25
- # HCloud::Volume.all.where(status: "available")
25
+ # HCloud::Volume.where(status: "available")
26
+ # # => #<HCloud::Volume id: 1, ...>
27
+ #
28
+ # HCloud::Volume.where(label_selector: { environment: "production" })
26
29
  # # => #<HCloud::Volume id: 1, ...>
27
30
  #
28
31
  # == Find volume by ID
@@ -107,6 +110,7 @@ module HCloud
107
110
  creatable
108
111
  updatable
109
112
  deletable
113
+ labelable
110
114
 
111
115
  attribute :id, :integer
112
116
  attribute :name
@@ -124,8 +128,6 @@ module HCloud
124
128
 
125
129
  attribute :server, :server
126
130
 
127
- attribute :labels, default: -> { {} }
128
-
129
131
  alias automount? automount
130
132
 
131
133
  action :attach
@@ -3,8 +3,8 @@
3
3
  module HCloud
4
4
  module Version
5
5
  MAJOR = 1
6
- MINOR = 4
7
- PATCH = 0
6
+ MINOR = 5
7
+ PATCH = 1
8
8
  PRE = nil
9
9
 
10
10
  VERSION = [MAJOR, MINOR, PATCH].compact.join(".")
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "yaml"
4
+
5
+ module HTTP
6
+ module MimeType
7
+ class YAML < Adapter
8
+ def encode(obj)
9
+ return obj.to_yaml if obj.respond_to?(:to_yaml)
10
+
11
+ ::YAML.dump(obj)
12
+ end
13
+
14
+ # Decodes JSON
15
+ def decode(str)
16
+ ::YAML.safe_load(str)
17
+ end
18
+ end
19
+ end
20
+ end
21
+
22
+ HTTP::MimeType.register_adapter "application/x-yaml", HTTP::MimeType::YAML
23
+ HTTP::MimeType.register_alias "application/x-yaml", :yaml
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module HTTP
4
+ class RateLimiter < Feature
5
+ attr_reader :limit, :remaining, :reset, :at, :rate
6
+
7
+ def initialize(...)
8
+ super
9
+
10
+ @limit = Float::INFINITY
11
+ @remaining = Float::INFINITY
12
+ @reset = Time.at(0)
13
+ @at = Time.at(0)
14
+ @rate = 1
15
+ end
16
+
17
+ def wrap_request(request)
18
+ sleep rate while remaining.zero? && (at + rate).future?
19
+
20
+ request
21
+ end
22
+
23
+ def wrap_response(response)
24
+ # Extract rate limits
25
+ @limit = response["RateLimit-Limit"].to_i
26
+ @remaining = response["RateLimit-Remaining"].to_i
27
+ @reset = Time.at(response["RateLimit-Reset"].to_i)
28
+
29
+ # Extract request date
30
+ @at = Time.parse(response.headers["Date"])
31
+
32
+ # Calculate remaining increment rate
33
+ @rate = 3600 / limit
34
+
35
+ response
36
+ end
37
+ end
38
+ end
39
+
40
+ HTTP::Options.register_feature(:rate_limiter, HTTP::RateLimiter)
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.0
4
+ version: 1.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Dejonckheere
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-22 00:00:00.000000000 Z
11
+ date: 2023-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -66,132 +66,6 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: byebug
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: dotenv
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: ffaker
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: rake
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: rspec
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: rubocop
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: '0'
153
- - !ruby/object:Gem::Dependency
154
- name: rubocop-performance
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - ">="
158
- - !ruby/object:Gem::Version
159
- version: '0'
160
- type: :development
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - ">="
165
- - !ruby/object:Gem::Version
166
- version: '0'
167
- - !ruby/object:Gem::Dependency
168
- name: rubocop-rspec
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - ">="
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - ">="
179
- - !ruby/object:Gem::Version
180
- version: '0'
181
- - !ruby/object:Gem::Dependency
182
- name: webmock
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - ">="
186
- - !ruby/object:Gem::Version
187
- version: '0'
188
- type: :development
189
- prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - ">="
193
- - !ruby/object:Gem::Version
194
- version: '0'
195
69
  description: Native Ruby integration with the Hetzner Cloud API
196
70
  email:
197
71
  - florian@floriandejonckheere.be
@@ -213,6 +87,7 @@ files:
213
87
  - lib/hcloud/concerns/concerns.rb
214
88
  - lib/hcloud/concerns/creatable.rb
215
89
  - lib/hcloud/concerns/deletable.rb
90
+ - lib/hcloud/concerns/labelable.rb
216
91
  - lib/hcloud/concerns/meterable.rb
217
92
  - lib/hcloud/concerns/queryable.rb
218
93
  - lib/hcloud/concerns/singleton.rb
@@ -240,12 +115,15 @@ files:
240
115
  - lib/hcloud/entities/load_balancer_type_price.rb
241
116
  - lib/hcloud/entities/metrics.rb
242
117
  - lib/hcloud/entities/price.rb
118
+ - lib/hcloud/entities/primary_ip_prices.rb
243
119
  - lib/hcloud/entities/private_net.rb
120
+ - lib/hcloud/entities/private_network.rb
244
121
  - lib/hcloud/entities/protection.rb
245
122
  - lib/hcloud/entities/public_net.rb
246
123
  - lib/hcloud/entities/route.rb
247
124
  - lib/hcloud/entities/rule.rb
248
125
  - lib/hcloud/entities/server_backup_price.rb
126
+ - lib/hcloud/entities/server_protection.rb
249
127
  - lib/hcloud/entities/server_type_price.rb
250
128
  - lib/hcloud/entities/service.rb
251
129
  - lib/hcloud/entities/service_http.rb
@@ -272,6 +150,7 @@ files:
272
150
  - lib/hcloud/resources/load_balancer.rb
273
151
  - lib/hcloud/resources/load_balancer_type.rb
274
152
  - lib/hcloud/resources/location.rb
153
+ - lib/hcloud/resources/metadata.rb
275
154
  - lib/hcloud/resources/network.rb
276
155
  - lib/hcloud/resources/placement_group.rb
277
156
  - lib/hcloud/resources/pricing.rb
@@ -281,6 +160,8 @@ files:
281
160
  - lib/hcloud/resources/ssh_key.rb
282
161
  - lib/hcloud/resources/volume.rb
283
162
  - lib/hcloud/version.rb
163
+ - lib/http/mime_type/yaml.rb
164
+ - lib/http/rate_limiter.rb
284
165
  homepage: https://github.com/floriandejonckheere/hcloud
285
166
  licenses:
286
167
  - MIT