インフィニットループ 技術ブログ

2013年08月06日 (火)

著者 : maki

はじめてAnsibleを使う人が知っておきたい7つのモジュール

こんにちは。makiです。
先月札幌で開催したPHP Matsuri 2013 では、Ansibleについて LT 発表してきました。
発表スライドはSlideshareにおいてあります。

Ansibleとは

  • 構成管理ツール(ChefやPuppet等と同じ)
  • playbookという脚本ファイル(Chefでいうrecipe)にやりたいことをyaml形式で書いて実行するだけ
  • 別にVagrantとの関係が必須じゃない
  • vagrant provisionよりもansible-playbookを単体実行のほうが便利なことも多い

READMEには設計思想としてこのように書かれています。

  • とってもシンプルなセットアップ
  • デフォルトで超速くて並列処理ができる
  • サーバーもデーモンもいらない。sshdだけ
  • クライアントのboxに追加で必要なものなどない
  • どんな言語でもモジュールを書くことができる
  • スクリプト作成のために用意されたステキなapi
  • rootユーザでなくても使える
  • とっても簡単な設定管理で利用できるよ

難しいことは何もなく、我々がやることはyaml形式の設定ファイルを書いて実行するだけです。
今回は、120以上ある標準モジュールの中から、特によく使うものを7つ厳選してご紹介します。

command

shell コマンドを実行したい場合に使用。 <, >, | を使用する場合は、shell の方を使う。

パラメータ 選択肢 説明
chdir コマンドの実行前に 指定ディレクトリへcdする
creates 指定のファイル名が存在するなら、commandの実行をスキップする
removes 指定のファイル名が存在しないなら、commandの実行をスキップする

例:

- command: /usr/bin/make_database.sh arg1 arg2 creates=/path/to/database

file

ファイル、シンボリックリンク、ディレクトリの属性設定・削除を行う
copy,template,assembleモジュールが同様のパラメータを指定可能

パラメータ 選択肢 説明
path ファイルのパス
mode パーミッション設定
owner 所有者
group グループ
recurse yes
no
再帰的(state=directoryのみ有効)
src state=linkのみ
state file
link
directory
hard
absent

例:

- file: path=/etc/foo.conf owner=foo group=foo mode=0644
- file: src=/file/to/link/to dest=/path/to/symlink owner=foo group=foo state=link

copy

ローカル端末のfilesディレクトリにあるsrcのファイルを リモートのdestにコピーする

パラメータ 選択肢 説明
src コピー元(ローカル)
dest コピー先(リモート)
others fileモジュールのパラメータ(owner,group,mode等)が指定可能

例:

copy: src=/srv/myfiles/foo.conf dest=/etc/foo.conf owner=foo group=foo mode=0644

template

  • ローカル端末のtemplatesディレクトリにあるsrcのファイルをテンプレートとして、リモートのdestにファイルを生成する
  • テンプレートエンジンとしてjinja2 が使われている
  • varsで指定した値を挿入することが可能
  • {{ user_name }} もしくは ${{user_name}} の形式
パラメータ 選択肢 説明
src コピー元(ローカル)
dest コピー先(リモート)
others その他fileモジュール同様のパラメータを指定可能

例:

- template: src=/mytemplates/foo.j2 dest=/etc/file.conf owner=bin group=wheel mode=0644

get_url

http経由でファイルをダウンロードする場合に使用する

パラメータ 選択肢 説明
url DLしたいファイルのurl
dest ファイルの保存先
others その他fileモジュール同様のパラメータを指定可能

例:

- get_url: url=http://example.com/path/file.conf dest=/etc/foo.conf mode=0440

git

git clone の処理を行う

パラメータ 選択肢 説明
repo リポジトリ(ssh,https等が利用可能)
dest clone先
depth 履歴取得数 最低1
update yes
no
yes(デフォルト値)の場合pullも行う

例:

- git: repo=ssh://git@github.com/mylogin/hello.git dest=/home/mylogin/hello

yum

yumコマンドを利用してパッケージをインストールする

パラメータ 選択肢 説明
name パッケージ名
state present
latest
absent
present:インストール済みならそのまま
latest:新しいのがあればupgrade
absent:パッケージ削除

例:

- yum: name=tree state=present
- yum: name=vim state=latest

※Debian系(Debian/Ubuntu)の場合はaptモジュールが用意されている

まとめ

Ansibleが初めての方でもこれだけ覚えれば最初のステップクリアと言って良いでしょう。
公式ドキュメントには他にも多くの便利なモジュールが掲載されています。
今回紹介したモジュールに慣れてきたら、一度ドキュメントを読むと良いと思います。
Ansible Modules
最後にAnsibleについて学ぶ際に参考にしたサイトを紹介します。

Yaml形式の記述はルールが単純なので、2つ3つタスクを書いてみるとすぐに慣れると思います。
Chef の Recipe(Ruby) に挫折してしまった方も、もう一度挑戦してみませんか?

ブログ記事検索

このブログについて

このブログは、札幌市・仙台市の「株式会社インフィニットループ」が運営する技術ブログです。 お仕事で使えるITネタを社員たちが発信します!