Release v1.3.87 — VM.Monitor gibt es in Proxmox 9 nicht mehr
tests / pest (push) Failing after 8m56s Details
tests / assets (push) Successful in 24s Details
tests / release (push) Has been skipped Details

Die Übernahme des ersten PVE-9-Hosts blieb in CreateAutomationToken stehen:
`pveum role modify` lehnt die GANZE Privilegienliste ab, sobald ein einziger
Name darin unbekannt ist — "invalid privilege 'VM.Monitor'". Die Liste stammt
aus der PVE-8-Zeit.

Ersatzlos gestrichen, nicht ersetzt: VM.Monitor gab Zugriff auf den
QEMU-Monitor, und den benutzt CluPilot nirgends. Geprüft, nicht vermutet — die
einzigen Treffer auf "monitor" im Provisioning betreffen Uptime Kuma. Auf PVE 8
fehlt damit ein Recht, das dort ohnehin niemand gebraucht hat; eine Liste passt
weiterhin auf beide Fassungen.

Dazu ein Test, der die angeforderten Namen gegen die gültigen hält — abgelesen
aus der Administrator-Rolle eines echten PVE 9. Die Liste ist die Verabredung
zwischen CluPilot und jedem Host, den es je übernimmt; sie hier zu prüfen ist
billiger als der Abbruch auf einer Maschine, die schon halb eingerichtet ist.

2245 Tests grün.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
main v1.3.87
nexxo 2026-08-01 03:42:37 +02:00
parent 4f04d9d29d
commit 97ac6c04e8
3 changed files with 45 additions and 2 deletions

View File

@ -1 +1 @@
1.3.86
1.3.87

View File

@ -449,8 +449,22 @@ return [
| covers the datacenter firewall if that ever moves off SSH and onto the
| API. It is granted on `/` because both endpoints check `/` and nothing
| narrower would satisfy them.
|
| `VM.Monitor` stand hier und ist am 1. August 2026 herausgeflogen: PVE 9
| kennt es nicht mehr, und `pveum role modify` lehnt die GANZE Liste ab,
| sobald ein Name darin unbekannt ist „invalid privilege 'VM.Monitor'".
| Die Übernahme des ersten PVE-9-Hosts blieb damit in
| CreateAutomationToken stehen, fünf Wiederholungen lang.
|
| Ersatzlos gestrichen, nicht ersetzt: es gab Zugriff auf den
| QEMU-Monitor, und den benutzt CluPilot nirgends geprüft, nicht
| vermutet. Auf PVE 8 fehlt damit ein Recht, das dort ohnehin niemand
| gebraucht hat, also passt eine Liste weiterhin auf beide Fassungen.
|
| Wenn hier je wieder etwas dazukommt: die gültigen Namen stehen auf dem
| Host selbst, in der Administrator-Rolle aus `pveum role list`.
*/
'role_privs' => 'VM.Allocate,VM.Clone,VM.Config.Disk,VM.Config.CPU,VM.Config.Memory,VM.Config.Network,VM.Config.Options,VM.Config.Cloudinit,VM.PowerMgmt,VM.Monitor,VM.Audit,VM.Backup,VM.GuestAgent.Audit,VM.GuestAgent.Unrestricted,Datastore.AllocateSpace,Datastore.Audit,Sys.Audit,Sys.Modify',
'role_privs' => 'VM.Allocate,VM.Clone,VM.Config.Disk,VM.Config.CPU,VM.Config.Memory,VM.Config.Network,VM.Config.Options,VM.Config.Cloudinit,VM.PowerMgmt,VM.Audit,VM.Backup,VM.GuestAgent.Audit,VM.GuestAgent.Unrestricted,Datastore.AllocateSpace,Datastore.Audit,Sys.Audit,Sys.Modify',
'user' => 'automation@pve',
'token_name' => 'clupilot',
],

View File

@ -1342,3 +1342,32 @@ it('names the reason pveum gave instead of only that it failed', function () {
// in einer Ereigniszeile.
->and($result->reason)->not->toContain('USAGE');
});
it('asks only for privileges Proxmox 9 still knows', function () {
// `pveum role modify` lehnt die GANZE Liste ab, sobald ein Name darin
// unbekannt ist. `VM.Monitor` gibt es in PVE 9 nicht mehr, und die
// Übernahme des ersten PVE-9-Hosts blieb daran hängen — fünf
// Wiederholungen mit einer Meldung, die den Namen nicht nannte.
//
// Die Liste ist die Verabredung zwischen CluPilot und jedem Host, den es je
// übernimmt. Sie gegen die gültigen Namen zu halten, ist billiger als der
// Abbruch auf einer Maschine, die schon halb eingerichtet ist.
$gueltig = [
'Datastore.Allocate', 'Datastore.AllocateSpace', 'Datastore.AllocateTemplate', 'Datastore.Audit',
'Group.Allocate', 'Mapping.Audit', 'Mapping.Modify', 'Mapping.Use', 'Permissions.Modify',
'Pool.Allocate', 'Pool.Audit', 'Realm.Allocate', 'Realm.AllocateUser',
'SDN.Allocate', 'SDN.Audit', 'SDN.Use',
'Sys.AccessNetwork', 'Sys.Audit', 'Sys.Console', 'Sys.Incoming', 'Sys.Modify',
'Sys.PowerMgmt', 'Sys.Syslog', 'User.Modify',
'VM.Allocate', 'VM.Audit', 'VM.Backup', 'VM.Clone',
'VM.Config.CDROM', 'VM.Config.CPU', 'VM.Config.Cloudinit', 'VM.Config.Disk',
'VM.Config.HWType', 'VM.Config.Memory', 'VM.Config.Network', 'VM.Config.Options',
'VM.Console', 'VM.GuestAgent.Audit', 'VM.GuestAgent.FileRead',
'VM.GuestAgent.FileSystemMgmt', 'VM.GuestAgent.FileWrite', 'VM.GuestAgent.Unrestricted',
'VM.Migrate', 'VM.PowerMgmt', 'VM.Replicate', 'VM.Snapshot', 'VM.Snapshot.Rollback',
];
$angefordert = explode(',', (string) config('provisioning.proxmox.role_privs'));
expect(array_diff($angefordert, $gueltig))->toBe([]);
});