ansible の導入

背景

構成管理ツールである 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 のテストでもありました.

https://bitbucket.org/hkob/matlab_retina_utf8