hetznercloud 6.0.0 → 6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2cb259d9e173161e4ed87cdfbde11c7318e54b13c09a50ab9906ea453278534b
4
- data.tar.gz: 70a47ad251eb36381d894140210d2cdabd4bba98e45a6530303e46604f030bb7
3
+ metadata.gz: c97f9307e8cae23c94b06c853eab8432a5d571fc90b13c527a0fa8a029038143
4
+ data.tar.gz: da9e9aecda35dbdca6a6b1e1047d4ff957ca63a649f1a3a52b25d31c42302f48
5
5
  SHA512:
6
- metadata.gz: 8413d51176613da3405efc6585f80c1ffd84dfecc3fd06fa95772d8b897efda9945519c3504951e63b0b22411bc66b91b50c08911e448c94ebb51be47c95ba64
7
- data.tar.gz: e12dd9605bea860120a75ceb2ea1f0fad5c9539e9bb58f4d6567e4b89d3a336b6563a20edf210549509850c49df9e1f08ff0bfc453bf91b4982c9be9625ff822
6
+ metadata.gz: feb065fa72661720caeefff45ea650374bdb71919a7e901102cfcfe79f386b80b9fde9e1700112052041ec5f4e7cc7e25eec3c6ced0e5dd15f2bbf5eb4872e37
7
+ data.tar.gz: 61fe9582cdc7681c567c9da110c1028a0c713f3cd3fc1f8a59ff00a0495a1e82e82070e74e3514f738eacc7949513dd68e2c35d761883cbb464015dc63b9d3ba
data/CHANGELOG.md CHANGED
@@ -10,6 +10,17 @@
10
10
 
11
11
  ### Fixed
12
12
 
13
+ ## HCloud v6.1.0 (2026-07-10)
14
+
15
+ ### Added
16
+
17
+ - Add `enable_ipv4` and `enable_ipv6` attributes to `HCloud::PublicNet`
18
+ - Add `public_net` to `HCloud::Server` creatable attributes
19
+
20
+ ### Fixed
21
+
22
+ - Fix a bug where name-only SSH keys serialize incorrectly
23
+
13
24
  ## HCloud v6.0.0 (2026-06-09)
14
25
 
15
26
  ### Added
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  ![Continuous Integration](https://github.com/floriandejonckheere/hcloud/actions/workflows/ci.yml/badge.svg)
4
4
  ![Release](https://img.shields.io/github/v/release/floriandejonckheere/hcloud?label=Latest%20release)
5
5
 
6
- Unofficial Ruby integration with the [Hetzner Cloud API](https://docs.hetzner.cloud/).
6
+ Unofficial Ruby integration with the [Hetzner Cloud API](https://docs.hetzner.cloud/). Refer to the [API specification](https://docs.hetzner.cloud/reference/cloud) for more details.
7
7
 
8
8
  ## Installation
9
9
 
@@ -94,8 +94,8 @@ The following table lists the Hetzner Cloud API endpoints that are currently imp
94
94
  | [Pricing](lib/hcloud/resources/pricing.rb) | Implemented |
95
95
  | [RRSets](lib/hcloud/resources/rrset.rb) | Implemented |
96
96
  | [RRSet Actions](lib/hcloud/resources/rrset.rb) | Implemented |
97
- | [Servers](lib/hcloud/resources/server.rb) | Partially implemented |
98
- | [Server Actions](lib/hcloud/resources/server.rb) | Not implemented |
97
+ | [Servers](lib/hcloud/resources/server.rb) | Implemented |
98
+ | [Server Actions](lib/hcloud/resources/server.rb) | Implemented |
99
99
  | [Server Types](lib/hcloud/resources/server_type.rb) | Implemented |
100
100
  | [SSH Keys](lib/hcloud/resources/ssh_key.rb) | Implemented |
101
101
  | [Storage Boxes](lib/hcloud/resources/storage_box.rb) | Implemented |
@@ -42,19 +42,38 @@ module HCloud
42
42
  []
43
43
  end
44
44
 
45
- # Convert creatable_attributes into a key-value list
46
- # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
47
45
  def creatable_params
48
46
  # Split simple and nested attributes
49
47
  nested_attributes, simple_attributes = creatable_attributes.partition { |a| a.respond_to? :each }
50
48
 
49
+ serialize_simple_attributes(simple_attributes)
50
+ .merge(serialize_nested_attributes(nested_attributes))
51
+ .compact_blank
52
+ end
53
+
54
+ private
55
+
56
+ def serialize_simple_attributes(simple_attributes)
51
57
  attributes
52
58
  .slice(*simple_attributes.map(&:to_s))
53
59
  .transform_values { |v| v&.send_wrap { |o| o.try(:to_h) || o } || v&.send_wrap(:to_s) }
54
- .merge(nested_attributes.reduce(&:merge).to_h { |k, v| [k.to_s, Array(v).filter_map { |w| send(k)&.send_wrap(w) }.first] })
55
- .compact_blank
56
60
  end
57
- # rubocop:enable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
61
+
62
+ def serialize_nested_attributes(nested_attributes)
63
+ return {} if nested_attributes.empty?
64
+
65
+ nested_attributes.reduce(&:merge).to_h do |k, v|
66
+ [k.to_s, serialize_nested_attribute(send(k), v)]
67
+ end
68
+ end
69
+
70
+ def serialize_nested_attribute(value, fallbacks)
71
+ if value.is_a?(Array)
72
+ value.map { |item| Array(fallbacks).filter_map { |w| item&.send_wrap(w) }.first }
73
+ else
74
+ Array(fallbacks).filter_map { |w| value&.send_wrap(w) }.first
75
+ end
76
+ end
58
77
  end
59
78
 
60
79
  class_methods do
@@ -6,5 +6,17 @@ module HCloud
6
6
  attribute :floating_ips, :floating_ip, array: true, default: -> { [] }
7
7
  attribute :ipv4, :ipv4
8
8
  attribute :ipv6, :ipv6
9
+
10
+ attribute :enable_ipv4, :boolean
11
+ attribute :enable_ipv6, :boolean
12
+
13
+ def to_h
14
+ {
15
+ enable_ipv4: enable_ipv4,
16
+ enable_ipv6: enable_ipv6,
17
+ ipv4: ipv4&.id,
18
+ ipv6: ipv6&.id,
19
+ }.compact
20
+ end
9
21
  end
10
22
  end
@@ -184,7 +184,7 @@ module HCloud
184
184
  # TODO: use only for creation
185
185
  attribute :public_interface, :boolean
186
186
 
187
- attribute :private_net, :load_balancer_private_net
187
+ attribute :private_net, :load_balancer_private_net, array: true, default: -> { [] }
188
188
  attribute :public_net, :load_balancer_public_net
189
189
 
190
190
  attribute :services, :service, array: true, default: -> { [] }
@@ -44,6 +44,9 @@ module HCloud
44
44
  # firewall = HCloud::Server.create(name: "my_server", image: "debian-11", server_type: "cx11")
45
45
  # # => #<HCloud::Server id: 1, ...>
46
46
  #
47
+ # # Create a server with a private IP only
48
+ # server = HCloud::Server.create(name: "my_server", image: "debian-11", server_type: "cx11", public_net: { enable_ipv4: false, enable_ipv6: false }, networks: [network_id])
49
+ #
47
50
  # == Update server
48
51
  #
49
52
  # server = HCloud::Server.find(1)
@@ -168,7 +171,7 @@ module HCloud
168
171
  action :request_console
169
172
 
170
173
  def creatable_attributes
171
- [:name, :automount, :start_after_create, :user_data, :labels, datacenter: [:id, :name], image: [:id, :name], location: [:id, :name], server_type: [:id, :name], ssh_keys: [:id, :name], firewalls: :id, networks: :id, volumes: :id]
174
+ [:name, :automount, :start_after_create, :user_data, :labels, :public_net, datacenter: [:id, :name], image: [:id, :name], location: [:id, :name], server_type: [:id, :name], ssh_keys: [:id, :name], firewalls: :id, networks: :id, volumes: :id]
172
175
  end
173
176
 
174
177
  def updatable_attributes
@@ -4,7 +4,7 @@ module HCloud
4
4
  # @!visibility private
5
5
  module Version
6
6
  MAJOR = 6
7
- MINOR = 0
7
+ MINOR = 1
8
8
  PATCH = 0
9
9
  PRE = nil
10
10
 
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: 6.0.0
4
+ version: 6.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: 2026-06-09 00:00:00.000000000 Z
11
+ date: 2026-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel