<feed xmlns='http://www.w3.org/2005/Atom'>
<title>guix/tests/machine/hetzner/http.scm, branch master</title>
<subtitle>Transactional package manager, declarative GNU/Linux distribution, reproducible deployment tool, and more! https://guix.gnu.org</subtitle>
<link rel='alternate' type='text/html' href='https://git.vineetk.net/guix/'/>
<entry>
<title>tests: Use ‘match’ when mocking a Hetzner HTTP server.</title>
<updated>2026-06-18T14:46:52+00:00</updated>
<author>
<name>Ludovic Courtès</name>
<email>ludo@gnu.org</email>
</author>
<published>2026-06-04T22:17:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vineetk.net/guix/commit/?id=4a58858d65089395f0e983f2711d0e67323caab6'/>
<id>4a58858d65089395f0e983f2711d0e67323caab6</id>
<content type='text'>
Using ‘match’ to check requests is more conventional and more concise.  It
also avoids relying on Guile-Lib, which is an optional dependency, for its
‘assert’ macro.

* tests/machine/hetzner/http.scm ("hetzner-api-actions-unit")
("hetzner-api-locations-unit")
("hetzner-api-server-types-unit")
("hetzner-api-server-delete-unit")
("hetzner-api-server-enable-rescue-system-unit")
("hetzner-api-server-power-on-unit")
("hetzner-api-server-power-off-unit")
("hetzner-api-server-reboot-unit")
("hetzner-api-ssh-key-create-unit")
("hetzner-api-ssh-key-delete-unit")
("hetzner-api-ssh-keys-unit")
("hetzner-api-primary-ips-unit"): Use ‘match’ instead of ‘cond’ and ‘assert’.

Change-Id: Idf8cb1c11b332ffe780ed83c624dc50484b0db52
Signed-off-by: Ludovic Courtès &lt;ludo@gnu.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Using ‘match’ to check requests is more conventional and more concise.  It
also avoids relying on Guile-Lib, which is an optional dependency, for its
‘assert’ macro.

* tests/machine/hetzner/http.scm ("hetzner-api-actions-unit")
("hetzner-api-locations-unit")
("hetzner-api-server-types-unit")
("hetzner-api-server-delete-unit")
("hetzner-api-server-enable-rescue-system-unit")
("hetzner-api-server-power-on-unit")
("hetzner-api-server-power-off-unit")
("hetzner-api-server-reboot-unit")
("hetzner-api-ssh-key-create-unit")
("hetzner-api-ssh-key-delete-unit")
("hetzner-api-ssh-keys-unit")
("hetzner-api-primary-ips-unit"): Use ‘match’ instead of ‘cond’ and ‘assert’.

Change-Id: Idf8cb1c11b332ffe780ed83c624dc50484b0db52
Signed-off-by: Ludovic Courtès &lt;ludo@gnu.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>tests: Adjust Hetzner test for the new use of ‘hetzner-api-images’.</title>
<updated>2026-06-18T14:46:52+00:00</updated>
<author>
<name>Ludovic Courtès</name>
<email>ludo@gnu.org</email>
</author>
<published>2026-06-04T21:00:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vineetk.net/guix/commit/?id=2a566b05c45d42a248ceb2984c5cf66857dbddc0'/>
<id>2a566b05c45d42a248ceb2984c5cf66857dbddc0</id>
<content type='text'>
Fixes a regression introduced in f98c00ab749e6b82e56a4a34d0789496451cbc59.

* tests/machine/hetzner/http.scm ("hetzner-api-server-create-unit"): Rewrite
using ‘match’ and add clause for /v1/images.

Change-Id: Ib87ebb48c6765b5228a24092a974bd76605a7288
Signed-off-by: Ludovic Courtès &lt;ludo@gnu.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fixes a regression introduced in f98c00ab749e6b82e56a4a34d0789496451cbc59.

* tests/machine/hetzner/http.scm ("hetzner-api-server-create-unit"): Rewrite
using ‘match’ and add clause for /v1/images.

Change-Id: Ib87ebb48c6765b5228a24092a974bd76605a7288
Signed-off-by: Ludovic Courtès &lt;ludo@gnu.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>machine: hetzner: Fix initial deploy when ssh-key is #f.</title>
<updated>2026-05-23T04:21:16+00:00</updated>
<author>
<name>Maxim Cournoyer</name>
<email>maxim@guixotic.coop</email>
</author>
<published>2026-04-30T06:28:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vineetk.net/guix/commit/?id=3777bf133e00d9ef685e463e51a1fb0350ffb056'/>
<id>3777bf133e00d9ef685e463e51a1fb0350ffb056</id>
<content type='text'>
This fixes a regression introduced in commit a2ef2bcbfd7 ("machine: hetzner:
Allow connections using ssh-agent"), where having no ssh-key would cause the
early Hetzner provisioning to fail due to the lack of SSH authentication.

* gnu/machine/hetzner.scm (%hetzner-ssh-key-file): New parameter.
(&lt;hetzner-configuration&gt;) [ssh-public-key]: Compute default according to the
value of the private ssh-key field.  Introduce an indirection via...
(hetzner-configuration-ssh-public-key): ... this new procedure, to honor
%hetzner-ssh-key-file.
(hetzner-configuration-ssh-key): Likewise for the private ssh-key.
(hetzner-configuration-ssh-key-fingerprint): Rename to...
(public-key-&gt;fingerprint): ... this, taking just the public key as argument.
Update doc.
(hetzner-configuration-ssh-key-public): Rename to...
(public-key-&gt;string-with-type): ...this, for clarity, and accept just a
public-key object.  Update doc.
(hetzner-machine-ssh-key): Exit early with #f when no ssh key is provided.
(temporary-ssh-key-file): New procedure.
(hetzner-machine-ssh-key-create): Assert a public key is defined.  Adjust
calls to renamed procedures, and adjust for the `hetzner-api-server-create'
API change.
(hetzner-machine-enable-rescue-system): Refine doc and fix code path when
ssh-key is #f.
(hetzner-machine-rescue-install-os): Document.
(hetzner-machine-provision): Refine doc. Remove extraneous sleep and #:unwind
argument. Limit ssh-session dynamic scope to where it's needed.
(cleanup-temporary-ssh-key/maybe): New procedure.
(deploy-hetzner): Create and use a temporary SSH key when none is defined, and
clean it up when done or on errors.
* gnu/machine/hetzner/http.scm (hetzner-api-server-create): Make ssh-keys a
keyword argument, and fix execution when it's #f.
(hetzner-api-server-enable-rescue-system): Likewise.
* tests/machine/hetzner.scm ("deploy-machine-mock-with-unprovisioned-server"):
Adjust test.
* tests/machine/hetzner/http.scm (create-server)
("hetzner-api-server-create-unit")
("hetzner-api-server-enable-rescue-system-unit")
("hetzner-api-actions-integration")
("hetzner-api-server-enable-rescue-system-integration"): Likewise.
* doc/guix.texi (Invoking guix deploy): Precise what happens when 'ssh-key' is
 #f in hetzner-configuration, and suggest declaratively authorizing your SSH
key.

Change-Id: I812b348fb553f3b5aebd0bf66850c6ecb9e06653
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This fixes a regression introduced in commit a2ef2bcbfd7 ("machine: hetzner:
Allow connections using ssh-agent"), where having no ssh-key would cause the
early Hetzner provisioning to fail due to the lack of SSH authentication.

* gnu/machine/hetzner.scm (%hetzner-ssh-key-file): New parameter.
(&lt;hetzner-configuration&gt;) [ssh-public-key]: Compute default according to the
value of the private ssh-key field.  Introduce an indirection via...
(hetzner-configuration-ssh-public-key): ... this new procedure, to honor
%hetzner-ssh-key-file.
(hetzner-configuration-ssh-key): Likewise for the private ssh-key.
(hetzner-configuration-ssh-key-fingerprint): Rename to...
(public-key-&gt;fingerprint): ... this, taking just the public key as argument.
Update doc.
(hetzner-configuration-ssh-key-public): Rename to...
(public-key-&gt;string-with-type): ...this, for clarity, and accept just a
public-key object.  Update doc.
(hetzner-machine-ssh-key): Exit early with #f when no ssh key is provided.
(temporary-ssh-key-file): New procedure.
(hetzner-machine-ssh-key-create): Assert a public key is defined.  Adjust
calls to renamed procedures, and adjust for the `hetzner-api-server-create'
API change.
(hetzner-machine-enable-rescue-system): Refine doc and fix code path when
ssh-key is #f.
(hetzner-machine-rescue-install-os): Document.
(hetzner-machine-provision): Refine doc. Remove extraneous sleep and #:unwind
argument. Limit ssh-session dynamic scope to where it's needed.
(cleanup-temporary-ssh-key/maybe): New procedure.
(deploy-hetzner): Create and use a temporary SSH key when none is defined, and
clean it up when done or on errors.
* gnu/machine/hetzner/http.scm (hetzner-api-server-create): Make ssh-keys a
keyword argument, and fix execution when it's #f.
(hetzner-api-server-enable-rescue-system): Likewise.
* tests/machine/hetzner.scm ("deploy-machine-mock-with-unprovisioned-server"):
Adjust test.
* tests/machine/hetzner/http.scm (create-server)
("hetzner-api-server-create-unit")
("hetzner-api-server-enable-rescue-system-unit")
("hetzner-api-actions-integration")
("hetzner-api-server-enable-rescue-system-integration"): Likewise.
* doc/guix.texi (Invoking guix deploy): Precise what happens when 'ssh-key' is
 #f in hetzner-configuration, and suggest declaratively authorizing your SSH
key.

Change-Id: I812b348fb553f3b5aebd0bf66850c6ecb9e06653
</pre>
</div>
</content>
</entry>
<entry>
<title>machine: hetzner: Allow attaching existing public IPs.</title>
<updated>2025-04-21T21:55:50+00:00</updated>
<author>
<name>Sergey Trofimov</name>
<email>sarg@sarg.org.ru</email>
</author>
<published>2025-04-18T15:08:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vineetk.net/guix/commit/?id=7a4193ec4a09fecc68dc726c1e0bbb5ad03d404a'/>
<id>7a4193ec4a09fecc68dc726c1e0bbb5ad03d404a</id>
<content type='text'>
* gnu/machine/hetzner.scm (hetzner-configuration): Add ipv4 and ipv6
fields. Export accessors.
* gnu/machine/hetzner/http.scm (hetnzer-api-primary-ips): New function.
(&lt;hetzner-primary-ip&gt;): New json mapping.
(hetzner-api-server-create): Pass IP addresses in request.
* doc/guix.texi (Invoking guix deploy): Document it.

Change-Id: I44509cc98e041762dc483e876566e79bde85b26a
Signed-off-by: Ludovic Courtès &lt;ludo@gnu.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* gnu/machine/hetzner.scm (hetzner-configuration): Add ipv4 and ipv6
fields. Export accessors.
* gnu/machine/hetzner/http.scm (hetnzer-api-primary-ips): New function.
(&lt;hetzner-primary-ip&gt;): New json mapping.
(hetzner-api-server-create): Pass IP addresses in request.
* doc/guix.texi (Invoking guix deploy): Document it.

Change-Id: I44509cc98e041762dc483e876566e79bde85b26a
Signed-off-by: Ludovic Courtès &lt;ludo@gnu.org&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>machine: Implement 'hetzner-environment-type'.</title>
<updated>2025-02-09T17:20:42+00:00</updated>
<author>
<name>Roman Scherer</name>
<email>roman@burningswell.com</email>
</author>
<published>2025-02-04T19:01:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.vineetk.net/guix/commit/?id=0753a17ddf6f4fab98b93c25f1a93b97ff9e46bb'/>
<id>0753a17ddf6f4fab98b93c25f1a93b97ff9e46bb</id>
<content type='text'>
* Makefile.am (SCM_TESTS): Add test modules.
* doc/guix.texi: Add documentation.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add modules.
* gnu/machine/hetzner.scm: Add hetzner-environment-type.
* gnu/machine/hetzner/http.scm: Add HTTP API.
* po/guix/POTFILES.in: Add Hetzner modules.
* tests/machine/hetzner.scm: Add machine tests.
* tests/machine/hetzner/http.scm Add HTTP API tests.

Change-Id: I276ed5afed676bbccc6c852c56ee4db57ce3c1ea
Signed-off-by: Ludovic Courtès &lt;ludo@gnu.org&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Makefile.am (SCM_TESTS): Add test modules.
* doc/guix.texi: Add documentation.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add modules.
* gnu/machine/hetzner.scm: Add hetzner-environment-type.
* gnu/machine/hetzner/http.scm: Add HTTP API.
* po/guix/POTFILES.in: Add Hetzner modules.
* tests/machine/hetzner.scm: Add machine tests.
* tests/machine/hetzner/http.scm Add HTTP API tests.

Change-Id: I276ed5afed676bbccc6c852c56ee4db57ce3c1ea
Signed-off-by: Ludovic Courtès &lt;ludo@gnu.org&gt;
</pre>
</div>
</content>
</entry>
</feed>
