org-babel-tangleをEmacsの外のコマンドラインから実行する方法を調べました。

そして、生成したyamlファイルをansibleにわたして実行することで、実行可能なドキュメントを生成してみました。

関連する過去記事は以下。

Emacs の関数をコマンドラインから実行する

org-modeでかかれたドキュメントをコマンドラインから変換するためのスクリプトを調べた。

以下のサイトから直接スクリプトを引用する。

#!/bin/sh
# -*- mode: shell-script -*-
#
# tangle files with org-mode
#
DIR=`pwd`
FILES=""

# wrap each argument in the code required to call tangle on it
for i in $@; do
    FILES="$FILES \"$i\""
done

emacs -Q --batch \
    --eval "(progn
     (add-to-list 'load-path (expand-file-name \"~/src/org/lisp/\"))
     (add-to-list 'load-path (expand-file-name \"~/src/org/contrib/lisp/\" t))
     (require 'org)(require 'org-exp)(require 'ob)(require 'ob-tangle)
     (mapc (lambda (file)
            (find-file (expand-file-name file \"$DIR\"))
            (org-babel-tangle)
            (kill-buffer)) '($FILES)))" 2>&1 |grep tangled

このスクリプトを実行すると、コマンドラインからorg-babel-tangleが実行できる。

org-banel-tangleとansible-playbookを同時実行

枯れた自分のシェルスクリプトの知識を呼び覚まして、シェルスクリプトを書いた。

Indentをたもつために、以下のおまじないも加えた。

(setq org-src-preserve-indentation t)

virtualboxのインストールスクリプト

以下のようなorgファイルを用意した。

以下のモジュールが必要。

  • virtualbox
  • virtualbox-host-modules
  • qt4
   ---
   - hosts: localhost
     sudo: yes
     tasks:
       - name: Install VirtualBox
         pacman: name=virtualbox,virtualbox-host-modules,qt4

ArchLinuxでゲストOSを動かすためにはKernelモジュールをロードする必要がある。

       - name: Load Kernel Module
         command: modprobe vboxdrv

コマンドラインから実行して、virtualboxをインストール成功!カッコいい。

[tsu-nera]% ./ansible-org-tangled.sh archlinux/virtualbox.org

PLAY [localhost] **************************************************************

GATHERING FACTS ***************************************************************
ok: [localhost]

TASK: [Install VirtualBox] ****************************************************
ok: [localhost]

TASK: [Load Kernel Module] ****************************************************
changed: [localhost]

PLAY RECAP ********************************************************************
localhost                  : ok=3    changed=1    unreachable=0    failed=0

もちろん、org-modeなので、HTMLへの出力とかもできる。

githubにアップするだげで、orgファイルはいい感じに表示されるところがよい。