Changeset 1495 in genappalpha


Ignore:
Timestamp:
Jul 23, 2018, 11:15:19 AM (2 years ago)
Author:
ehb
Message:

Docker runs locally thru genapp with run directory mounted on container

Files:
6 edited

Legend:

Unmodified
Added
Removed
  • bin/genapp_run.pl

    r1492 r1495  
    892892                if ( $doexec eq 'true' ) {
    893893                    my $cmd = "bash $fo";
     894                    $fo = "./$fo" if $fo !~ /\.sh$/;
    894895                    print "executing: $cmd\n";
    895896                    print `$cmd`;
     
    897898                if ( $doexec eq 'atend' ) {
    898899                    my $cmd = "cd output/$l; bash $use_output";
     900                    $cmd = "cd output/$l; ./$use_output" if $use_output !~ /\.sh$/;
    899901                    push @post_cmds, $cmd;
    900902                    print "pushing $cmd to post processing commands\n";
  • languages/docker.json

    r1493 r1495  
    55    "assembly"    : [
    66        {
    7             "frequency"  : "once"
    8             ,"output"     : "build_docker.pl"
    9             ,"inputs"     : [
     7            "frequency"      : "once"
     8            ,"setexecutable" : "true"
     9            ,"execute"       : "atend"
     10            ,"output"        : "build_docker.pl"
     11            ,"inputs"        : [
    1012                { "build_docker_header.pl"   : "once" }
    1113                ,{ "build_docker_module.pl"  : "menu:modules:id" }
  • languages/docker/build_docker_footer.pl

    r1494 r1495  
    22
    33foreach my $mod ( keys %dependencies ) {
    4     print "checking $mod\n";
    5     if ( $dependencies{ $mod } =~ /^__dependencies__/ ) {
     4    my $menu = $menus{ $mod };
     5    print "checking $menu:$mod\n";
     6    if ( $dependencies{ $mod } =~ /^_{2}dependencies__/ ) {
    67        print "no dependencies\n";
    78        $error .= "Module '$mod' : no dependencies defined, can not create docker container.\n";
     
    3637        my $v = $$entry{$k};
    3738        $k = lc( $k );
    38         print "k $k\n";
    3939        if ( ref( $v ) ne 'ARRAY' ) {
    4040            my @v = ( $v );
    4141            $v = \@v;
    4242        }
    43         print "v " . ref( $v ) . "\n";
    4443        # create command to build and post (?) dockerfile
    4544
    4645        for ( my $j = 0; $j < @$v; ++$j ) {
    47             print "\$v[$j] = $$v[$j]\n";
    4846            my $val = $$v[$j];
    4947            if ( length( ref( $val ) ) ) {
     
    5250                next;
    5351            }
    54             print "length ref val = " . length( ref( $val ) ) . "\n";
    5552            if ( $k eq 'base' ) {
    5653                if ( $hasbase ) {
     
    6057                }
    6158                $out .= "FROM $val\n";
    62                 $out .= "WORKDIR $workdir\n";
     59                $out .= "WORKDIR $bindir\n";
    6360                $has_base++;
    6461                next;
     
    6764                $warn .= "No 'base' entry found in first position, defaulting to 'ubuntu'\n";
    6865                $out .= "FROM ubuntu\n";
    69                 $out .= "WORKDIR $workdir\n";
     66                $out .= "WORKDIR $bindir\n";
    7067                $has_base++;
    7168                next;
     
    8683                $dest =~ s/^.*\///g;
    8784                $out .= "COPY $dest $dest\n";
     85                $val = "$executable_path/$val" if $val !~ /^\//;
    8886                push @copys, $val;
    8987                next;
     
    105103    # add CMD
    106104
    107     $out .= "CMD [\"./$$modjson{'executable'}\"]\n";
     105    ## always run in $rundir ?
     106    $out .= "WORKDIR $rundir\n";
     107
     108    ## straight form:
     109    ## $out .= "CMD [\"$bindir/$$modjson{'executable'}\"]\n";
     110
     111    ## abaco MSG form:
     112    $out .= "CMD $bindir/$$modjson{'executable'} `echo \$MSG`\n";
    108113
    109114    # write dockerfile
    110     if ( !-d $mod ) {
    111         if ( -e $mod ) {
    112             $error .= "File $mod exists in output folder, but it not directory\n";
     115    if ( !-d $menu ) {
     116        if ( -e $menu ) {
     117            $error .= "File $menu exists in output folder, but is not a directory\n";
    113118            next;
    114119        }
    115         if ( !mkdir $mod ) {
    116             $error .= "Could not create subdir $mod $!\n";
     120        if ( !mkdir $menu ) {
     121            $error .= "Could not create subdir $menu $!\n";
     122            next;
     123        }
     124    }
     125
     126    my $destdir = "$menu/$mod";
     127    if ( !-d $destdir ) {
     128        if ( -e $destdir ) {
     129            $error .= "File $destdir exists in output folder, but is not a directory\n";
     130            next;
     131        }
     132        if ( !mkdir $destdir ) {
     133            $error .= "Could not create subdir $destdir $!\n";
    117134            next;
    118135        }
    119136    }
    120137       
    121     my $df = "$mod/Dockerfile";
     138    my $df = "$destdir/Dockerfile";
    122139    my $fh;
    123140    if ( !( open $fh, ">$df" ) ) {
     
    129146
    130147    # do copies
    131     $cmd = "cp " . ( join " ", @copys ) . " $mod/";
     148    $cmd = "cp " . ( join " ", @copys ) . " $destdir/";
    132149    print "$cmd\n";
    133     print `$cmd`;
     150    system( $cmd );
     151
     152    # build containers
     153    $cmd = "cd $destdir && docker build -t genapp___application___${menu}_${mod} .";
     154    print "$cmd\n";
     155    system( $cmd );
    134156}
    135157   
  • languages/docker/build_docker_header.pl

    r1494 r1495  
    11#!/usr/bin/perl
     2
     3$| = 1;
    24
    35{
     
    4244my %dependencies;
    4345my %module_json;
     46my %menus;
     47
    4448my $executable_path = "__executable_path:docker__";
    45 my $workdir = "/genapp/run";
     49my $bindir          = "/genapp/bin";
     50my $rundir          = "/genapp/run";
    4651
    4752my $wdir = $0;
  • languages/docker/build_docker_module.pl

    r1493 r1495  
    1111    ;
    1212
     13$menus{ "__menu:modules:id__" } = "__menu:id__";
     14
  • languages/html5/base.php

    r1373 r1495  
    337337   if ( strlen( $cmdprefix ) > 1 ) {
    338338      $fileargs = 1;
     339      $cmdprefix = str_replace( "_" . "_application__", "__application__", $cmdprefix );
     340      $cmdprefix = str_replace( "_" . "_menu:id__", "__menu:id__", $cmdprefix );
     341      $cmdprefix = str_replace( "_" . "_menu:modules:id__", "__menu:modules:id__", $cmdprefix );
     342      $cmdprefix = str_replace( "_" . "_rundir__", $dir, $cmdprefix );
    339343   }
    340344}
     
    851855         $cmd .= " '$json'";
    852856      } else {
    853           if ( strlen( $cmdprefix ) ) {
    854               $register = "perl $adir/util/ga_regpid_udp.pl __application__ " .
    855                   $GLOBALS['resource'] . " " .
    856                   $_REQUEST[ '_udphost' ] . " " .
    857                   $_REQUEST[ '_udpport' ] . " " .
    858                   $_REQUEST[ '_uuid' ] . " " .
    859                   '$$';
    860 
    861               if ( isset( $bigargs ) ) {
    862                   $cmd = "$cmdprefix '$register;cd $dir;$cmd @$logdir/_args_" . $_REQUEST[ '_uuid' ] . "'";
     857          if ( substr( $cmdprefix, 0, 6 ) == "docker" ) {
     858              $cmd = "$cmdprefix '$json'";
     859          } else {
     860              if ( strlen( $cmdprefix ) ) {
     861                  $register = "perl $adir/util/ga_regpid_udp.pl __application__ " .
     862                      $GLOBALS['resource'] . " " .
     863                      $_REQUEST[ '_udphost' ] . " " .
     864                      $_REQUEST[ '_udpport' ] . " " .
     865                      $_REQUEST[ '_uuid' ] . " " .
     866                      '$$';
     867
     868                  if ( isset( $bigargs ) ) {
     869                      $cmd = "$cmdprefix '$register;cd $dir;$cmd @$logdir/_args_" . $_REQUEST[ '_uuid' ] . "'";
     870                  } else {
     871                      $cmd = "$cmdprefix '$register;cd $dir;$cmd \"\$(< $logdir/_args_" . $_REQUEST[ '_uuid' ] . ")\"'";
     872                  }                 
    863873              } else {
    864                   $cmd = "$cmdprefix '$register;cd $dir;$cmd \"\$(< $logdir/_args_" . $_REQUEST[ '_uuid' ] . ")\"'";
    865               }                 
    866           } else {
    867               if ( isset( $bigargs ) ) {
    868                   $cmd = "$cmd @$logdir/_args_" . $_REQUEST[ '_uuid' ];
    869               } else {
    870                   $cmd = "$cmd \"\$(< $logdir/_args_" . $_REQUEST[ '_uuid' ] . ")\"";
     874                  if ( isset( $bigargs ) ) {
     875                      $cmd = "$cmd @$logdir/_args_" . $_REQUEST[ '_uuid' ];
     876                  } else {
     877                      $cmd = "$cmd \"\$(< $logdir/_args_" . $_REQUEST[ '_uuid' ] . ")\"";
     878                  }
    871879              }
    872           }             
     880          }
    873881      }
    874882    } else {
Note: See TracChangeset for help on using the changeset viewer.