Ansible、ソースインストールする際のPalybookの書き方

16 Nov 2014, 15:32 By mosuke5

こんにちは。@mosuke5です。
最近、Ansibleを使い始めました、yumやapt-getでインストールできるものは記述も簡単でいいのですが、 どうしてもソースインストールが必要な場合があります。ソースコードでのインストールは結構手間がかかるので、ソースインストールを行う際のPlaybookの書き方と注意点をまとめました。

まず、ソースインストールを行うには以下のフローを行うと仮定します。

  1. ソースファイルの取得(tarで固められていると仮定)
  2. tarファイルの解凍
  3. 解答してできたディレクトリへ移動
  4. configure
  5. make
  6. make install

また、Ansibleの運用では通常、何回も同じPlaybookを対象のサーバに実行していくため、 すでにインストールされている場合は、インストールをスキップする必要があります。いわゆる冪等性です。 yumやapt-getで管理されていれば上記を心配することはないのだが、やはりソースインストールだとこの壁があります。

今回は例として、ubuntu13にemacsをソースインストールするのを例としてみた。

環境

【Ansible実行側】

  • さくらVPSの1G
  • OS:Centos 7
  • IPアドレス:192.168.33.1

【設定対象側】

上記さくらVPS上にたてたVagrantの仮想サーバ

  • OS: Ubuntu 13.10
  • IPアドレス:192.168.33.100

Playbook

以下playbookの例です。重要なのは、何を判断してインストール済みとするかです。
※本記事は2014年にかかれたもので、Ansibleのバージョンが古いです。最新の書き方にそぐわない可能性があるので注意してください。

---
- hosts: 192.168.33.100
  user: vagrant
  sudo: yes

  vars:
    src_dir: /usr/local/src
    emacs_ver: emacs-23.4

  tasks:
   ## emacsのソースファイルを取得済みか確認
   - name: check exist emacs source file
     command: ls -l {{src_dir}}/{{emacs_ver}}.tar.gz
     ignore_errors: True
     register: result1

   ## emacsのソースファイル取得。ただし、すでに取得済みならスキップ
   - name: get emacs source file
     command: chdir={{src_dir}} wget http://mirror.jre655.com/GNU/emacs/{{emacs_ver}}.tar.gz
     when: result1|failed

   ## emacsのソースインストールを解凍
   - name: get emacs source file
     command: chdir={{src_dir}} tar xvf {{emacs_ver}}.tar.gz
     when: result1|failed

   ## emacsがインストールされているか確認
   #  確認基準はemacsコマンドのpathが通っているかで判断した
   - name: check emacs install
     command: which emacs
     ignore_errors: True
     register: result2

   ## emacsのインストール。ただしすでにemacsがインストールされいたらスキップ
   - name: expand emacs src
     command: chdir={{src_dir}} tar xvf {{emacs_ver}}.tar.gz
     when: result2|failed

   - name: comfigure emacs
     command: chdir={{src_dir}}/{{emacs_ver}} ./configure
     when: result2|failed

   - name: make emacs
     command: chdir={{src_dir}}/{{emacs_ver}} make
     when: result2|failed

   - name: install emacs
     command: chdir={{src_dir}}/{{emacs_ver}} make install
     when: result2|failed
 

まとめ

考えてほしいところは、2回目以降の実行時にエラーにならないようにどうすればいいかということです。 なにを確認して、インストール済みと判断するのか、インストールがされていればどうすればいいのか。 ここが一番重要なポイントです。
この例は、非常にシンプルな例であるので、実際のユースケースに合わせて上の点を判断してもらえればと思います。

フィードバック・相談(β)

本記事に対して、執筆者にフィードバックや聞きたいことがあればこちらのフォームからご記入ください。執筆者に問い合わせてみる

このエントリーをはてなブックマークに追加
comments powered by Disqus