From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 33FEE9EC77 for ; Fri, 3 Nov 2023 12:53:51 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id A8DD61C9C7 for ; Fri, 3 Nov 2023 12:53:50 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Fri, 3 Nov 2023 12:53:45 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id AF98344298 for ; Fri, 3 Nov 2023 12:53:44 +0100 (CET) From: Dominik Csapak To: pve-devel@lists.proxmox.com Date: Fri, 3 Nov 2023 12:53:33 +0100 Message-Id: <20231103115343.4133611-1-d.csapak@proxmox.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.133 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment POISEN_SPAM_PILL 0.1 Meta: its spam POISEN_SPAM_PILL_1 0.1 random spam to be learned in bayes POISEN_SPAM_PILL_3 0.1 random spam to be learned in bayes SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pve-devel] [RFC PATCH cluster/guest-common/qemu-server/container/manager] add backend profile support X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Nov 2023 11:53:51 -0000 This series aims to provide profile support when creating guests (ct/vm) so that users can reuse options without having to specify them every time. Sending as RFC because I don't quite like some things with the current implementation and I'm not quite sure in which direction I should take this. Also the GUI part isn't done yet and i wanted to see if the direction is OK. (Sorry for the wall of text) The major issues: Using a single section config for both VMs and CTs make handling the properties a bit weird. For now i prefix the options with "$type_" so vm options are e.g. 'vm_ostype', 'vm_name', and so on while container options are 'ct_ostype', 'ct_hostname', etc. Using the same config/plugin system also makes using it a bit weird. We have to register/init them in the api where they're used, but for the cli we have to register only the available type and then init. This makes it necessary to always set 'allow_unknown' while parsing the config so that 'qm' doesn't trip over the container profiles... A fix for both could be to separate the ct/vm configs into two files (similar to how we did pci/usb mapping configs), that would fix the prefixing, as well as the register/init issue (We have to have separate APIs then ofc). Another fix would be to extend the section config to allow different properties of the same name for different types. Should be possible, although we have to be careful to not break existing ones, and also the API interface has to be separate for each type then (cannot really have confiflicting api parameter schemas for the same name?) We could also go in a completely different direction and create a config per profile? (like we handle vm configs). Downside of that is, that the current guest config handling part is partly in pmxcfs, so we'd have to make that either more generic, or duplicate it for profiles. (I don't quite like this one, since i think a single config for all profiles should be enough? We could still do that later if we want and the current way is impractical) The minor issues: * Is the priv path ok? /mapping/profiles/ feels a bit weird * We should probably introduce a 'meta' property for ct like we have for vms? we could record the profile there and also e.g. the template used to set the container up. * I did not restrict to any options of the config and i don't believe this should make any issues (the critical ones are filtered out anyway) but should we maybe have some kind of whitelist? if yes, which one should be on there? * there is still an issue with the docs generation, i'll have to look into it * I'm not quite sure how the UI for creating/editing profiles should look like. For creating i could imagine a 'create profile from guest' type of thing (thanks @mira for the idea), but for editing or creating from scratch I'm a bit conflicted. We could simply show the profiles in the tree, and reuse the vm hw/options panels for that, but does that seem overkill? We could also leave that API only for now, and make the gui later? (Using it in the wizard would also not be trivial, but there the constraints are rather straight forward) pve-cluster: Dominik Csapak (1): add profiles.cfg to cluster fs src/PVE/Cluster.pm | 1 + src/pmxcfs/status.c | 1 + 2 files changed, 2 insertions(+) pve-guest-common: Dominik Csapak (1): add profiles section config plugin src/Makefile | 2 ++ src/PVE/Profiles/Plugin.pm | 72 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 src/PVE/Profiles/Plugin.pm qemu-server: Dominik Csapak (4): meta info: allow additional properties to be given add the VM profiles plugin api: add profile option to create vm api call qm: register and init the profiles plugins PVE/API2/Qemu.pm | 27 ++++++++++++++++++++++++++- PVE/CLI/qm.pm | 6 ++++++ PVE/Makefile | 1 + PVE/Profiles/Makefile | 5 +++++ PVE/Profiles/VM.pm | 37 +++++++++++++++++++++++++++++++++++++ PVE/QemuServer.pm | 29 +++++++++++++++++++++-------- 6 files changed, 96 insertions(+), 9 deletions(-) create mode 100644 PVE/Profiles/Makefile create mode 100644 PVE/Profiles/VM.pm pve-container: Dominik Csapak (3): add the CT profiles plugin api: add profile option to create ct api call pct: register and init the profiles plugins src/PVE/API2/LXC.pm | 24 ++++++++++++++++++++++++ src/PVE/CLI/pct.pm | 6 ++++++ src/PVE/Makefile | 1 + src/PVE/Profiles/CT.pm | 37 +++++++++++++++++++++++++++++++++++++ src/PVE/Profiles/Makefile | 4 ++++ 5 files changed, 72 insertions(+) create mode 100644 src/PVE/Profiles/CT.pm create mode 100644 src/PVE/Profiles/Makefile pve-manager: Dominik Csapak (1): api: add guest profile api endpoint PVE/API2/Cluster.pm | 6 + PVE/API2/Cluster/Makefile | 1 + PVE/API2/Cluster/Profiles.pm | 230 +++++++++++++++++++++++++++++++++++ 3 files changed, 237 insertions(+) create mode 100644 PVE/API2/Cluster/Profiles.pm -- 2.30.2