mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-08-14 12:30:17 +00:00
move meta information handling to its own module
Like this, it can be used by modules that cannot depend on QemuServer.pm without creating a cyclic dependency. Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
This commit is contained in:
parent
db528966c9
commit
8c4f436b3c
@ -35,6 +35,7 @@ use PVE::QemuServer::ImportDisk;
|
||||
use PVE::QemuServer::Monitor qw(mon_cmd);
|
||||
use PVE::QemuServer::Machine;
|
||||
use PVE::QemuServer::Memory qw(get_current_memory);
|
||||
use PVE::QemuServer::MetaInfo;
|
||||
use PVE::QemuServer::PCI;
|
||||
use PVE::QemuServer::QMPHelpers;
|
||||
use PVE::QemuServer::USB;
|
||||
@ -1205,7 +1206,7 @@ __PACKAGE__->register_method({
|
||||
assert_scsi_feature_compatibility($opt, $conf, $storecfg, $param->{$opt});
|
||||
}
|
||||
|
||||
$conf->{meta} = PVE::QemuServer::new_meta_info_string();
|
||||
$conf->{meta} = PVE::QemuServer::MetaInfo::new_meta_info_string();
|
||||
|
||||
my $vollist = [];
|
||||
eval {
|
||||
|
@ -57,6 +57,7 @@ use PVE::QemuServer::CPUConfig qw(print_cpu_device get_cpu_options get_cpu_bitne
|
||||
use PVE::QemuServer::Drive qw(is_valid_drivename checked_volume_format drive_is_cloudinit drive_is_cdrom drive_is_read_only parse_drive print_drive);
|
||||
use PVE::QemuServer::Machine;
|
||||
use PVE::QemuServer::Memory qw(get_current_memory);
|
||||
use PVE::QemuServer::MetaInfo;
|
||||
use PVE::QemuServer::Monitor qw(mon_cmd);
|
||||
use PVE::QemuServer::PCI qw(print_pci_addr print_pcie_addr print_pcie_root_port parse_hostpci);
|
||||
use PVE::QemuServer::QMPHelpers qw(qemu_deviceadd qemu_devicedel qemu_objectadd qemu_objectdel);
|
||||
@ -281,21 +282,6 @@ my $rng_fmt = {
|
||||
},
|
||||
};
|
||||
|
||||
my $meta_info_fmt = {
|
||||
'ctime' => {
|
||||
type => 'integer',
|
||||
description => "The guest creation timestamp as UNIX epoch time",
|
||||
minimum => 0,
|
||||
optional => 1,
|
||||
},
|
||||
'creation-qemu' => {
|
||||
type => 'string',
|
||||
description => "The QEMU (machine) version from the time this VM was created.",
|
||||
pattern => '\d+(\.\d+)+',
|
||||
optional => 1,
|
||||
},
|
||||
};
|
||||
|
||||
my $confdesc = {
|
||||
onboot => {
|
||||
optional => 1,
|
||||
@ -729,7 +715,7 @@ EODESCR
|
||||
},
|
||||
meta => {
|
||||
type => 'string',
|
||||
format => $meta_info_fmt,
|
||||
format => $PVE::QemuServer::MetaInfo::meta_info_fmt,
|
||||
description => "Some (read-only) meta-information about this guest.",
|
||||
optional => 1,
|
||||
},
|
||||
@ -2058,32 +2044,10 @@ sub parse_rng {
|
||||
return $res;
|
||||
}
|
||||
|
||||
sub parse_meta_info {
|
||||
my ($value) = @_;
|
||||
|
||||
return if !$value;
|
||||
|
||||
my $res = eval { parse_property_string($meta_info_fmt, $value) };
|
||||
warn $@ if $@;
|
||||
return $res;
|
||||
}
|
||||
|
||||
sub new_meta_info_string {
|
||||
my () = @_; # for now do not allow to override any value
|
||||
|
||||
return PVE::JSONSchema::print_property_string(
|
||||
{
|
||||
'creation-qemu' => kvm_user_version(),
|
||||
ctime => "". int(time()),
|
||||
},
|
||||
$meta_info_fmt
|
||||
);
|
||||
}
|
||||
|
||||
sub qemu_created_version_fixups {
|
||||
my ($conf, $forcemachine, $kvmver) = @_;
|
||||
|
||||
my $meta = parse_meta_info($conf->{meta}) // {};
|
||||
my $meta = PVE::QemuServer::MetaInfo::parse_meta_info($conf->{meta}) // {};
|
||||
my $forced_vers = PVE::QemuServer::Machine::extract_version($forcemachine);
|
||||
|
||||
# check if we need to apply some handling for VMs that always use the latest machine version but
|
||||
|
@ -7,6 +7,7 @@ SOURCES=PCI.pm \
|
||||
Helpers.pm \
|
||||
Monitor.pm \
|
||||
Machine.pm \
|
||||
MetaInfo.pm \
|
||||
CPUConfig.pm \
|
||||
CGroup.pm \
|
||||
Drive.pm \
|
||||
|
47
PVE/QemuServer/MetaInfo.pm
Normal file
47
PVE/QemuServer/MetaInfo.pm
Normal file
@ -0,0 +1,47 @@
|
||||
package PVE::QemuServer::MetaInfo;
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use PVE::JSONSchema;
|
||||
|
||||
use PVE::QemuServer::Helpers;
|
||||
|
||||
our $meta_info_fmt = {
|
||||
'ctime' => {
|
||||
type => 'integer',
|
||||
description => "The guest creation timestamp as UNIX epoch time",
|
||||
minimum => 0,
|
||||
optional => 1,
|
||||
},
|
||||
'creation-qemu' => {
|
||||
type => 'string',
|
||||
description => "The QEMU (machine) version from the time this VM was created.",
|
||||
pattern => '\d+(\.\d+)+',
|
||||
optional => 1,
|
||||
},
|
||||
};
|
||||
|
||||
sub parse_meta_info {
|
||||
my ($value) = @_;
|
||||
|
||||
return if !$value;
|
||||
|
||||
my $res = eval { PVE::JSONSchema::parse_property_string($meta_info_fmt, $value) };
|
||||
warn $@ if $@;
|
||||
return $res;
|
||||
}
|
||||
|
||||
sub new_meta_info_string {
|
||||
my () = @_; # for now do not allow to override any value
|
||||
|
||||
return PVE::JSONSchema::print_property_string(
|
||||
{
|
||||
'creation-qemu' => PVE::QemuServer::Helpers::kvm_user_version(),
|
||||
ctime => "". int(time()),
|
||||
},
|
||||
$meta_info_fmt,
|
||||
);
|
||||
}
|
||||
|
||||
1;
|
Loading…
Reference in New Issue
Block a user