|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [OSSTEST PATCH 3/4] Add nested testcase of installing L2 guest VM
On Wed, Dec 10, 2014 at 04:07:39PM +0800, longtao.pang wrote:
> 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
It would also be possible to run ts-debian-hvm-install as L2. That would
suite this test case better -- it's testing nested HVM.
There's no need to remove the PV test case though.
> }
>
> 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;
> -
Stray blank line.
> 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";
> + }
> + }
To be honest, this looks convoluted. Special casing needs better
explanation.
> 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
As far as I can tell, the only difference is a few variables.
You can set up variables in
if ($nested_L2) {
var = foo;
} else {
var = bar;
}
target_cmd_root($ho, var ... );
Just like you did in previous hunk. Please add in some comments where
necessary.
> 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");
> +}
I think we already have a guest start script?
This hunk is going to break easily if we're more flexible about the
toolstack (we already have a partially working libvirt test case).
> +
> +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");
> + }
> +}
> +
target_ping_check_{up,down} may be suitable?
Wei.
> +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 |