fix #5607: schema: say what a valid configuration ID looks like

The 'pve-configid' format is used for many IDs, for example the names
of resource mappings, but an invalid ID only got rejected with:

  invalid configuration ID 'gpu@node1'

which does not tell what is wrong with it, so users had to guess or
look up the regex in the code.

Explain the rules in the error message: an ID must start with a letter,
be at least two characters long and only contain letters, digits, '-'
and '_'. These are the same rules the tooltip of the 'ConfigId'
validation in the web UI lists. Add a test for the message.

Signed-off-by: Michal Fox <me@dualfroz.com>
This commit is contained in:
dualfroz committed 2026-10-02 16:42:24 +02:00
1 parent 927e892d87
commit 9373a6089b
2 files changed
+10 -1

No files matched your search

+2 -1
View File
@@ -256,7 +256,8 @@ sub pve_verify_configid {
if ($id !~ m/^$CONFIGID_RE\z/) { if ($id !~ m/^$CONFIGID_RE\z/) {
return undef if $noerr; return undef if $noerr;
die "invalid configuration ID '$id'\n"; die "invalid configuration ID '$id' - it must start with a letter, be at least two"
. " characters long and only contain letters, digits, '-' and '_'\n";
} }
return $id; return $id;
} }
+8
View File
@@ -25,6 +25,14 @@ foreach my $id (@$invalid_configids) {
is(PVE::JSONSchema::pve_verify_configid($id, $noerr), undef, 'invalid configid'); is(PVE::JSONSchema::pve_verify_configid($id, $noerr), undef, 'invalid configid');
} }
eval { PVE::JSONSchema::pve_verify_configid('gpu@node1') };
is(
$@,
"invalid configuration ID 'gpu\@node1' - it must start with a letter, be at least two"
. " characters long and only contain letters, digits, '-' and '_'\n",
'invalid configid error explains the format',
);
# test some string rendering # test some string rendering
my $render_data = [ my $render_data = [
["timestamp", 0, undef, "1970-01-01 01:00:00"], ["timestamp", 0, undef, "1970-01-01 01:00:00"],