背景
構成管理ツールである Chef の本を買ったのですが,その後 ansible が簡単だという話を聞き,勉強してみました.せっかくなので,先日の Matlab に関する二つの設定を ansible でできるようにしてみました.
ファイルの準備
ansible では作業の冪等性が求められます.今回,すでに設定してある Matlab 2014a で何もおこらないことを確認しました.まずはインベントリファイルです.設定するホスト一覧を記載します.今回は localhost のみですが,後で研究室のマシンも追加します.
# hostsの中には以下を記述 [client] localhost # ゲストOSのIPを指定する
次に site.yml を記述します.
--- - hosts: all remote_user: admin # 研究室のマシンにはすべて admin がいる sudo: yes # sudo を行う vars: app_path: /Applications/MATLAB_R2014a.app jre_path: "{{app_path}}/sys/java/jre/maci64" jre_dir: "{{jre_path}}/jre" jre_orig_dir: "{{jre_dir}}.orig" system_jre_dir: '/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home' lcdata_dir: "{{app_path}}/bin" lcdata_file: "{{lcdata_dir}}/lcdata.xml" lcdata_sjis: "{{lcdata_dir}}/lcdata_sjis.xml" lcdata_utf8: "{{lcdata_dir}}/lcdata_utf8.xml" tasks: - name: move jre to jre.orig command: creates="{{jre_orig_dir}}" mv {{jre_dir}} {{jre_orig_dir}} - name: link system-jre to jre command: creates="{{jre_dir}}" ln -s {{system_jre_dir}} {{jre_dir}} - name: move lcdata_xml to lcdata_sjis.xml command: creates="{{lcdata_sjis}}" mv {{lcdata_file}} {{lcdata_sjis}} - name: link lcdata_utf8.xml to lcdata.xml command: creates="{{lcdata_file}}" ln -s {{lcdata_utf8}} {{lcdata_file}}
やっていることは以前の記事に書いたものが並んでいるだけです.ただし,creates が設定されているので,すでにファイルがある場合には実行しません.
実行
まず,設定が正しく書けているのか文法をチェックします.
ansible-playbook -i hosts site.yml --syntax-check
エラーがないことが確認できたら,Dry-run してみます.
ansible-playbook -i hosts site.yml -K --check
これで問題なければ実際にテストします.冪等性があるので,コマンドを実行しても何も起こりません.
ansible-playbook -i hosts site.yml -K
ここまで動いたら本番です.app_path をまだ設定していない Matlab 2014b に変更して試してみます(後日談: Matlab2014bの正式版は Retina 対応したので必要なくなりました).
app_path: /Applications/MATLAB_R2014b.app
今度は設定されていないので,上記の設定が変更されていることがわかります.冪等性があるので,その後もう一度実行しても今度は何も変わりません.
今回はせっかくなので,Bitbutcket の公開リポジトリに置いてみました.実は Bitbutcket + sourcetree のテストでもありました.