From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pve-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id F18A11FF173 for <inbox@lore.proxmox.com>; Mon, 10 Feb 2025 13:07:32 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 7F336A457; Mon, 10 Feb 2025 13:07:27 +0100 (CET) From: Daniel Herzig <d.herzig@proxmox.com> To: pve-devel@lists.proxmox.com Date: Mon, 10 Feb 2025 13:07:15 +0100 Message-Id: <20250210120722.163622-2-d.herzig@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250210120722.163622-1-d.herzig@proxmox.com> References: <20250210120722.163622-1-d.herzig@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.557 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 KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RDNS_NONE 0.793 Delivered to internal network by a host with no rDNS SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record Subject: [pve-devel] [PATCH 1/8 container] cloudinit: introduce config parameters X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion <pve-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pve-devel/> List-Post: <mailto:pve-devel@lists.proxmox.com> List-Help: <mailto:pve-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel>, <mailto:pve-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox VE development discussion <pve-devel@lists.proxmox.com> Cc: Leo Nunner <l.nunner@proxmox.com> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" <pve-devel-bounces@lists.proxmox.com> From: Leo Nunner <l.nunner@proxmox.com> Introduce configuration parameters for cloud-init. Like with VMs, it's possible to specify: - user - password - ssh keys - enable/disable updates on first boot It's also possible to pass through custom config files for the user and vendor settings. We don't allow configuring the network through cloud-init, since it will clash with whatever configuration we already did for the container. Signed-off-by: Leo Nunner <l.nunner@proxmox.com> --- src/PVE/API2/LXC.pm | 3 ++ src/PVE/API2/LXC/Config.pm | 7 ++++- src/PVE/LXC/Config.pm | 61 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 1 deletion(-) diff --git a/src/PVE/API2/LXC.pm b/src/PVE/API2/LXC.pm index 7cb5122..d6e647d 100644 --- a/src/PVE/API2/LXC.pm +++ b/src/PVE/API2/LXC.pm @@ -2515,6 +2515,9 @@ __PACKAGE__->register_method({ my $pending_delete_hash = PVE::LXC::Config->parse_pending_delete($conf->{pending}->{delete}); + $conf->{cipassword} = '**********' if defined($conf->{cipassword}); + $conf->{pending}->{cipassword} = '********** ' if defined($conf->{pending}->{cipassword}); + return PVE::GuestHelpers::config_with_pending_array($conf, $pending_delete_hash); }}); diff --git a/src/PVE/API2/LXC/Config.pm b/src/PVE/API2/LXC/Config.pm index 5cbc014..55e9730 100644 --- a/src/PVE/API2/LXC/Config.pm +++ b/src/PVE/API2/LXC/Config.pm @@ -79,7 +79,7 @@ __PACKAGE__->register_method({ } else { $conf = PVE::LXC::Config->load_current_config($param->{vmid}, $param->{current}); } - + $conf->{cipassword} = '**********' if $conf->{cipassword}; return $conf; }}); @@ -148,6 +148,11 @@ __PACKAGE__->register_method({ $param->{cpuunits} = PVE::CGroup::clamp_cpu_shares($param->{cpuunits}) if defined($param->{cpuunits}); # clamp value depending on cgroup version + if (defined(my $cipassword = $param->{cipassword})) { + $param->{cipassword} = PVE::Tools::encrypt_pw($cipassword) + if $cipassword !~ /^\$(?:[156]|2[ay])(\$.+){2}/; + } + my $code = sub { my $conf = PVE::LXC::Config->load_config($vmid); diff --git a/src/PVE/LXC/Config.pm b/src/PVE/LXC/Config.pm index 5cc37f7..e3ed93b 100644 --- a/src/PVE/LXC/Config.pm +++ b/src/PVE/LXC/Config.pm @@ -450,6 +450,63 @@ my $features_desc = { }, }; +my $cicustom_fmt = { + user => { + type => 'string', + optional => 1, + description => 'To pass a custom file containing all user data to the container via cloud-init.', + format => 'pve-volume-id', + format_description => 'volume', + }, + vendor => { + type => 'string', + optional => 1, + description => 'To pass a custom file containing all vendor data to the container via cloud-init.', + format => 'pve-volume-id', + format_description => 'volume', + }, +}; +PVE::JSONSchema::register_format('pve-pct-cicustom', $cicustom_fmt); + +my $confdesc_cloudinit = { + cienable => { + optional => 1, + type => 'boolean', + description => "cloud-init: provide cloud-init configuration to container.", + }, + ciuser => { + optional => 1, + type => 'string', + description => "cloud-init: User name to change ssh keys and password for instead of the" + ." image's configured default user.", + }, + cipassword => { + optional => 1, + type => 'string', + description => 'cloud-init: Password to assign the user. Using this is generally not' + .' recommended. Use ssh keys instead. Also note that older cloud-init versions do not' + .' support hashed passwords.', + }, + ciupgrade => { + optional => 1, + type => 'boolean', + description => 'cloud-init: do an automatic package update on boot.' + }, + cicustom => { + optional => 1, + type => 'string', + description => 'cloud-init: Specify custom files to replace the automatically generated' + .' ones at start.', + format => 'pve-pct-cicustom', + }, + sshkeys => { + optional => 1, + type => 'string', + format => 'urlencoded', + description => "cloud-init: Setup public SSH keys (one key per line, OpenSSH format).", + }, +}; + my $confdesc = { lock => { optional => 1, @@ -622,6 +679,10 @@ my $confdesc = { }, }; +foreach my $key (keys %$confdesc_cloudinit) { + $confdesc->{$key} = $confdesc_cloudinit->{$key}; +} + my $valid_lxc_conf_keys = { 'lxc.apparmor.profile' => 1, 'lxc.apparmor.allow_incomplete' => 1, -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel