From 4ba6342bc7caf2693b714c1707591f207252cc55 Mon Sep 17 00:00:00 2001 From: daniceexi Date: Wed, 12 Sep 2012 08:23:05 +0000 Subject: [PATCH] fix the issue of clone vm git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/branches/2.7@13774 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- xCAT-server/lib/xcat/plugins/rhevm.pm | 54 ++++++++++++++++++++++++--- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/rhevm.pm b/xCAT-server/lib/xcat/plugins/rhevm.pm index ef7802c52..a6b8de73e 100644 --- a/xCAT-server/lib/xcat/plugins/rhevm.pm +++ b/xCAT-server/lib/xcat/plugins/rhevm.pm @@ -1115,7 +1115,7 @@ sub lsve { displaysrc($callback, $ref_rhevm, $response, "networks", " ", "name=$obj"); } } elsif ($type eq "tpl") { - my ($rc, $id, $stat, $response) = search_src($ref_rhevm, "templates", "$obj"); + my ($rc, $id, $stat, $response) = search_src($ref_rhevm, "templates", "name%3D$obj"); unless ($rc) { displaysrc($callback, $ref_rhevm, $response, "templates", ""); } @@ -1999,7 +1999,7 @@ sub mkvm { my $disele; if ($myvment->{vidproto}) { $disele = "$myvment->{vidproto}"; - } elsif (!$hastpl) { + } else { $disele = "vnc"; } @@ -2025,7 +2025,10 @@ sub mkvm { $hostele = "{host}}\"/>"; } - my $placement_policy = "$hostele$affinity"; + my $placement_policy; + if ($affinity || $hostele) { + $placement_policy= "$hostele$affinity"; + } # set the cluster for the vm my $clusterele; @@ -2173,10 +2176,43 @@ sub mkvm { next; } } + + # if no installnic is specified, set the firstmac to mac.mac + my $firstmac; + + # Search the nic + my %oldmac; + ($rc, undef, $stat, $response) = search_src($ref_rhevm, "vms:nics", "/$vmid/nics"); + unless ($rc) { + my $parser = XML::LibXML->new(); + my $doc = $parser->parse_string($response); + my @nicnodes = $doc->findnodes("/nics/nic"); + foreach my $nic (@nicnodes) { + if (defined($nic->findnodes("name"))) { + my $ethname = getAttr($nic, "name"); + my $mac = getAttr($nic, "mac", "address"); + $oldmac{$ethname} = $mac; + unless($firstmac) { + $firstmac = $mac; + } + } + } + } + foreach my $nic (@nics) { - $success = 0; # format of nic: [networkname:ifname:installnic] my ($nwname, $ifname, $instnic) = split(':', $nic); + + if (defined($oldmac{$ifname})) { + # The nic has been defined, mostly by clone + if ($instnic) { + $upmac->{$node}->{mac} = $oldmac{$ifname}; + } + next; + } + + # start the configuring + $success = 0; my $nwid; ($rc, $nwid, $stat) = search_src($ref_rhevm, "networks", "$nwname"); @@ -2186,6 +2222,7 @@ sub mkvm { xCAT::MsgUtils->message("E", $rsp, $callback); next; } + $api = "/api/vms/$vmid/nics"; $method = "POST"; @@ -2222,7 +2259,10 @@ sub mkvm { my $doc = $parser->parse_string($response); if (defined($doc->findnodes("/nic/mac")->[0])) { my $realmac = $doc->findnodes("/nic/mac")->[0]->getAttribute("address"); - if (! $orgmac && $instnic) { + unless($firstmac) { + $firstmac = $realmac; + } + if ($instnic) { $upmac->{$node}->{mac} = $realmac; } @@ -2242,6 +2282,10 @@ sub mkvm { } } + if (!$upmac->{$node}->{mac} && $firstmac) { + $upmac->{$node}->{mac} = $firstmac; + } + if ($success) { my $rsp; push @{$rsp->{data}}, "$node: Succeeded";