LoginSignup
4
7

More than 5 years have passed since last update.

初めてのAnsible(2章:Playbook:始めてみよう)

Last updated at Posted at 2016-11-12

「初めてのAnsible」を読み進めながらのメモ

初めてのAnsible(1章:イントロダクション)の続き

playbook

  • Ansible での 設定管理スクリプト
  • YAML の構文で記述される
  • play のリスト = playbook には1つ以上の play が含まれる

play

  • ホストとタスクを結びつけるもの
  • play には以下が含まれていなければならない

    • 設定するホストの集合
    • それらのホスト上で実行するタスクのリスト

play のオプション

Intro to Playbooks
下記はよく使うやつ

  • name

    • play の内容を示すコメント
    • 実行時に --start-at-task <task_name> を利用する場合には設定しておく必要あり
  • become

    • True に設定すれば sudo でタスクを実行してくれる
  • vars

    • 変数を定義
    • playbook 内で定義した変数は {{ var_name }} という形式でタスク中や設定テンプレート内で使用可能
      • 余談:Ansible はテンプレートエンジンとして Jinja2 を採用

ハンドラ

  • playbook内で定義できる条件付き処理の一つ
  • タスクから通知された場合にのみ実行
    1. モジュールはアクションの実行前にホストの状態をチェックし、変更の必要の有無を調べる
    2. ホストの状態がモジュールの引数にマッチしていれば ok を、差異があった場合には変更を加え changed を返す
    3. changed の場合に、 notify が定義されていればハンドラへ通知する
    4. この時 notify ではハンドラの名前( name )を引数として渡して通知する
  • ハンドラの実行はすべてのタスクが実行された後に 一度だけ
  • ハンドラの実行は通知順ではなく、 play中で書かれた順序

コードでみる

上記でまとめたことを以下のコードで確認してみる

「初めてのAnsible」の GitHubページ より1

ch02/playbooks/web-tls.yml
---
- name: Configure webserver with nginx and tls
  hosts: webservers
  become: True
  vars:
    key_file: /etc/nginx/ssl/nginx.key
    cert_file: /etc/nginx/ssl/nginx.crt
    conf_file: /etc/nginx/sites-available/default
    server_name: localhost

  tasks:
    - name: Install nginx
      apt: name=nginx update_cache=yes cache_valid_time=3600

    - name: create directories for TLS certificates
      file: path=/etc/nginx/ssl state=directory

    - name: copy TLS key
      copy: src=files/nginx.key dest={{ key_file }} owner=root mode=0600
      notify: restart nginx

    - name: copy TLS certificate
      copy: src=files/nginx.crt dest={{ cert_file }}
      notify: restart nginx

    - name: copy nginx config file
      template: src=templates/nginx.conf.j2 dest={{ conf_file }}
      notify: restart nginx

    - name: enable configuration
      file: dest=/etc/nginx/sites-enabled/default src={{ conf_file }} state=link
      notify: restart nginx

    - name: copy index.html
      template: src=templates/index.html.j2 dest=/usr/share/nginx/html/index.html mode=0644

  handlers:
    - name: restart nginx
      service: name=nginx state=restarted

playbook

  • YAML で書かれている
    • 一目瞭然
  • 今回の場合 play はひとつだけ含まれている
    • Configure webserver with nginx and tls という name の play

play

  • play はホストとタスクを結びつけている
    • hosts でどのホストに対してかを明示
    • tasks でそのホストに対してどういったタスクを実行するかを指定

play のオプション

  • name で play や task の内容を示している
  • become: True で sudo で実行するようにしている
    • 今回の場合 Ubuntu サーバーで実行しているため
  • vars で変数を定義し、task 内で {{ key_file }} のように利用している

ハンドラ

  • handlers でハンドラを定義
    • namerestart nginx
  • changed の場合に通知をしたい task で notify: restart nginx を指定
    • ハンドラの name を引数に渡している

  1. 引用したコードのうち以下を修正して掲載 

    sudo: True -> become: True

    バージョン1.9以降は sudo は非推奨になり、become に取って代わられた
    Become (Privilege Escalation)

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7