Changeset 772


Ignore:
Timestamp:
05/03/09 19:52:41 (4 years ago)
Author:
bruno
Message:
  • Adds new features test2vm and test2ve (will require 0.9.7 in VM/VE to really work)
  • standardize call with name 2v everywhere it's appropriate
  • New send2target targets based on VEtest, VEbuild, VEScript and same for VM. Makes tests consistent
File:
1 edited

Legend:

Unmodified
Added
Removed
  • devel/pb/bin/pb

    r769 r772  
    227227 
    228228Snapshot a virtual environment for pb usage 
     229 
     230=item B<test2vm> 
     231 
     232Test a package in a virtual machine 
     233 
     234=item B<test2ve> 
     235 
     236Test a package in a virtual environment 
    229237 
    230238=item B<newver> 
     
    432440    pb_pkg2ssh(); 
    433441} elsif ($action =~ /^build2ve$/) { 
    434     pb_build2v("ve"); 
     442    pb_build2v("ve","build"); 
    435443} elsif ($action =~ /^build2vm$/) { 
    436     pb_build2v("vm"); 
     444    pb_build2v("vm","build"); 
    437445} elsif ($action =~ /^cms2ve$/) { 
    438446    pb_cms2build(); 
    439     pb_build2v("ve"); 
     447    pb_build2v("ve","build"); 
    440448} elsif ($action =~ /^cms2vm$/) { 
    441449    pb_cms2build(); 
    442     pb_build2v("vm"); 
     450    pb_build2v("vm","build"); 
    443451} elsif ($action =~ /^launchvm$/) { 
    444452    pb_launchv("vm",$ENV{'PBV'},0); 
     
    456464    pb_launchv("vm",$ENV{'PBV'},1); 
    457465} elsif ($action =~ /^setupve$/) { 
    458     pb_setup_v("ve"); 
     466    pb_setup2v("ve"); 
    459467} elsif ($action =~ /^setupvm$/) { 
    460     pb_setup_v("vm"); 
     468    pb_setup2v("vm"); 
    461469} elsif ($action =~ /^snapve$/) { 
    462     pb_snap_v("ve"); 
     470    pb_snap2v("ve"); 
    463471} elsif ($action =~ /^snapvm$/) { 
    464     pb_snap_v("vm"); 
     472    pb_snap2v("vm"); 
     473} elsif ($action =~ /^test2ve$/) { 
     474    pb_build2v("ve","test"); 
     475} elsif ($action =~ /^test2vm$/) { 
     476    pb_build2v("vm","test"); 
    465477} elsif ($action =~ /^newproj$/) { 
    466478    # Nothing to do - already done in pb_env_init 
     
    777789        # Do we have additional script to run to prepare the environement for the project ?  
    778790        # Then include it in the pbconf delivery 
    779         foreach my $pbvf ("pbvebuild.pre","pbvmbuild.pre","pbvebuild.post","pbvmbuild.post") { 
    780             if (-x "$ENV{'PBROOTDIR'}/$pbvf") { 
    781                 pb_filter_file("$ENV{'PBROOTDIR'}/$pbvf",$ptr,"$ENV{'PBDESTDIR'}/$pbvf",\%pb); 
    782                 chmod 0755,"$ENV{'PBDESTDIR'}/$pbvf"; 
     791        foreach my $pbvf (<$ENV{'PBROOTDIR'}/pbv*.pre>,<$ENV{'PBROOTDIR'}/pbv*.post>, <$ENV{'PBROOTDIR'}/pbtest*>) { 
     792            if (-x "$pbvf") { 
     793                my $target = "$ENV{'PBDESTDIR'}/".basename($pbvf); 
     794                pb_filter_file("$pbvf",$ptr,$target,\%pb); 
     795                chmod 0755,"$target"; 
    783796            } 
    784797        } 
     
    827840} 
    828841 
     842sub pb_test2pkg { 
     843    # Get the running distro to test on 
     844    my ($ddir, $dver, $dfam, $dtype, $pbsuf, $pbupd, $arch) = pb_distro_init(); 
     845    pb_log(2,"DEBUG: distro tuple: ".join(',',($ddir, $dver, $dfam, $dtype, $pbsuf, $pbupd, $arch))."\n"); 
     846 
     847    # Get list of packages to test 
     848    # Get content saved in cms2build 
     849    my $ptr = pb_get_pkg(); 
     850    @pkgs = @$ptr; 
     851 
     852    # Additional potential repo 
     853    pb_distro_setuprepo($ddir,$dver,$arch,$dtype); 
     854    foreach my $pbpkg (@pkgs) { 
     855        # We need to install the package to test, and deps brought with it 
     856        pb_distro_installdeps(undef,$dtype,$pbupd,$pbpkg); 
     857        pb_system("$ENV{'PBDESTDIR'}/pbtest","Launching test for $pbpkg","verbose"); 
     858    } 
     859} 
     860 
    829861sub pb_build2pkg { 
    830862 
     
    10451077    my $tmout = "vmtmout"; 
    10461078    my $path = "vmpath"; 
    1047     if (($cmt eq "vm") || ($cmt eq "VMScript")) { 
     1079    if ($cmt =~ /^VM/) { 
    10481080        $login = "vmlogin"; 
    10491081        $dir = "pbdefdir"; 
     
    10531085        $host = "vmhost"; 
    10541086        $port = "vmport"; 
    1055     } elsif (($cmt eq "ve")|| ($cmt eq "VEScript")) { 
     1087    } elsif ($cmt =~ /^VE/) { 
    10561088        $login = "velogin"; 
    10571089        $dir = "pbdefdir"; 
     
    10931125            ($pbver,$pbtag) = split(/-/,$vertag); 
    10941126 
    1095             if (($cmt eq "Sources") || ($cmt eq "vm") || ($cmt eq "ve")) { 
     1127            if (($cmt eq "Sources") || ($cmt =~ /V[EM]build/)) { 
    10961128                $src = "$src $ENV{'PBDESTDIR'}/$pbpkg-$pbver.tar.gz $ENV{'PBDESTDIR'}/$pbpkg-$pbver.pbconf.tar.gz"; 
    10971129                if ($cmd eq "") { 
     
    11081140    } 
    11091141 
    1110     if (($cmt eq "vm") || ($cmt eq "ve")) { 
     1142    if ($cmt =~ /V[EM]build/) { 
    11111143        $src="$src $ENV{'PBROOTDIR'}/$ENV{'PBPROJ'}.pb $ENV{'PBDESTDIR'}/$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}.pb $ENV{'PBETC'} $ENV{'PBDESTDIR'}/pbrc $ENV{'PBDESTDIR'}/pbscript"; 
    11121144    } elsif (($cmt =~ /V[EM]Script/) || ($cmt eq "Web")) { 
    11131145        $src="$src $ENV{'PBDESTDIR'}/pbscript"; 
     1146    } elsif ($cmt =~ /V[EM]test/) { 
     1147        $src="$src $ENV{'PBDESTDIR'}/pbtest"; 
    11141148    } elsif ($cmt eq "Announce") { 
    11151149        $src="$src $ENV{'PBTMP'}/pbscript"; 
     
    11371171 
    11381172    my $mac; 
    1139     if (($cmt ne "ve") && ($cmt ne "VEScript")) { 
     1173    if ($cmt !~ /^VE/) { 
    11401174        $mac = "$sshlogin->{$ENV{'PBPROJ'}}\@$sshhost->{$ENV{'PBPROJ'}}"; 
    11411175        # Overwrite account value if passed as parameter 
     
    11441178    } else { 
    11451179        # VE 
    1146         # Overwrite account value if passed as parameter (typically for setup_ve) 
     1180        # Overwrite account value if passed as parameter (typically for setup2ve) 
    11471181        $mac = $sshlogin->{$ENV{'PBPROJ'}}; 
    11481182        $mac = $pbaccount if (defined $pbaccount); 
     
    11511185    my $tdir; 
    11521186    my $bdir; 
    1153     if (($cmt eq "Sources") || ($cmt =~ /V[EM]Script/)) { 
     1187    if (($cmt eq "Sources") || ($cmt =~ /V[EM]Script/) || ($cmt =~ /V[EM]test/)) { 
    11541188        $tdir = $sshdir->{$ENV{'PBPROJ'}}."/src"; 
    11551189        if ((defined $testver) && (defined $testver->{$ENV{'PBPROJ'}}) && ($testver->{$ENV{'PBPROJ'}} =~ /true/i)) { 
     
    11571191            $tdir = $sshdir->{$ENV{'PBPROJ'}}."/test/src"; 
    11581192        } 
    1159     } elsif (($cmt eq "vm") || ($cmt eq "ve")) { 
     1193    } elsif ($cmt =~ /V[EM]build/) { 
    11601194        $tdir = $sshdir->{$ENV{'PBPROJ'}}."/$ENV{'PBPROJ'}/delivery"; 
    11611195        $bdir = $sshdir->{$ENV{'PBPROJ'}}."/$ENV{'PBPROJ'}/build"; 
     
    12761310    # Useless for VE 
    12771311    my $nport; 
    1278     if (($cmt ne "ve") && ($cmt ne "VEScript")) { 
     1312    if ($cmt !~ /^VE/) { 
    12791313        $nport = $sshport->{$ENV{'PBPROJ'}}; 
    12801314        $nport = "$pbport" if (defined $pbport); 
     
    12891323    # should use a hash instead... 
    12901324    my ($shcmd,$cpcmd,$cptarget,$cp2target); 
    1291     if (($cmt ne "ve") && ($cmt ne "VEScript")) { 
     1325    if ($cmt !~ /^VE/) { 
    12921326        my $keyfile = pb_ssh_get(0); 
    12931327        $shcmd = "ssh -i $keyfile -q -o UserKnownHostsFile=/dev/null -p $nport $mac"; 
    12941328        $cpcmd = "scp -i $keyfile -p -o UserKnownHostsFile=/dev/null -P $nport"; 
    12951329        $cptarget = "$mac:$tdir"; 
    1296         if ($cmt eq "vm") { 
     1330        if ($cmt =~ /^VM/) { 
    12971331            $cp2target = "$mac:$bdir"; 
    12981332        } 
     
    13361370 
    13371371    # For VE we need to change the owner manually 
    1338     if ($cmt eq "ve") { 
     1372    if ($cmt =~ /^VE/) { 
    13391373        pb_system("$shcmd \"sudo chown -R $mac $tdir\"","Adapt owner in $tdir to $mac"); 
    13401374    } 
    13411375 
    1342     pb_system("$shcmd \"echo \'cd $tdir ; if [ -f pbscript ]; then ./pbscript; fi ; rm -f ./pbscript\' | bash\"","Executing pbscript on $cptarget if needed","verbose"); 
    1343     if (($cmt eq "vm") || ($cmt eq "ve")) { 
     1376    pb_system("$shcmd \"echo \'cd $tdir ; if [ -x pbscript ]; then ./pbscript; fi ; rm -f ./pbscript\' | bash\"","Executing pbscript on $cptarget if needed","verbose"); 
     1377    if ($cmt =~ /^V[EM]build/) { 
    13441378        # Get back info on pkg produced, compute their name and get them from the VM 
    13451379        pb_system("$cpcmd $cp2target/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'} $ENV{'PBBUILDDIR'} 2> /dev/null","Get package names in $cp2target"); 
    13461380        # For VE we need to change the owner manually 
    1347         if ($cmt eq "ve") { 
     1381        if ($cmt eq "VEbuild") { 
    13481382            pb_system("sudo chown $UID $ENV{'PBBUILDDIR'}/pbgen-$ENV{'PBPROJVER'}-$ENV{'PBPROJTAG'}","Adapt owner in $tdir to $UID"); 
    13491383        } 
     
    13821416    } 
    13831417    pb_log(2,"Before halt, vmexist: $vmexist, vmpid: $vmpid\n"); 
    1384     if ((! $vmexist) && (($cmt eq "vm") || ($cmt eq "VMScript"))) { 
     1418    if ((! $vmexist) && ($cmt =~ /^VM/)) { 
    13851419        # If in setupvm then takes a snapshot just before halting 
    13861420        if ($snapme != 0) { 
     
    14021436        pb_system("$shcmd \"sudo /sbin/halt -p \"; sleep $tm ; echo \'if [ -d /proc/$vmpid ]; then kill -9 $vmpid; fi \' | bash ; sleep 10","VM $v halt (pid $vmpid)"); 
    14031437    } 
    1404     if ((($cmt eq "ve") || ($cmt eq "VEScript")) && ($snapme != 0)) { 
     1438    if (($cmt =~ /^VE/) && ($snapme != 0)) { 
    14051439        ($odir,$over,$oarch) = split(/-/,$v); 
    14061440        my $tpdir = "$vepath->{$ENV{'PBPROJ'}}/$odir/$over/$oarch"; 
     
    14271461 
    14281462    if (not defined $vm1) { 
    1429         ($vm,$all) = pb_get_v($vtype); 
     1463        ($vm,$all) = pb_get2v($vtype); 
    14301464    } else { 
    14311465        @$vm = ($vm1); 
     
    16731707 
    16741708# Return string for date synchro 
    1675 sub pb_date_v { 
     1709sub pb_date2v { 
    16761710 
    16771711my $vtype = shift; 
     
    17081742 
    17091743my $vtype = shift; 
    1710  
    1711 my ($v,$all) = pb_get_v($vtype); 
     1744my $action = shift || "build"; 
     1745 
     1746my ($v,$all) = pb_get2v($vtype); 
    17121747 
    17131748# Send tar files when we do a global generation 
    1714 pb_build2ssh() if ($all == 1); 
     1749pb_build2ssh() if (($all == 1) && ($action eq "build")); 
    17151750 
    17161751my ($vmexist,$vmpid) = (undef,undef); 
     
    17381773    print SCRIPT "# Setup the variables required for building\n"; 
    17391774    print SCRIPT "export PBPROJ=$ENV{'PBPROJ'}\n"; 
    1740     print SCRIPT "# Preparation for pb\n"; 
    1741     print SCRIPT "mv .pbrc \$HOME\n"; 
    1742     print SCRIPT "cd ..\n"; 
     1775 
     1776    if ($action eq "build") { 
     1777        print SCRIPT "# Preparation for pb\n"; 
     1778        print SCRIPT "mv .pbrc \$HOME\n"; 
     1779        print SCRIPT "cd ..\n"; 
     1780    } 
    17431781 
    17441782    # VE needs a good /proc 
     
    17461784        print SCRIPT "sudo mount -t proc /proc /proc\n"; 
    17471785    } 
    1748      
    1749     # Get list of packages to build and get some ENV vars as well 
    1750     my $ptr = pb_get_pkg(); 
    1751     @pkgs = @$ptr; 
    1752     my $p = join(' ',@pkgs) if (@pkgs); 
    1753     print SCRIPT "export PBPROJVER=$ENV{'PBPROJVER'}\n"; 
    1754     print SCRIPT "export PBPROJTAG=$ENV{'PBPROJTAG'}\n"; 
    1755     print SCRIPT "export PBPACKAGER=\"$ENV{'PBPACKAGER'}\"\n"; 
    1756  
    1757     my ($ntpline,$dateline) = pb_date_v($vtype,$v); 
     1786 
     1787    my ($ntpline,$dateline) = pb_date2v($vtype,$v); 
    17581788    print SCRIPT "# Time sync\n"; 
    17591789    print SCRIPT "echo 'setting up date with '"; 
     
    17741804    } 
    17751805 
     1806    # Get list of packages to build/test and get some ENV vars as well 
     1807    my $ptr = pb_get_pkg(); 
     1808    @pkgs = @$ptr; 
     1809    my $p = join(' ',@pkgs) if (@pkgs); 
     1810    print SCRIPT "export PBPROJVER=$ENV{'PBPROJVER'}\n"; 
     1811    print SCRIPT "export PBPROJTAG=$ENV{'PBPROJTAG'}\n"; 
     1812    print SCRIPT "export PBPACKAGER=\"$ENV{'PBPACKAGER'}\"\n"; 
    17761813 
    17771814    # We may need to do some other tasks before building. Read a script here to finish setup 
    1778     if (-x "$ENV{'PBDESTDIR'}/pb$vtype"."build.pre") { 
    1779         print SCRIPT "# Special pre-build instructions to be launched\n"; 
    1780         print SCRIPT pb_get_content("$ENV{'PBDESTDIR'}/pb$vtype"."build.pre"); 
    1781     } 
    1782  
    1783     print SCRIPT "# Build\n"; 
    1784     print SCRIPT "echo Building packages on $vtype...\n"; 
    1785     print SCRIPT "pb $verbose -p $ENV{'PBPROJ'} build2pkg $p\n"; 
     1815    if (-x "$ENV{'PBDESTDIR'}/pb$vtype".".pre") { 
     1816        print SCRIPT "# Special pre-instructions to be launched\n"; 
     1817        print SCRIPT pb_get_content("$ENV{'PBDESTDIR'}/pb$vtype".".pre"); 
     1818    } 
     1819 
     1820    if (-x "$ENV{'PBDESTDIR'}/pb$vtype"."$action.pre") { 
     1821        print SCRIPT "# Special pre-$action instructions to be launched\n"; 
     1822        print SCRIPT pb_get_content("$ENV{'PBDESTDIR'}/pb$vtype"."$action.pre"); 
     1823    } 
     1824 
     1825    print SCRIPT "# $action\n"; 
     1826    print SCRIPT "echo $action"."ing packages on $vtype...\n"; 
     1827 
     1828    if (($action eq "test") && (! -x "$ENV{'PBDESTDIR'}/pbtest")) { 
     1829            die "No test script ($ENV{'PBDESTDIR'}/pbtest) found when in test mode. Aborting ..."; 
     1830    } 
     1831    print SCRIPT "pb $verbose -p $ENV{'PBPROJ'} $action"."2pkg $p\n"; 
     1832 
    17861833    if ($vtype eq "ve") { 
    17871834        print SCRIPT "sudo umount /proc\n"; 
     
    17891836 
    17901837    # We may need to do some other tasks after building. Read a script here to exit properly 
    1791     if (-x "$ENV{'PBDESTDIR'}/pb$vtype"."build.post") { 
    1792         print SCRIPT "# Special post-build instructions to be launched\n"; 
    1793         print SCRIPT pb_get_content("$ENV{'PBDESTDIR'}/pb$vtype"."build.post"); 
     1838    if (-x "$ENV{'PBDESTDIR'}/pb$vtype"."$action.post") { 
     1839        print SCRIPT "# Special post-$action instructions to be launched\n"; 
     1840        print SCRIPT pb_get_content("$ENV{'PBDESTDIR'}/pb$vtype"."$action.post"); 
     1841    } 
     1842 
     1843    if (-x "$ENV{'PBDESTDIR'}/pb$vtype".".post") { 
     1844        print SCRIPT "# Special post-instructions to be launched\n"; 
     1845        print SCRIPT pb_get_content("$ENV{'PBDESTDIR'}/pb$vtype".".post"); 
    17941846    } 
    17951847 
     
    18111863    # and launch the build through pbscript 
    18121864    pb_log(2,"Calling send2target $vtype,$v,$vmexist,$vmpid\n"); 
    1813     pb_send2target($vtype,"$v",$vmexist,$vmpid); 
     1865    pb_send2target(uc($vtype).$action,"$v",$vmexist,$vmpid); 
    18141866} 
    18151867} 
     
    19251977# or only some (if all we publish also tar files in addition to pkgs 
    19261978# 
    1927 sub pb_get_v { 
     1979sub pb_get2v { 
    19281980 
    19291981my $vtype = shift; 
     
    19532005# pb will take your local public SSH key to access 
    19542006# the pb account in the VM later on if needed 
    1955 sub pb_setup_v { 
     2007sub pb_setup2v { 
    19562008 
    19572009my $vtype = shift; 
    19582010 
    1959 my ($vm,$all) = pb_get_v($vtype); 
     2011my ($vm,$all) = pb_get2v($vtype); 
    19602012 
    19612013# Script generated 
     
    19642016foreach my $v (@$vm) { 
    19652017    # Deal with date sync. 
    1966     my ($ntpline,$dateline) = pb_date_v($vtype,$v); 
     2018    my ($ntpline,$dateline) = pb_date2v($vtype,$v); 
    19672019 
    19682020    # Name of the account to deal with for VM/VE 
     
    22522304} 
    22532305 
    2254 # Function to create a snapshot named 'pb' for VMs/VEs 
    2255 sub pb_snap_v { 
     2306# Function to create a snapshot named 'pb' for VMs and a compressed tar for VEs 
     2307sub pb_snap2v { 
    22562308 
    22572309my $vtype = shift; 
    22582310 
    2259 my ($vm,$all) = pb_get_v($vtype); 
     2311my ($vm,$all) = pb_get2v($vtype); 
    22602312 
    22612313# Script generated 
Note: See TracChangeset for help on using the changeset viewer.