org-babel-tangleをEmacsの外のコマンドラインから実行する方法を調べました。
そして、生成したyamlファイルをansibleにわたして実行することで、実行可能なドキュメントを生成してみました。
関連する過去記事は以下。
- org-modeで書いたテキストをPandocでRestructured Textに変換する | Futurismo
- Web操作手順書を自動生成!Emacs org-babelで実現するRun Book Automation(RBA) | Futurismo
- 自分のデスクトップ環境の歴史を記録する!ansibleで設定ファイルをクラウド管理する方法 | Futurismo
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
- 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ファイルはいい感じに表示されるところがよい。