diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index 1ac81e2f..b479811f 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -708,6 +708,8 @@ __PACKAGE__->register_method({ my $conf = $param; my $arch = PVE::QemuServer::get_vm_arch($conf); + $conf->{meta} = PVE::QemuServer::new_meta_info_string(); + my $vollist = []; eval { $vollist = &$create_disks($rpcenv, $authuser, $conf, $arch, $storecfg, $vmid, $pool, $param, $storage); diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 581d1d6f..80c7060d 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -286,6 +286,15 @@ my $rng_fmt = { }, }; +my $meta_info_fmt = { + 'ctime' => { + type => 'integer', + description => "The guest creation timestamp as UNIX epoch time", + minimum => 0, + optional => 1, + }, +}; + my $confdesc = { onboot => { optional => 1, @@ -707,6 +716,12 @@ EODESCR description => "Configure a VirtIO-based Random Number Generator.", optional => 1, }, + meta => { + type => 'string', + format => $meta_info_fmt, + description => "Some (read-only) meta-information about this guest.", + optional => 1, + }, }; my $cicustom_fmt = { @@ -2115,6 +2130,27 @@ 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( + { + ctime => "". int(time()), + }, + $meta_info_fmt + ); +} + PVE::JSONSchema::register_format('pve-qm-usb-device', \&verify_usb_device); sub verify_usb_device { my ($value, $noerr) = @_; @@ -2136,6 +2172,7 @@ sub json_config_properties { vmstate => 1, runningmachine => 1, runningcpu => 1, + meta => 1, }; foreach my $opt (keys %$confdesc) {