all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH v3 qemu-server 1/1] fix #2429: allow to specify cloud-init vendor snippet via cicustom
@ 2021-10-30 14:49 Constantin Herold
  2021-11-04 11:28 ` Mira Limbeck
  0 siblings, 1 reply; 3+ messages in thread
From: Constantin Herold @ 2021-10-30 14:49 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Constantin Herold <proxmox8914@herold.me>
---
 PVE/QemuServer.pm           |  8 ++++++++
 PVE/QemuServer/Cloudinit.pm | 25 ++++++++++++++++++++-----
 2 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index e0a89aa..da62a39 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -734,6 +734,14 @@ my $cicustom_fmt = {
 	format => 'pve-volume-id',
 	format_description => 'volume',
     },
+    vendor => {
+    type => 'string',
+    optional => 1,
+    description => 'Specify a custom file containing all vendor data passed to the VM via'
+     .' cloud-init.',
+    format => 'pve-volume-id',
+    format_description => 'volume',
+    },
 };
 PVE::JSONSchema::register_format('pve-qm-cicustom', $cicustom_fmt);
 
diff --git a/PVE/QemuServer/Cloudinit.pm b/PVE/QemuServer/Cloudinit.pm
index 9dc46ae..420566e 100644
--- a/PVE/QemuServer/Cloudinit.pm
+++ b/PVE/QemuServer/Cloudinit.pm
@@ -227,17 +227,22 @@ EOF
 sub generate_configdrive2 {
     my ($conf, $vmid, $drive, $volname, $storeid) = @_;
 
-    my ($user_data, $network_data, $meta_data) = get_custom_cloudinit_files($conf);
+    my ($user_data, $network_data, $meta_data, $vendor_data) = get_custom_cloudinit_files($conf);
     $user_data = cloudinit_userdata($conf, $vmid) if !defined($user_data);
     $network_data = configdrive2_network($conf) if !defined($network_data);
 
     if (!defined($meta_data)) {
 	$meta_data = configdrive2_gen_metadata($user_data, $network_data);
     }
+
+    my $sum = length($user_data) + length($network_data) + length($meta_data) + length($vendor_data);
+    die "Cloud-Init sum of snippets too big (> 3 MiB)\n" if $sum > (3 * 1024 * 1024);
+
     my $files = {
 	'/openstack/latest/user_data' => $user_data,
 	'/openstack/content/0000' => $network_data,
-	'/openstack/latest/meta_data.json' => $meta_data
+	'/openstack/latest/meta_data.json' => $meta_data,
+	'/openstack/latest/vendor_data.json' => $vendor_data
     };
     commit_cloudinit_disk($conf, $vmid, $drive, $volname, $storeid, $files, 'config-2');
 }
@@ -476,7 +481,7 @@ sub nocloud_gen_metadata {
 sub generate_nocloud {
     my ($conf, $vmid, $drive, $volname, $storeid) = @_;
 
-    my ($user_data, $network_data, $meta_data) = get_custom_cloudinit_files($conf);
+    my ($user_data, $network_data, $meta_data, $vendor_data) = get_custom_cloudinit_files($conf);
     $user_data = cloudinit_userdata($conf, $vmid) if !defined($user_data);
     $network_data = nocloud_network($conf) if !defined($network_data);
 
@@ -484,10 +489,14 @@ sub generate_nocloud {
 	$meta_data = nocloud_gen_metadata($user_data, $network_data);
     }
 
+    my $sum = length($user_data) + length($network_data) + length($meta_data) + length($vendor_data);
+    die "Cloud-Init sum of snippets too big (> 3 MiB)\n" if $sum > (3 * 1024 * 1024);
+
     my $files = {
 	'/user-data' => $user_data,
 	'/network-config' => $network_data,
-	'/meta-data' => $meta_data
+	'/meta-data' => $meta_data,
+	'/vendor-data' => $vendor_data
     };
     commit_cloudinit_disk($conf, $vmid, $drive, $volname, $storeid, $files, 'cidata');
 }
@@ -501,6 +510,7 @@ sub get_custom_cloudinit_files {
     my $network_volid = $files->{network};
     my $user_volid = $files->{user};
     my $meta_volid = $files->{meta};
+    my $vendor_volid = $files->{vendor};
 
     my $storage_conf = PVE::Storage::config();
 
@@ -519,7 +529,12 @@ sub get_custom_cloudinit_files {
 	$meta_data = read_cloudinit_snippets_file($storage_conf, $meta_volid);
     }
 
-    return ($user_data, $network_data, $meta_data);
+    my $vendor_data;
+    if ($vendor_volid) {
+	$vendor_data = read_cloudinit_snippets_file($storage_conf, $vendor_volid);
+    }
+
+    return ($user_data, $network_data, $meta_data, $vendor_data);
 }
 
 sub read_cloudinit_snippets_file {
-- 
2.23.1




^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [pve-devel] [PATCH v3 qemu-server 1/1] fix #2429: allow to specify cloud-init vendor snippet via cicustom
  2021-10-30 14:49 [pve-devel] [PATCH v3 qemu-server 1/1] fix #2429: allow to specify cloud-init vendor snippet via cicustom Constantin Herold
@ 2021-11-04 11:28 ` Mira Limbeck
  2021-11-04 12:15   ` Thomas Lamprecht
  0 siblings, 1 reply; 3+ messages in thread
From: Mira Limbeck @ 2021-11-04 11:28 UTC (permalink / raw)
  To: pve-devel

Looks good.

Reviewed-by: Mira Limbeck <m.limbeck@proxmox.com>

On 10/30/21 4:49 PM, Constantin Herold wrote:
> Signed-off-by: Constantin Herold <proxmox8914@herold.me>
> ---
>   PVE/QemuServer.pm           |  8 ++++++++
>   PVE/QemuServer/Cloudinit.pm | 25 ++++++++++++++++++++-----
>   2 files changed, 28 insertions(+), 5 deletions(-)
>
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
> index e0a89aa..da62a39 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -734,6 +734,14 @@ my $cicustom_fmt = {
>   	format => 'pve-volume-id',
>   	format_description => 'volume',
>       },
> +    vendor => {
> +    type => 'string',
> +    optional => 1,
> +    description => 'Specify a custom file containing all vendor data passed to the VM via'
> +     .' cloud-init.',
> +    format => 'pve-volume-id',
> +    format_description => 'volume',
> +    },
>   };
>   PVE::JSONSchema::register_format('pve-qm-cicustom', $cicustom_fmt);
>   
> diff --git a/PVE/QemuServer/Cloudinit.pm b/PVE/QemuServer/Cloudinit.pm
> index 9dc46ae..420566e 100644
> --- a/PVE/QemuServer/Cloudinit.pm
> +++ b/PVE/QemuServer/Cloudinit.pm
> @@ -227,17 +227,22 @@ EOF
>   sub generate_configdrive2 {
>       my ($conf, $vmid, $drive, $volname, $storeid) = @_;
>   
> -    my ($user_data, $network_data, $meta_data) = get_custom_cloudinit_files($conf);
> +    my ($user_data, $network_data, $meta_data, $vendor_data) = get_custom_cloudinit_files($conf);
>       $user_data = cloudinit_userdata($conf, $vmid) if !defined($user_data);
>       $network_data = configdrive2_network($conf) if !defined($network_data);
>   
>       if (!defined($meta_data)) {
>   	$meta_data = configdrive2_gen_metadata($user_data, $network_data);
>       }
> +
> +    my $sum = length($user_data) + length($network_data) + length($meta_data) + length($vendor_data);
> +    die "Cloud-Init sum of snippets too big (> 3 MiB)\n" if $sum > (3 * 1024 * 1024);
> +
>       my $files = {
>   	'/openstack/latest/user_data' => $user_data,
>   	'/openstack/content/0000' => $network_data,
> -	'/openstack/latest/meta_data.json' => $meta_data
> +	'/openstack/latest/meta_data.json' => $meta_data,
> +	'/openstack/latest/vendor_data.json' => $vendor_data
>       };
>       commit_cloudinit_disk($conf, $vmid, $drive, $volname, $storeid, $files, 'config-2');
>   }
> @@ -476,7 +481,7 @@ sub nocloud_gen_metadata {
>   sub generate_nocloud {
>       my ($conf, $vmid, $drive, $volname, $storeid) = @_;
>   
> -    my ($user_data, $network_data, $meta_data) = get_custom_cloudinit_files($conf);
> +    my ($user_data, $network_data, $meta_data, $vendor_data) = get_custom_cloudinit_files($conf);
>       $user_data = cloudinit_userdata($conf, $vmid) if !defined($user_data);
>       $network_data = nocloud_network($conf) if !defined($network_data);
>   
> @@ -484,10 +489,14 @@ sub generate_nocloud {
>   	$meta_data = nocloud_gen_metadata($user_data, $network_data);
>       }
>   
> +    my $sum = length($user_data) + length($network_data) + length($meta_data) + length($vendor_data);
> +    die "Cloud-Init sum of snippets too big (> 3 MiB)\n" if $sum > (3 * 1024 * 1024);
> +
>       my $files = {
>   	'/user-data' => $user_data,
>   	'/network-config' => $network_data,
> -	'/meta-data' => $meta_data
> +	'/meta-data' => $meta_data,
> +	'/vendor-data' => $vendor_data
>       };
>       commit_cloudinit_disk($conf, $vmid, $drive, $volname, $storeid, $files, 'cidata');
>   }
> @@ -501,6 +510,7 @@ sub get_custom_cloudinit_files {
>       my $network_volid = $files->{network};
>       my $user_volid = $files->{user};
>       my $meta_volid = $files->{meta};
> +    my $vendor_volid = $files->{vendor};
>   
>       my $storage_conf = PVE::Storage::config();
>   
> @@ -519,7 +529,12 @@ sub get_custom_cloudinit_files {
>   	$meta_data = read_cloudinit_snippets_file($storage_conf, $meta_volid);
>       }
>   
> -    return ($user_data, $network_data, $meta_data);
> +    my $vendor_data;
> +    if ($vendor_volid) {
> +	$vendor_data = read_cloudinit_snippets_file($storage_conf, $vendor_volid);
> +    }
> +
> +    return ($user_data, $network_data, $meta_data, $vendor_data);
>   }
>   
>   sub read_cloudinit_snippets_file {




^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [pve-devel] [PATCH v3 qemu-server 1/1] fix #2429: allow to specify cloud-init vendor snippet via cicustom
  2021-11-04 11:28 ` Mira Limbeck
@ 2021-11-04 12:15   ` Thomas Lamprecht
  0 siblings, 0 replies; 3+ messages in thread
From: Thomas Lamprecht @ 2021-11-04 12:15 UTC (permalink / raw)
  To: Proxmox VE development discussion, Mira Limbeck, Constantin Herold

On 04.11.21 12:28, Mira Limbeck wrote:
> Looks good.
> 
> Reviewed-by: Mira Limbeck <m.limbeck@proxmox.com>

With that: applied, thanks to both.

I added Mira's suggested comment regarding the size limitation as a followup:
https://git.proxmox.com/?p=qemu-server.git;a=commitdiff;h=115cb432bcd90e00a487d1ed5ad28c4158dd0e47




^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-11-04 12:15 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-30 14:49 [pve-devel] [PATCH v3 qemu-server 1/1] fix #2429: allow to specify cloud-init vendor snippet via cicustom Constantin Herold
2021-11-04 11:28 ` Mira Limbeck
2021-11-04 12:15   ` Thomas Lamprecht

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal