実行可能なドキュメント生成!AnsibleとOrg-modeで実現するRun Book Automation(RBA)

はじめに

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

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

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

Environment

  • ArchLinux
  • Emacs 24.3

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

– [[https://wiki.archlinux.org/index.php/VirtualBox_(%E6%97%A5%E6%9C%AC%E8%AA%9E)][VirtualBox (日本語) – ArchWiki]]

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

– virtualbox
– virtualbox-host-modules
– qt4

#+begin_src yaml :tangle yes

– hosts: localhost
sudo: yes
tasks:
– name: Install VirtualBox
pacman: name=virtualbox,virtualbox-host-modules,qt4
#+end_src

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

#+begin_src yaml :tangle yes
– name: Load Kernel Module
command: modprobe vboxdrv
#+end_src

コマンドラインから実行して、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ファイルはいい感じに表示されるところがよい。