Thanks for the useful example. I will take a look. Didn't know about org-sbe!
-s- On Mon, 15 Jun 2020 15:52:16 -0400 Douglas Perrin <doug2...@gmail.com> wrote: > Hi Salomon Turgman, > I do this a lot and have had success using a combination of #+SETUPFILE to > bring in names and configuration, and org-sbe to do initialization. I mix > emacs vars and org names in my source headers with back quoting. > > The following example has a template file containing user/local > information. This is brought into the example file, on load, through #:eval > calling org-babel-lob-ingest and org-sbe, in addition, parameters are > pulled in with #+SETUPFILE and the same template file name. The end result > for this example is a running docker image with access to local paths and > "remote" execution via tramp. More complex orchestration and actions in the > template are certainly possible using org-sbe calls in the init elisp > source blocks but hopefully, this shows the flavor of what can be done. > > In addition to avoiding code duplication, I have found this to be very > effective when my group is all working from the same org file (via git) but > everyone has their own template file with credentials, local paths, and org > more preferences (ie showstars). > Regards, > Doug > > --------------------------------------------------------------------------------------------------------------------------------- > TemplatingExample.org > --------------------------------------------------------------------------------------------------------------------------------- > #+SETUPFILE: Template-Loader.org > > * Init Code, run when file is opened > #+name: Execute-On-Load > #+begin_src elisp :results output > ;; for this the container and image have the same name > (setq *DockerName* "ContanerName") > #+end_src > > * Run Contaner > #+begin_src bash :results raw drawer :var DockerName=`,*DockerName* > DockerHubUID=`,*DockerHubUID* containerName=`,*DockerContainer* > LocalWorkPath=`,*LocalWorkPath* LocalDataPath=`,*LocalDataPath* > docker run --rm -d \ > -v $LocalWorkPath:/root/Workdir \ > -v $LocalDataPath:/root/Data \ > --name $DockerName $DockerHubUID/$DockerName bash -c "tail -f > /dev/null" > #+end_src > > * run IN contaner > #+begin_src bash :results output :dir (concat "/docker:" `,*DockerName* > ":/root/Workdir/") > ls > #+end_src > > # Local Variables: > # eval: (org-babel-lob-ingest "Template-Loader.org") > # eval: (org-sbe "Init-Template") > # eval: (org-sbe "Execute-On-Load") > # End: > > --------------------------------------------------------------------------------------------------------------------------------- > Template-Loader.org > --------------------------------------------------------------------------------------------------------------------------------- > #+STARTUP: showstars > #+PROPERTY: header-args :mkdirp yes > > #+name: Init-Template > #+begin_src emacs-lisp :results none > ;; This is called expecitly via org-sbe in the buffer that will uses the > templating > (setq *DockerHubUID* "MyUserName") > (setq *LocalWorkPath* "/run/desktop/mnt/host/c/Users/.....") > (setq *LocalDataPath* "/run/desktop/mnt/host/d/devData/") > > ;; ingest + SBE can be used to bring in a hierarchy of templates > (org-babel-lob-ingest "./GroupTools/GeneralORGTools.org") > (org-sbe "GeneralORGTools.org") > > #+end_src -- Salomon Turgman <sturg...@gmail.com>