Steven, Nico:

Problem:
   How to execute a function instead of binary

Solutions:

   1)
      (
         cat $lib/*
         cat bin/cdist-config
         echo $function $args
      ) | ssh foo

      Works partly, does not work for export = ...
      Needs to copy over lib every time again!

   2)
      scp $dir/lib.sh root@foo:/tmp/lib.sh
      cat << DONE | ssh root@foo sh
      source /tmp/lib.sh
      export foo=bla
      function args
      DONE

      Caches lib directory

   3) follow up to 1)
      __run_remote()
      {
         cat << eof | ssh foo

         . /cdist-config
         "$@" # NOT USABLE, no export = export = lines possible!

         eof

   4) final solution
      - write for every remote job a new function
      - this functions prepares env + reuses ssh header

      __cdist_remote_explorer()
      {
         cat << eof
         $__cdist_remote_header
         export foo1=bar
         export foo2=bar
         export foo3=bar

         "$@"
         eof | __cdist_ssh
      }


Problems found and solved:

   - remote shell cannot work due to multi line variable export
   - caching library directory with scp
   - create function for every remote action
      -> prepares environment