FEATURE: host_run support, to simplify provisioning
authorSam <sam.saffron@gmail.com>
Mon, 8 Sep 2014 02:52:04 +0000 (12:52 +1000)
committerSam <sam.saffron@gmail.com>
Mon, 8 Sep 2014 02:52:04 +0000 (12:52 +1000)
launcher

index bc7f2041f4fca25a758317bf8bb8010ba34c0295..cd33f0ba883851f1ada15bacd15a1eb3367ddb1a 100755 (executable)
--- a/launcher
+++ b/launcher
@@ -152,6 +152,37 @@ install_docker() {
   exit 1
 }
 
+host_run() {
+  read -r -d '' env_ruby << 'RUBY'
+  require 'yaml'
+
+  input = STDIN.readlines.join
+  yaml = YAML.load(input)
+
+  if host_run = yaml['host_run']
+    params = yaml['params'] || {}
+    host_run.each do |run|
+      params.each do |k,v|
+        run = run.gsub("$#{k}", v)
+      end
+      STDOUT.write "#{run}--SEP--"
+    end
+  end
+RUBY
+
+  host_run=`cat $config_file | $docker_path run --rm -i -a stdout -a stdin $image ruby -e "$env_ruby"`
+
+  while [ "$host_run" ] ; do
+    iter=${host_run%%--SEP--*}
+    echo
+    echo "Host run: $iter"
+    $iter || exit 1
+    echo
+    host_run="${host_run#*--SEP--}"
+  done
+}
+
+
 set_volumes() {
   volumes=`cat $config_file | $docker_path run --rm -i -a stdout -a stdin $image ruby -e \
         "require 'yaml'; puts YAML.load(STDIN.readlines.join)['volumes'].map{|v| '-v ' << v['volume']['host'] << ':' << v['volume']['guest'] << ' '}.join"`
@@ -269,6 +300,8 @@ run_stop(){
 
 run_start(){
 
+  host_run
+
   if [ ! -e $cidfile ]
      then
        echo "No cid found, creating a new container"
@@ -316,6 +349,9 @@ run_start(){
 }
 
 run_bootstrap(){
+
+  host_run
+
   get_ssh_pub_key
 
   # Is the image available?