public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [PATCH v2 proxmox-acme 0/3] update acme.sh DNS API to upstream 3.1.2 tag
@ 2026-03-31  7:10 Kefu Chai
  2026-03-31  7:10 ` [PATCH v2 proxmox-acme 1/3] " Kefu Chai
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Kefu Chai @ 2026-03-31  7:10 UTC (permalink / raw)
  To: pve-devel

Changes since v1:
- Fix missing Makefile ACME_SOURCES entries for the new plugins; without
  this they were registered in the schema but not installed by the package
- Add test/verify-acme-sources-in-makefile.pl to catch this class of
  error: cross-checks dnsapi/ scripts in the submodule against the
  Makefile install list, with ACME_SOURCES passed via Make so no
  Makefile parsing is needed in Perl
- Hook the tests into dpkg-buildpackage via override_dh_auto_test so
  they run automatically on every package build

Kefu Chai (3):
  update acme.sh DNS API to upstream 3.1.2 tag
  tests: verify all dnsapi plugins are listed in Makefile ACME_SOURCES
  buildsys: run tests as part of dpkg-buildpackage

 debian/rules                                |  3 +
 src/Makefile                                |  5 +-
 src/acme.sh                                 |  2 +-
 src/dns-challenge-schema.json               | 66 ++++++++++++++++++++-
 src/test/Makefile                           |  5 +-
 src/test/verify-acme-sources-in-makefile.pl | 66 +++++++++++++++++++++
 6 files changed, 141 insertions(+), 6 deletions(-)
 create mode 100755 src/test/verify-acme-sources-in-makefile.pl

-- 
2.47.3





^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v2 proxmox-acme 1/3] update acme.sh DNS API to upstream 3.1.2 tag
  2026-03-31  7:10 [PATCH v2 proxmox-acme 0/3] update acme.sh DNS API to upstream 3.1.2 tag Kefu Chai
@ 2026-03-31  7:10 ` Kefu Chai
  2026-03-31  7:10 ` [PATCH v2 proxmox-acme 2/3] tests: verify all dnsapi plugins are listed in Makefile ACME_SOURCES Kefu Chai
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Kefu Chai @ 2026-03-31  7:10 UTC (permalink / raw)
  To: pve-devel

And update schema with new plugins and API changes.

This includes various fixes and improvements for existing plugins.

Fixes the following bugs:
- fix #7120: OVH DNS plugin now properly deletes TXT records
- fix #7028: Add Hetzner Cloud DNS plugin support

New plugins added:
- hetznercloud: Hetzner Cloud DNS API
- openprovider_rest: OpenProvider REST API
- spaceship: Spaceship DNS API

The active24 provider was updated to use the new v2 API, as the old
v1 API has been deprecated by Active24. Users need to re-configure
with Active24_ApiKey and Active24_ApiSecret instead of ACTIVE24_Token.
New credentials can be obtained from the Active24 admin panel.

Signed-off-by: Kefu Chai <k.chai@proxmox.com>
---
 src/Makefile                  |  3 ++
 src/acme.sh                   |  2 +-
 src/dns-challenge-schema.json | 66 +++++++++++++++++++++++++++++++++--
 3 files changed, 68 insertions(+), 3 deletions(-)

diff --git a/src/Makefile b/src/Makefile
index 9ee97c9..c948207 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -66,6 +66,7 @@ ACME_SOURCES = \
 	dnsapi/dns_he.sh \
 	dnsapi/dns_he_ddns.sh \
 	dnsapi/dns_hetzner.sh \
+	dnsapi/dns_hetznercloud.sh \
 	dnsapi/dns_hexonet.sh \
 	dnsapi/dns_hostingde.sh \
 	dnsapi/dns_huaweicloud.sh \
@@ -120,6 +121,7 @@ ACME_SOURCES = \
 	dnsapi/dns_one.sh \
 	dnsapi/dns_online.sh \
 	dnsapi/dns_openprovider.sh \
+	dnsapi/dns_openprovider_rest.sh \
 	dnsapi/dns_openstack.sh \
 	dnsapi/dns_opnsense.sh \
 	dnsapi/dns_ovh.sh \
@@ -138,6 +140,7 @@ ACME_SOURCES = \
 	dnsapi/dns_selfhost.sh \
 	dnsapi/dns_servercow.sh \
 	dnsapi/dns_simply.sh \
+	dnsapi/dns_spaceship.sh \
 	dnsapi/dns_technitium.sh \
 	dnsapi/dns_tele3.sh \
 	dnsapi/dns_tencent.sh \
diff --git a/src/acme.sh b/src/acme.sh
index 676d766..40290ad 160000
--- a/src/acme.sh
+++ b/src/acme.sh
@@ -1 +1 @@
-Subproject commit 676d76696b616c0e013ad8a9be1aedd01e4e0204
+Subproject commit 40290ad42a37aba57eb246e507c11944a52c0f68
diff --git a/src/dns-challenge-schema.json b/src/dns-challenge-schema.json
index 8669c86..b7ee5a3 100644
--- a/src/dns-challenge-schema.json
+++ b/src/dns-challenge-schema.json
@@ -24,8 +24,12 @@
    "acmeproxy": {},
    "active24": {
       "fields": {
-         "ACTIVE24_Token": {
-            "description": "The API key",
+         "Active24_ApiKey": {
+            "description": "API Key (called 'Identifier' in Active24 Admin)",
+            "type": "string"
+         },
+         "Active24_ApiSecret": {
+            "description": "API Secret (called 'Secret key' in Active24 Admin)",
             "type": "string"
          }
       },
@@ -187,6 +191,33 @@
    "he": {},
    "he_ddns": {},
    "hetzner": {},
+   "hetznercloud": {
+      "fields": {
+         "HETZNER_API": {
+            "default": "https://api.hetzner.cloud/v1",
+            "description": "Override API endpoint (default: https://api.hetzner.cloud/v1)",
+            "optional": 1,
+            "type": "string"
+         },
+         "HETZNER_MAX_ATTEMPTS": {
+            "default": 120,
+            "description": "Number of 1s polls to wait for async actions (default: 120)",
+            "optional": 1,
+            "type": "integer"
+         },
+         "HETZNER_TOKEN": {
+            "description": "API token for the Hetzner Cloud DNS API",
+            "type": "string"
+         },
+         "HETZNER_TTL": {
+            "default": 120,
+            "description": "Custom TTL for new TXT records (default: 120)",
+            "optional": 1,
+            "type": "integer"
+         }
+      },
+      "name": "Hetzner Cloud DNS"
+   },
    "hexonet": {},
    "hostingde": {},
    "huaweicloud": {},
@@ -298,6 +329,19 @@
    "one": {},
    "online": {},
    "openprovider": {},
+   "openprovider_rest": {
+      "fields": {
+         "OPENPROVIDER_REST_PASSWORD": {
+            "description": "OpenProvider Account Password",
+            "type": "string"
+         },
+         "OPENPROVIDER_REST_USERNAME": {
+            "description": "OpenProvider Account Username",
+            "type": "string"
+         }
+      },
+      "name": "OpenProvider (REST API)"
+   },
    "openstack": {},
    "opnsense": {},
    "ovh": {
@@ -368,6 +412,24 @@
    "selfhost": {},
    "servercow": {},
    "simply": {},
+   "spaceship": {
+      "fields": {
+         "SPACESHIP_API_KEY": {
+            "description": "Spaceship API Key",
+            "type": "string"
+         },
+         "SPACESHIP_API_SECRET": {
+            "description": "Spaceship API Secret",
+            "type": "string"
+         },
+         "SPACESHIP_ROOT_DOMAIN": {
+            "description": "Root domain (optional, for manual override if auto-detection fails)",
+            "optional": 1,
+            "type": "string"
+         }
+      },
+      "name": "Spaceship"
+   },
    "technitium": {},
    "tele3": {},
    "tencent": {},
-- 
2.47.3





^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v2 proxmox-acme 2/3] tests: verify all dnsapi plugins are listed in Makefile ACME_SOURCES
  2026-03-31  7:10 [PATCH v2 proxmox-acme 0/3] update acme.sh DNS API to upstream 3.1.2 tag Kefu Chai
  2026-03-31  7:10 ` [PATCH v2 proxmox-acme 1/3] " Kefu Chai
@ 2026-03-31  7:10 ` Kefu Chai
  2026-03-31  7:10 ` [PATCH v2 proxmox-acme 3/3] buildsys: run tests as part of dpkg-buildpackage Kefu Chai
  2026-03-31 16:48 ` applied: [PATCH v2 proxmox-acme 0/3] update acme.sh DNS API to upstream 3.1.2 tag Thomas Lamprecht
  3 siblings, 0 replies; 7+ messages in thread
From: Kefu Chai @ 2026-03-31  7:10 UTC (permalink / raw)
  To: pve-devel

Add verify-acme-sources-in-makefile.pl which cross-checks the dnsapi/
scripts present in the acme.sh submodule against the ACME_SOURCES list
in the Makefile. Plugins missing from ACME_SOURCES won't be installed,
so this catches the class of error where a plugin is added to the schema
but forgotten in the install list.

ACME_SOURCES is passed via environment from the parent Makefile so Make
expands the variable itself, avoiding fragile Makefile parsing in Perl.

Signed-off-by: Kefu Chai <k.chai@proxmox.com>
---
 src/Makefile                                |  2 +-
 src/test/Makefile                           |  5 +-
 src/test/verify-acme-sources-in-makefile.pl | 66 +++++++++++++++++++++
 3 files changed, 70 insertions(+), 3 deletions(-)
 create mode 100755 src/test/verify-acme-sources-in-makefile.pl

diff --git a/src/Makefile b/src/Makefile
index c948207..461597b 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -190,7 +190,7 @@ install:
 
 .PHONY: test
 test:
-	$(MAKE) -C test test
+	$(MAKE) -C test test ACME_SOURCES="$(ACME_SOURCES)"
 
 .PHONY: clean
 clean:
diff --git a/src/test/Makefile b/src/test/Makefile
index 5768124..ad5256a 100644
--- a/src/test/Makefile
+++ b/src/test/Makefile
@@ -1,9 +1,10 @@
+ACME_SOURCES ?=
 
 .PHONY: test test-missing-functions
-test: verify-dnsapi-plugins-in-schema.pl.t test-missing-functions
+test: verify-dnsapi-plugins-in-schema.pl.t verify-acme-sources-in-makefile.pl.t test-missing-functions
 
 %.t: %
-	./$<
+	ACME_SOURCES="$(ACME_SOURCES)" ./$<
 
 test-missing-functions:
 	./check-missing-functions | sort -u > missing-functions.actual
diff --git a/src/test/verify-acme-sources-in-makefile.pl b/src/test/verify-acme-sources-in-makefile.pl
new file mode 100755
index 0000000..7deb026
--- /dev/null
+++ b/src/test/verify-acme-sources-in-makefile.pl
@@ -0,0 +1,66 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+
+use lib '../';
+
+use PVE::Tools qw(dir_glob_foreach);
+
+my $dnsapi_path = '../acme.sh/dnsapi';
+
+die "cannot find dnsapi path '$dnsapi_path'!\n" if !-d $dnsapi_path;
+
+my $acme_sources = $ENV{ACME_SOURCES}
+    or die "ACME_SOURCES environment variable not set\n";
+
+my $makefile_plugins = {};
+while ($acme_sources =~ /dnsapi\/dns_(\S+)\.sh/g) {
+    $makefile_plugins->{$1} = 1;
+}
+
+my $acmesh_plugins = [];
+dir_glob_foreach(
+    $dnsapi_path,
+    qr/dns_(\S+)\.sh/,
+    sub {
+        my ($file, $provider) = @_;
+        push @$acmesh_plugins, $provider;
+    },
+);
+
+my $ok = 1;
+
+# check that all plugins in the submodule are listed in the Makefile for installation
+my $missing_from_makefile = '';
+for my $provider (sort @$acmesh_plugins) {
+    if (!$makefile_plugins->{$provider}) {
+        $missing_from_makefile .= "\tdnsapi/dns_${provider}.sh \\\n";
+        $ok = 0;
+    }
+}
+
+if ($missing_from_makefile) {
+    print STDERR "\nplugins missing from Makefile ACME_SOURCES, add:\n";
+    print STDERR $missing_from_makefile;
+}
+
+# check that all plugins in the Makefile still exist in the submodule
+my %acmesh_set = map { $_ => 1 } @$acmesh_plugins;
+my $stale_in_makefile = '';
+for my $provider (sort keys %$makefile_plugins) {
+    if (!$acmesh_set{$provider}) {
+        $stale_in_makefile .= "\tdnsapi/dns_${provider}.sh\n";
+        $ok = 0;
+    }
+}
+
+if ($stale_in_makefile) {
+    print STDERR "\nplugins in Makefile but removed/renamed upstream, remove:\n";
+    print STDERR $stale_in_makefile;
+}
+
+die "\nERROR: Makefile ACME_SOURCES not in sync with available plugins!\n\n" if !$ok;
+
+print STDERR "OK: Makefile ACME_SOURCES in sync with available plugins.\n";
+exit(0);
-- 
2.47.3





^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v2 proxmox-acme 3/3] buildsys: run tests as part of dpkg-buildpackage
  2026-03-31  7:10 [PATCH v2 proxmox-acme 0/3] update acme.sh DNS API to upstream 3.1.2 tag Kefu Chai
  2026-03-31  7:10 ` [PATCH v2 proxmox-acme 1/3] " Kefu Chai
  2026-03-31  7:10 ` [PATCH v2 proxmox-acme 2/3] tests: verify all dnsapi plugins are listed in Makefile ACME_SOURCES Kefu Chai
@ 2026-03-31  7:10 ` Kefu Chai
  2026-03-31 16:16   ` Thomas Lamprecht
  2026-03-31 16:48 ` applied: [PATCH v2 proxmox-acme 0/3] update acme.sh DNS API to upstream 3.1.2 tag Thomas Lamprecht
  3 siblings, 1 reply; 7+ messages in thread
From: Kefu Chai @ 2026-03-31  7:10 UTC (permalink / raw)
  To: pve-devel

Add override_dh_auto_test to debian/rules so that make test is
automatically executed during every package build, ensuring the
schema and Makefile consistency checks are enforced at build time.

Signed-off-by: Kefu Chai <k.chai@proxmox.com>
---
 debian/rules | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/debian/rules b/debian/rules
index f00dbc2..2118ffa 100755
--- a/debian/rules
+++ b/debian/rules
@@ -5,3 +5,6 @@
 
 %:
 	dh $@
+
+override_dh_auto_test:
+	$(MAKE) -C . -f Makefile test
-- 
2.47.3





^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2 proxmox-acme 3/3] buildsys: run tests as part of dpkg-buildpackage
  2026-03-31  7:10 ` [PATCH v2 proxmox-acme 3/3] buildsys: run tests as part of dpkg-buildpackage Kefu Chai
@ 2026-03-31 16:16   ` Thomas Lamprecht
  2026-04-01  4:31     ` Kefu Chai
  0 siblings, 1 reply; 7+ messages in thread
From: Thomas Lamprecht @ 2026-03-31 16:16 UTC (permalink / raw)
  To: Kefu Chai, pve-devel

Am 31.03.26 um 09:10 schrieb Kefu Chai:
> Add override_dh_auto_test to debian/rules so that make test is
> automatically executed during every package build, ensuring the
> schema and Makefile consistency checks are enforced at build time.

This already happens though? dh_auto_test will already trigger any
"check" or "test" target if there's a Makefile present, and when
building a package without your patch here I can see that working.

Or am I missing something here?

> 
> Signed-off-by: Kefu Chai <k.chai@proxmox.com>
> ---
>  debian/rules | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/debian/rules b/debian/rules
> index f00dbc2..2118ffa 100755
> --- a/debian/rules
> +++ b/debian/rules
> @@ -5,3 +5,6 @@
>  
>  %:
>  	dh $@
> +
> +override_dh_auto_test:
> +	$(MAKE) -C . -f Makefile test





^ permalink raw reply	[flat|nested] 7+ messages in thread

* applied: [PATCH v2 proxmox-acme 0/3] update acme.sh DNS API to upstream 3.1.2 tag
  2026-03-31  7:10 [PATCH v2 proxmox-acme 0/3] update acme.sh DNS API to upstream 3.1.2 tag Kefu Chai
                   ` (2 preceding siblings ...)
  2026-03-31  7:10 ` [PATCH v2 proxmox-acme 3/3] buildsys: run tests as part of dpkg-buildpackage Kefu Chai
@ 2026-03-31 16:48 ` Thomas Lamprecht
  3 siblings, 0 replies; 7+ messages in thread
From: Thomas Lamprecht @ 2026-03-31 16:48 UTC (permalink / raw)
  To: pve-devel, Kefu Chai

On Tue, 31 Mar 2026 15:10:38 +0800, Kefu Chai wrote:
> Changes since v1:
> - Fix missing Makefile ACME_SOURCES entries for the new plugins; without
>   this they were registered in the schema but not installed by the package
> - Add test/verify-acme-sources-in-makefile.pl to catch this class of
>   error: cross-checks dnsapi/ scripts in the submodule against the
>   Makefile install list, with ACME_SOURCES passed via Make so no
>   Makefile parsing is needed in Perl
> - Hook the tests into dpkg-buildpackage via override_dh_auto_test so
>   they run automatically on every package build
> 
> [...]

Applied, adapted the second one to parse the Makefile directly though, IMO not
that fragile as the list format is simple and under our control, thanks!

[1/3] update acme.sh DNS API to upstream 3.1.2 tag
      commit: c61e42a68a829f79f1c60dee7b504aad217e43b5
[2/3] tests: verify all dnsapi plugins are listed in Makefile ACME_SOURCES
      commit: c362090b0b49f8b0b0f2a7cedae52e909560eecd
[3/3] buildsys: run tests as part of dpkg-buildpackage
      SKIPPED




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2 proxmox-acme 3/3] buildsys: run tests as part of dpkg-buildpackage
  2026-03-31 16:16   ` Thomas Lamprecht
@ 2026-04-01  4:31     ` Kefu Chai
  0 siblings, 0 replies; 7+ messages in thread
From: Kefu Chai @ 2026-04-01  4:31 UTC (permalink / raw)
  To: Thomas Lamprecht, pve-devel

On Wed Apr 1, 2026 at 12:15 AM CST, Thomas Lamprecht wrote:
> Am 31.03.26 um 09:10 schrieb Kefu Chai:
>> Add override_dh_auto_test to debian/rules so that make test is
>> automatically executed during every package build, ensuring the
>> schema and Makefile consistency checks are enforced at build time.
>
> This already happens though? dh_auto_test will already trigger any
> "check" or "test" target if there's a Makefile present, and when
> building a package without your patch here I can see that working.

Yeah, it's already wired into the default dh helper. I ran into 
"No rule to make target 'test'" when running "make test" from the
top-level repo dir, where only the outer Makefile is located. That's 
why I just went ahead and added this in the d/rules in hope to avoid 
the same problem. But I missed the fact that the /Makefile actually 
copies the *src* directory when building debian package. I just found
the same pattern repeats itself in proxmox-biome. Will take a closer
look at the Makefile under root directory next time.

Thanks for pointing this out!

>
> Or am I missing something here?
>
>> 
>> Signed-off-by: Kefu Chai <k.chai@proxmox.com>
>> ---
>>  debian/rules | 3 +++
>>  1 file changed, 3 insertions(+)
>> 
>> diff --git a/debian/rules b/debian/rules
>> index f00dbc2..2118ffa 100755
>> --- a/debian/rules
>> +++ b/debian/rules
>> @@ -5,3 +5,6 @@
>>  
>>  %:
>>  	dh $@
>> +
>> +override_dh_auto_test:
>> +	$(MAKE) -C . -f Makefile test





^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-04-01  4:31 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-03-31  7:10 [PATCH v2 proxmox-acme 0/3] update acme.sh DNS API to upstream 3.1.2 tag Kefu Chai
2026-03-31  7:10 ` [PATCH v2 proxmox-acme 1/3] " Kefu Chai
2026-03-31  7:10 ` [PATCH v2 proxmox-acme 2/3] tests: verify all dnsapi plugins are listed in Makefile ACME_SOURCES Kefu Chai
2026-03-31  7:10 ` [PATCH v2 proxmox-acme 3/3] buildsys: run tests as part of dpkg-buildpackage Kefu Chai
2026-03-31 16:16   ` Thomas Lamprecht
2026-04-01  4:31     ` Kefu Chai
2026-03-31 16:48 ` applied: [PATCH v2 proxmox-acme 0/3] update acme.sh DNS API to upstream 3.1.2 tag Thomas Lamprecht

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal