* [pve-devel] [PATCH v2 qemu-server 1/1] fix #2429: allow to specify cloud-init vendor snippet via cicustom
@ 2021-08-23 14:34 Constantin Herold
2021-09-27 13:07 ` Mira Limbeck
0 siblings, 1 reply; 2+ messages in thread
From: Constantin Herold @ 2021-08-23 14:34 UTC (permalink / raw)
To: pve-devel
v2 rebase with master
Any updates on this ? Patch has been available since june
reference: https://lists.proxmox.com/pipermail/pve-devel/2021-June/049025.html
Example:
qm set 9000 --cicustom "vendor=local:snippets/vendor.yaml"
cat << 'EOF' > /var/lib/vz/snippets/vendor.yaml
runcmd:
- apt update
- apt install -y qemu-guest-agent
- systemctl start qemu-guest-agent
EOF
Signed-off-by: Constantin Herold <proxmox8914@herold.me>
---
PVE/QemuServer.pm | 8 ++++++++
PVE/QemuServer/Cloudinit.pm | 23 ++++++++++++++++++-----
2 files changed, 26 insertions(+), 5 deletions(-)
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index cc73af8..54b1ce9 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -713,6 +713,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 a5474d3..da776a9 100644
--- a/PVE/QemuServer/Cloudinit.pm
+++ b/PVE/QemuServer/Cloudinit.pm
@@ -227,7 +227,7 @@ 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);
@@ -237,7 +237,8 @@ sub generate_configdrive2 {
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');
}
@@ -493,7 +494,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);
@@ -501,10 +502,16 @@ sub generate_nocloud {
$meta_data = nocloud_gen_metadata($user_data, $network_data);
}
+ # we always allocate a 4MiB disk for cloudinit and with the overhead of the ISO
+ # make sure we always stay below it by keeping the sum of all files below 3 MiB
+ 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');
}
@@ -518,6 +525,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();
@@ -536,7 +544,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.0
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [pve-devel] [PATCH v2 qemu-server 1/1] fix #2429: allow to specify cloud-init vendor snippet via cicustom
2021-08-23 14:34 [pve-devel] [PATCH v2 qemu-server 1/1] fix #2429: allow to specify cloud-init vendor snippet via cicustom Constantin Herold
@ 2021-09-27 13:07 ` Mira Limbeck
0 siblings, 0 replies; 2+ messages in thread
From: Mira Limbeck @ 2021-09-27 13:07 UTC (permalink / raw)
To: pve-devel
I tested your patch with a Ubuntu 20.04 cloudimg. Works fine
The patch looks good except for three small things. See comments inline.
On 8/23/21 4:34 PM, Constantin Herold wrote:
> v2 rebase with master
>
> Any updates on this ? Patch has been available since june
> reference: https://lists.proxmox.com/pipermail/pve-devel/2021-June/049025.html
This text should not be part of the commit message, please add it below
the `---` line.
> Example:
> qm set 9000 --cicustom "vendor=local:snippets/vendor.yaml"
>
> cat << 'EOF' > /var/lib/vz/snippets/vendor.yaml
> runcmd:
> - apt update
> - apt install -y qemu-guest-agent
> - systemctl start qemu-guest-agent
> EOF
>
> Signed-off-by: Constantin Herold <proxmox8914@herold.me>
> ---
^ this marks the end of the commit message
add text not meant for the commit message here
> PVE/QemuServer.pm | 8 ++++++++
> PVE/QemuServer/Cloudinit.pm | 23 ++++++++++++++++++-----
> 2 files changed, 26 insertions(+), 5 deletions(-)
>
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
> index cc73af8..54b1ce9 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -713,6 +713,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 a5474d3..da776a9 100644
> --- a/PVE/QemuServer/Cloudinit.pm
> +++ b/PVE/QemuServer/Cloudinit.pm
> @@ -227,7 +227,7 @@ 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);
the configdrive2 implementation lacks the 3MiB size check
>
> @@ -237,7 +237,8 @@ sub generate_configdrive2 {
> 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');
> }
> @@ -493,7 +494,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);
>
> @@ -501,10 +502,16 @@ sub generate_nocloud {
> $meta_data = nocloud_gen_metadata($user_data, $network_data);
> }
>
> + # we always allocate a 4MiB disk for cloudinit and with the overhead of the ISO
> + # make sure we always stay below it by keeping the sum of all files below 3 MiB
> + 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');
> }
> @@ -518,6 +525,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();
>
> @@ -536,7 +544,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);
> + }
> +
trailing whitespace here
> + return ($user_data, $network_data, $meta_data, $vendor_data);
> }
>
> sub read_cloudinit_snippets_file {
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-09-27 13:11 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-23 14:34 [pve-devel] [PATCH v2 qemu-server 1/1] fix #2429: allow to specify cloud-init vendor snippet via cicustom Constantin Herold
2021-09-27 13:07 ` Mira Limbeck
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