pmgsh 400 parameter verification failed

sthielo

New Member
Mar 17, 2025
3
0
1
Ich will den Zertifikats-Check via ansible anstossen. Folgendes ist gemäss API-Beschrieb das von mir gewünschte Cmd:
Code:
root@mailgw:/opt/scripts# pmgsh set /nodes/mailgw/certificates/acme/smtp
400 Parameter verification failed.
force: Certificate does not expire within the next 30 days, and 'force' is not set.
set nodes/mailgw/certificates/acme/smtp  [OPTIONS]

Funktioniert nicht (400). - Wenn ich --force nutze, funktioniert's ... d.h. es wird ein forcierter Renewal angestossen und durchgeführt! - ABER das will ich eben nicht, sondern ein Renewal soll nur regulär geschehen (TTL < 30d).

gemäss 'help' ist obiges aber korrekt - OPTIONS sind optional ... daher ja auch der Name ;-) :
Bash:
root@mailgw:/opt/scripts# pmgsh help /nodes/mailgw/certificates/acme/smtp -v
...
USAGE: set /nodes/{node}/certificates/acme/{type}  [OPTIONS]

  Renew existing certificate from CA.

  --force    <boolean>   (default=0)
             Force renewal even if expiry is more than 30 days away.
...

habe auch versucht force explizit auf 0 zu setzen, was gemäss help auch Syntax-konform ist. Aber das endet ebenfalls mit dem Fehler 400. Die Idee, die Optionen nur mit einem '-' zu versuchen habe ich von der Dok (https://pmg.proxmox.com/pmg-docs/pmgsh.1.html). Die widerspricht dem Help-Text in dieser Beziehung :-(
Bash:
root@mailgw:/opt/scripts# pmgsh set /nodes/mailgw/certificates/acme/smtp --force 0
400 Parameter verification failed.
force: Certificate does not expire within the next 30 days, and 'force' is not set.
set nodes/mailgw/certificates/acme/smtp  [OPTIONS]
root@mailgw:/opt/scripts# pmgsh set /nodes/mailgw/certificates/acme/smtp --force=0
400 Parameter verification failed.
force: Certificate does not expire within the next 30 days, and 'force' is not set.
set nodes/mailgw/certificates/acme/smtp  [OPTIONS]
root@mailgw:/opt/scripts# pmgsh set /nodes/mailgw/certificates/acme/smtp -force=0
400 Parameter verification failed.
force: Certificate does not expire within the next 30 days, and 'force' is not set.
set nodes/mailgw/certificates/acme/smtp  [OPTIONS]
root@mailgw:/opt/scripts# pmgsh set /nodes/mailgw/certificates/acme/smtp -force 0
400 Parameter verification failed.
force: Certificate does not expire within the next 30 days, and 'force' is not set.
set nodes/mailgw/certificates/acme/smtp  [OPTIONS]

Was mache ich falsch? Oder ist das ein Option-Parsing-Bug? oder ein Help-Text-Bug?

PS: meine Version auf dieser Lab-Instanz - aktuellste!
Bash:
root@mailgw:/opt/scripts# pmgversion -v
proxmox-mailgateway-container: 8.2.0 (API: 8.2.1/5f1bd658e7ca, running kernel: 6.14.8-2-pve)
pmg-api: 8.2.1
pmg-gui: 4.2.1
clamav-daemon: 1.0.7+dfsg-1~deb12u1
ifupdown: residual config
ifupdown2: 3.2.0-1+pmx11
libarchive-perl: 3.6.2
libjs-extjs: 7.0.0-5
libjs-framework7: 4.4.7-2
libproxmox-acme-perl: 1.6.0
libproxmox-acme-plugins: 1.6.0
libpve-apiclient-perl: 3.3.2
libpve-common-perl: 8.3.4
libpve-http-server-perl: 5.2.2
libxdgmime-perl: 1.1.0
lvm2: not correctly installed
pmg-docs: 8.2.0
pmg-i18n: 3.4.5
pmg-log-tracker: 2.5.0
proxmox-mini-journalreader: 1.5
proxmox-spamassassin: 4.0.1-2
proxmox-widget-toolkit: 4.3.13
pve-xtermjs: 5.5.0-2
 
PS: ja ich weiss, das PMG intern einen Task-Scheduler hat, der diese Checks aufruft, ABER ich benötige Zertifikate von verschiedenen Acme-Accounts (API -> interne CA und SMTP -> public CA (diese Testinstanz mit LetsEncrypt)). Deshalb schlägt der eine immer fehl, da ich nur einen Account acktiv haben kann.

=> dazu hätte ich einen FEATURE-REQUEST: JE Zertifikat[-Typ] den Acme-Account festlegen zu können.

... meine momentane Lösung. ich habe regelmässige Jobs, die den Account umstellen und dann eben diesen Check anstossen sollen - Letzteres führte zu oben Beschriebenem.
 
Ich hab's nun auch noch mittels curl direkt auf der HTTP-API versucht. Da erhalte ich denselben Fehler, wenn ich force als Parameter weglasse bzw. auf 0 setze, was gemäss API-Viewer der default sein sollte.

Code:
++ curl -k -s -w '\n%{http_code}' https://localhost:8006/api2/json/nodes/mailgw/certificates/acme/api -X PUT -b PMGAuthCookie=PMG:root@pam:***MASKED*** -H 'CSRFPreventionToken: ***MASKED***'
+ http_code=400
+ content='{"errors":{"force":"Certificate does not expire within the next 30 days, and '\''force'\'' is not set."},"message":"Parameter verification failed.\n","data":null}'

++ curl -k -s -w '\n%{http_code}' https://localhost:8006/api2/json/nodes/mailgw/certificates/acme/api --data-urlencode force=0 -X PUT -b PMGAuthCookie=PMG:root@pam:***MASKED*** -H 'CSRFPreventionToken: ***MASKED***'
+ http_code=400
+ content='{"data":null,"message":"Parameter verification failed.\n","errors":{"force":"Certificate does not expire within the next 30 days, and '\''force'\'' is not set."}}'