[pve-devel] [RFC PATCH container 2/3] api: add profile option to create ct api call
Dominik Csapak
d.csapak at proxmox.com
Fri Nov 3 12:53:41 CET 2023
we use the profile cfg as the 'param' hash, but overwrite the values
with the ones from the api call, so one can overwrite options from
the profile easily
Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
src/PVE/API2/LXC.pm | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/src/PVE/API2/LXC.pm b/src/PVE/API2/LXC.pm
index 28d14de..e35f859 100644
--- a/src/PVE/API2/LXC.pm
+++ b/src/PVE/API2/LXC.pm
@@ -27,6 +27,10 @@ use PVE::API2::LXC::Config;
use PVE::API2::LXC::Status;
use PVE::API2::LXC::Snapshot;
use PVE::JSONSchema qw(get_standard_option);
+
+use PVE::Profiles::Plugin;
+use PVE::Profiles::CT;
+
use base qw(PVE::RESTHandler);
BEGIN {
@@ -196,6 +200,11 @@ __PACKAGE__->register_method({
default => 0,
description => "Start the CT after its creation finished successfully.",
},
+ profile => {
+ optional => 1,
+ type => 'string',
+ description => "The profile to use as base config.",
+ },
}),
},
returns => {
@@ -209,6 +218,21 @@ __PACKAGE__->register_method({
my $rpcenv = PVE::RPCEnvironment::get();
my $authuser = $rpcenv->get_user();
+ my $profile = extract_param($param, 'profile');
+ if (defined($profile)) {
+ $rpcenv->check_full($authuser, "/mapping/profiles/${profile}", ['Mapping.Use']);
+ my $profile_cfgs = cfs_read_file('virtual-guest/profiles.cfg');
+ my $profile_cfg = $profile_cfgs->{ids}->{$profile};
+ die "no such profile '$profile'\n" if !defined($profile_cfg);
+ die "wrong type '$profile_cfg->{type}'\n" if $profile_cfg->{type} ne 'ct';
+
+ for my $opt (keys $param->%*) {
+ $profile_cfg->{$opt} = $param->{$opt};
+ }
+ delete $profile_cfg->{type};
+ $param = $profile_cfg;
+ }
+
my $node = extract_param($param, 'node');
my $vmid = extract_param($param, 'vmid');
my $ignore_unpack_errors = extract_param($param, 'ignore-unpack-errors');
--
2.30.2
More information about the pve-devel
mailing list