D&I Blog

このブログでは、今までに培ってきた技術的なことや、得意としている地図のことなどについて、幅広く取り扱っていこうと考えています。積極的に新しいことにチャレンジしたいメンバーもいるので、そのようなトピックも扱っていきたいと思います。

D&I BLOG

To mind the creative destruction

Playbookを活用する。

前回の記事で、管理端末からターゲット端末に対して、Ansibleコマンドを用いて、PING送信やechoコマンドによりシェルを実行してみました。

しかし、一回一回Ansibleコマンドを実行していくのは大変な作業です。「Ansibleコマンドをまとめたバッチシェルを作成できないのか?」と思い浮かぶのですが、Ansibleには Playbook というファイルに、ターゲット端末に対しての命令をまとめて記述することができます。

今回は Playbook についての設定方法と、それを実行してみるところまで紹介したいと思います。

Playbookを書き始める前に

Playbook自身は YAML フォーマットで書いていくことになります。ここで簡単に YAML フォーマットの約束事を紹介します。

  • YAMLファイルを作成する際の文字コードは、UTF-8とします。
  • "---" は、一つのYAMLドキュメントの始まりであるという事を示します。
  • "..."は、一つのYAMLドキュメントの終わりであるという事を示します。
  • "-" は、配列を示します。
  • インデントは全てスペースで行います。タブは使用できません。
  • 要素名と値の間は":"で区切ります。":"のあとには最低1文字の空白を入れておく必要があります。ここでもタブは使用できません。
  • 行頭に"#"を入れることでコメントとして扱われます。なお、複数行をまとめてコメント化するような書き方はありません。
  • ファイル拡張子は、*.yml とします。

以上の事を念頭に置いて、YAMLで表現するデータ構造の例を見てみましょう。

# YAMLでデータ構造を表現してみる例です。
---
- A: 
    - a: apple
      b: banana
- B: 
    - a: orange
      b: strawberry
      c: cherry
...

実際にPlaybookを書いてみましょう

Playbookの書き方が分かったところで、つぎに実際にPlaybooksを書いてみましょう。

今回書いてみるPlaybookは、

  • zipコマンドをインストール

といったことを行って見たいと思います。

環境構成

f:id:d-and-i:20160904164817p:plain

インベントリファイルの配置

以下の内容でインベントリファイルを作成します。(具体的な作成手順は、こちらの記事を参考にしてください。)

192.168.10.2

Playbookの作成

任意の場所に web.yml という名前で、以下の内容のPlaybookを作成してみましょう。

---
- hosts: all   # /etc/ansible/hostsに描かれているすべてのほすとをターゲットにします。
  sudo: yes
  tasks: 
    - name: 共通で使用するパッケージをインストールする。
      yum:
        name=zip
        state=latest
...

Playbookの内容についての説明

  • hosts
    • 実行する先のターゲット端末を指定します。
  • sudo
    • sudoを用いて実行するかどうかを指定します。
  • tasks
    • タスクリストの開始を示します。
  • name
    • 各タスクの名前を示します。ここでは、わかりやすい名前をつけてあげると良いです。
  • yum
    • ansibleのモジュールを示します。ここではyumに対する操作を行うモジュールを使っていますが、他にも色々なモジュールが提供されていますので、近いうちに紹介したいと思います。
  • yum -> name
    • yumで何のパッケージをインストールするかをここで指定します。
  • yum -> state
    • yumでインストールするパッケージのバージョンをここで指定します。

Playbookの文法確認

作成したPlaybookの文法は以下のコマンドで確認が行えます。

$ ansible-playbook --syntax-check web.yml

Playbookの実行

Playbookの実行は、以下のコマンドを使用します。

$ ansible-playbook --ask-become-pass web.yml
SUDO password: 

PLAY [all] ******************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [192.168.10.2]

TASK: [共通で使用するパッケージをインストールする。] **** 
ok: [192.168.10.2]

PLAY RECAP ******************************************************************** 
192.168.10.2                : ok=2    changed=0    unreachable=0    failed=0   

最後の行の PLAY RECAP の部分が実行ステータスとなります。「failed=0」となっていれば、特にエラーはおきていないことを示しています。