[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [OSSTEST PATCH 3/4] Add nested testcase of installing L2 guest VM
From: "longtao.pang" <longtaox.pang@xxxxxxxxx> This patch is used for installing L2 guest VM inside L1 guest VM. --- sg-run-job | 2 + ts-debian-install | 166 +++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 132 insertions(+), 36 deletions(-) diff --git a/sg-run-job b/sg-run-job index e513bd1..85f7b22 100755 --- a/sg-run-job +++ b/sg-run-job @@ -292,6 +292,8 @@ proc need-hosts/test-nested {} {return host} proc run-job/test-nested {} { run-ts . = ts-debian-hvm-install + host + nested + nested_L1 run-ts . = ts-xen-install + host + nested + nested_build + run-ts . = ts-debian-install + host + nested + amd64 + nested_L2 + run-ts . = ts-guest-destroy + host nested } proc test-guest-migr {g} { diff --git a/ts-debian-install b/ts-debian-install index 58ea743..2ca54e8 100755 --- a/ts-debian-install +++ b/ts-debian-install @@ -22,41 +22,61 @@ use Osstest::TestSupport; tsreadconfig(); -our ($whhost,$gn) = @ARGV; -$whhost ||= 'host'; -$gn ||= 'debian'; +our ($whhost,$gn,$arch,$nested_L2) = @ARGV; +$nested_L2 ||= ''; -our $ho= selecthost($whhost); +if($nested_L2 eq 'nested_L2') { + my $L1_IP = &get_VM_IP($r{'nested_ether'}); + $whhost = "host=$L1_IP"; + $gn ||= 'nested'; + $arch ||= 'amd64'; +} else { + $whhost ||= 'host'; + $gn ||= 'debian'; +} +our $ho= selecthost($whhost); our $ram_mb= 512; our $swap_mb= 1000; our $disk_mb= 10000; - our $guesthost= "$gn.guest.osstest"; our $gho; +our $L2_MAC = select_ether($ho,"L2_ether"); sub prep () { target_install_packages_norec($ho, qw(lvm2 xen-tools)); - - $gho= prepareguest($ho, $gn, $guesthost, 22, - $swap_mb + $disk_mb + 2, - 40); - target_cmd_root($ho, "umount $gho->{Lvdev} ||:"); + unless($nested_L2 eq 'nested_L2') { + $gho= prepareguest($ho, $gn, $guesthost, 22, + $swap_mb + $disk_mb + 2, + 40); + target_cmd_root($ho, "umount $gho->{Lvdev} ||:"); + } } sub ginstall () { - my $arch= $r{"$gho->{Guest}_arch"}; + my $gsuite; + my $kernpath; + my $initrd; + my $kernver; + if($nested_L2 eq 'nested_L2'){ + my $suite= "$c{DebianSuite}"; + $gsuite= defined($suite) ? "--dist=$suite" : ''; + $kernver ||= target_cmd_output_root($ho, 'uname -r'); + $kernpath = "/boot/vmlinuz-$kernver"; + $initrd ||= "/boot/initrd.img-$kernver"; + } else { + my $arch= $r{"$gho->{Guest}_arch"}; + $gsuite= guest_var($gho,'suite',$c{GuestDebianSuite}); + $kernpath = guest_var($gho,'kernel_path',$r{xen_kernel_path}); + $initrd = guest_var($gho,'initrd_path',$r{xen_initrd_path}); + if (!$kernpath) { + $kernver= guest_var($gho,'kernel_ver',$r{xen_kernel_ver}); + $kernver ||= target_cmd_output($ho, 'uname -r'); + $kernpath = "/boot/vmlinuz-$kernver"; + $initrd ||= "/boot/initrd.img-$kernver"; + } + } my $archarg= defined($arch) ? "--arch $arch" : ''; - my $gsuite= guest_var($gho,'suite',$c{GuestDebianSuite}); - - my $kernpath = guest_var($gho,'kernel_path',$r{xen_kernel_path}); - my $initrd = guest_var($gho,'initrd_path',$r{xen_initrd_path}); - if (!$kernpath) { - my $kernver= guest_var($gho,'kernel_ver',$r{xen_kernel_ver}); - $kernver ||= target_cmd_output($ho, 'uname -r'); - $kernpath = "/boot/vmlinuz-$kernver"; - $initrd ||= "/boot/initrd.img-$kernver"; - } if (!$initrd) { $initrd = $kernpath; $initrd =~ s,/vmlinuz-,/initrd.img-, or die "$initrd ?"; @@ -76,23 +96,97 @@ sub ginstall () { fi END } - target_cmd_root($ho, <<END, 2000); - xen-create-image \\ - --dhcp --mac $gho->{Ether} \\ - --memory ${ram_mb}Mb --swap ${swap_mb}Mb \\ - --dist $gsuite \\ - --mirror http://$c{DebianMirrorHost}/$c{DebianMirrorSubpath} \\ - --hostname $gho->{Name} \\ - --lvm $gho->{Vg} --force \\ - --kernel $kernpath \\ - --genpass 0 --password xenroot \\ - $initrd_opt \\ - $archarg + if($nested_L2 eq 'nested_L2') { + target_cmd_root($ho, <<END, 2000); + xen-create-image \\ + --dhcp --mac=$L2_MAC \\ + --size=${disk_mb}Mb --memory=${ram_mb}Mb --swap=${swap_mb}Mb \\ + --mirror=http://$c{DebianMirrorHost}/$c{DebianMirrorSubpath} \\ + --hostname $guesthost \\ + --dir=/testnested \\ + --kernel=$kernpath \\ + --genpass 0 --password xenroot \\ + $initrd_opt \\ + $gsuite \\ + $archarg +END + } else { + target_cmd_root($ho, <<END, 2000); + xen-create-image \\ + --dhcp --mac $gho->{Ether} \\ + --memory ${ram_mb}Mb --swap ${swap_mb}Mb \\ + --dist $gsuite \\ + --mirror http://$c{DebianMirrorHost}/$c{DebianMirrorSubpath} \\ + --hostname $gho->{Name} \\ + --lvm $gho->{Vg} --force \\ + --kernel $kernpath \\ + --genpass 0 --password xenroot \\ + $initrd_opt \\ + $archarg END - my $cfg_xend= "/etc/xen/$gho->{Name}.cfg"; - store_runvar("$gho->{Guest}_cfgpath", $cfg_xend); - store_runvar("$gho->{Guest}_swap_lv", "$gho->{Name}-swap"); + my $cfg_xend= "/etc/xen/$gho->{Name}.cfg"; + store_runvar("$gho->{Guest}_cfgpath", $cfg_xend); + store_runvar("$gho->{Guest}_swap_lv", "$gho->{Name}-swap"); + } +} + +sub start () { + my $cfg_xend= "/etc/xen/$guesthost.cfg"; + my $cmd= toolstack()->{Command}." create ".$cfg_xend; + target_cmd_root($ho, $cmd, 30); + my $domains = target_cmd_output_root($ho, toolstack()->{Command}." list"); + logm("guest state is\n$domains"); +} + +sub get_VM_IP { + my $IP; + my $leases; + my $dhcpf = $c{HostProp_DhcpWatchMethod}; + my @meth = split /\s+/, $dhcpf; + if ($dhcpf =~ m,/,) { + $leases= new IO::File $meth[2], 'r'; + if (!defined $leases) { return "open $meth[2]: $!"; } + } else { + $leases= new IO::Socket::INET(PeerAddr => $meth[2]); + } + while (<$leases>) { + my @lines = <$leases>; + my @newlines = reverse(@lines); + for(my $i=0;$i<@newlines;$i++) { + next if($newlines[$i] !~ /$_[0]/); + for($i;$i<@newlines;$i++) { + next if ($newlines[$i] !~ /^lease\s+(\d+\.\d+\.\d+\.\d+)\s*/); + $IP = $1; + return $IP; + } + last; + } + } +} + +sub check_VM_up { + my ($g_ip) = @_; + my $ping_out = `ping -c 5 $g_ip 2>&1`; + if($ping_out =~ m/5 received/) { + logm("$guesthost is up and ping is OK!"); + } else { + logm("Failed to boot up $guesthost"); + } +} + +sub stop_guest { + logm("shutdown L2 guest!"); + target_cmd_root($ho,toolstack()->{Command}." shutdown -w ".$guesthost,100); } prep(); ginstall(); +if($nested_L2 eq 'nested_L2') { + start(); + logm("waiting for 15's to boot up L2 guest!"); + sleep(15); + my $L2_IP = get_VM_IP("$L2_MAC"); + logm("L2 guest's IP is $L2_IP and try to ping it!"); + check_VM_up($L2_IP); + stop_guest(); +} -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |