$conf->{smbios1} = PVE::QemuServer::generate_smbios1_uuid();
}
+ if (!defined($conf->{vmgenid}) || $conf->{vmgenid} eq '1') {
+ $conf->{vmgenid} = PVE::QemuServer::generate_uuid();
+ }
+
PVE::QemuConfig->write_config($vmid, $conf);
};
# add macaddr
my $net = PVE::QemuServer::parse_net($param->{$opt});
$param->{$opt} = PVE::QemuServer::print_net($net);
+ } elsif ($opt eq 'vmgenid') {
+ if ($param->{$opt} eq '1') {
+ $param->{$opt} = PVE::QemuServer::generate_uuid();
+ }
}
}
}
# auto generate a new uuid
- my ($uuid, $uuid_str);
- UUID::generate($uuid);
- UUID::unparse($uuid, $uuid_str);
my $smbios1 = PVE::QemuServer::parse_smbios1($newconf->{smbios1} || '');
- $smbios1->{uuid} = $uuid_str;
+ $smbios1->{uuid} = PVE::QemuServer::generate_uuid();
$newconf->{smbios1} = PVE::QemuServer::print_smbios1($smbios1);
+ # auto generate a new vmgenid if the option was set
+ if ($newconf->{vmgenid}) {
+ $newconf->{vmgenid} = PVE::QemuServer::generate_uuid();
+ }
+
delete $newconf->{template};
if ($param->{name}) {
eval {
# order matters, as do_import() will load_config() internally
+ $conf->{vmgenid} = PVE::QemuServer::generate_uuid();
$conf->{smbios1} = PVE::QemuServer::generate_smbios1_uuid();
PVE::QemuConfig->write_config($vmid, $conf);
# in the original config.
delete $conf->{machine} if $snap->{vmstate} && !defined($data->{oldmachine});
}
+
+ if ($conf->{vmgenid}) {
+ $conf->{vmgenid} = PVE::QemuServer::generate_uuid();
+ }
}
return;
description => "Select BIOS implementation.",
default => 'seabios',
},
+ vmgenid => {
+ type => 'string',
+ pattern => '(?:[a-fA-F0-9]{8}(?:-[a-fA-F0-9]{4}){3}-[a-fA-F0-9]{12}|[01])',
+ format_description => 'UUID',
+ description => "Set VM Generation ID UUID. Use special value 1 to autogenerate one (API only). Use special value 0 to disable explicitly.",
+ optional => 1,
+ },
};
my $confdesc_cloudinit = {
push @$cmd, '-smbios', "type=1,$conf->{smbios1}";
}
+ if ($conf->{vmgenid}) {
+ push @$devices, '-device', 'vmgenid,guid='.$conf->{vmgenid};
+ }
+
if ($conf->{bios} && $conf->{bios} eq 'ovmf') {
die "uefi base image not found\n" if ! -f $OVMF_CODE;
} else {
print $outfd $line;
}
+ } elsif (($line =~ m/^(vmgenid: )(.*)/)) {
+ # always generate a new vmgenid
+ my $vmgenid = $2;
+ if ($vmgenid ne '0') {
+ $vmgenid = generate_uuid();
+ }
+ print $outfd $1.$vmgenid."\n";
} elsif (($line =~ m/^(smbios1: )(.*)/) && $unique) {
my ($uuid, $uuid_str);
UUID::generate($uuid);
return $firstdisk;
}
-sub generate_smbios1_uuid {
+sub generate_uuid {
my ($uuid, $uuid_str);
UUID::generate($uuid);
UUID::unparse($uuid, $uuid_str);
- return "uuid=$uuid_str";
+ return $uuid_str;
+}
+
+sub generate_smbios1_uuid {
+ return "uuid=".generate_uuid();
}
# bash completion helper