ぴよ丸水産

週末ファゴッティストによる技術ブログ

【Ansible】Playbookのテストコードサンプル集

はじめに

blue-38.hatenablog.com

前回の記事で、Ansibleロール単体テストツール「Molecule」を触ってみたんですけど、
Playbookのテストコードを書くのは初めてだったので、
ちょっと苦労しました。

果たして美しいテストコードかどうかは置いておいて、
Playbookのテストコードのサンプルをメモとして残しておこうと思います。

前提

Ansibleのバージョンは2.9です。
Moleculeで使う前提なので、以下の記述に続く例として書いてます。

---
- name: Verify
  hosts: all
  tasks:
  - name: タスク名
    #後述する例です

ファイルの存在チェック(例:/etc/httpd/conf/httpd.conf)

  - name: Check that httpd.conf exists
    stat:
      path: /etc/httpd/conf/httpd.conf
    register: result
  - name: Fail when httpd.conf is not exists
    fail:
      msg: "httpd.conf is not exists"
    when: not result.stat.exists

ファイルの内容チェック(例:/etc/httpd/conf/httpd.confにServerRoot /etc/httpdが設定されているか)

  - name: Verify contents in httpd.conf
    wait_for:
      path: /etc/httpd/conf/httpd.conf
      search_regex: "{{ item }}"
      timeout: 5
    with_items:
      - '^ServerRoot /etc/httpd$'
      # 検索したい文字列を配列で列挙

パッケージのインストールチェック(例:httpd)

  - name: Check yum list
    shell: yum list installed | grep httpd
    register: result
  - name: Check httpd is installed
    fail:
      msg: "httpd is not exists"
    when: result.rc != 0

サービスの起動チェック(例:httpd)

  - name: Check Started httpd
    service:
      name: httpd
      state: started
    check_mode: true
    register: status_change
  - name: Fail when httpd is inactive
    fail:
      msg: "not started httpd."
    when: status_change.changed|bool

おわりに

もっといい書き方とか、実はこれはアカンかったとかあれば、
随時更新していこうかと思います。

参考

書籍:インフラCI実践ガイド Ansible/GitLabを使ったインフラ改善サイクルの実現 | 中島 倫明, 佐々木 健太郎, 北山 晋吾, 齊藤 秀喜, 羽深 修 |本 | 通販 | Amazon