[Ansible]Playbookの実行にAnsible Runnerを利用

2022.09.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

  • t_o_dと申します。
  • ansibleを利用してplaybookに記載されたタスクを実行する際にansible-playbookコマンドを利用していました。
  • その後継としてAnsible Runnerというツールが存在するそうです。
  • そこで今回はAnsible Runnerを利用してターゲットサーバーにタスクを実行する方法を記録いたします。

概要

  • Ansible RunnerとはPythonライブラリとして提供されているAnsible実行ツールです。
  • ansible-playbookと比較して便利な点は主に以下です。
    • 実行ログの出力及び保存
      • 通常のログからジョブ履歴等のファイルが作成。
    • フォアグラウンドまたはバックグラウンドでの実行
      • オプションでどちらか選択可能。
    • ディレクトリ構造に沿った実行
      • 指定のディレクトリ構造で読み取る。

環境

  • mac OS Monterey 12.2
  • Docker version 20.10.14

手順

インストール

  • 以下のコマンドでansible-runnerをMacにインストールします。
pip3 install ansible-runner
  • ※他のインストール方法はこちらを参照してください。

必要ディレクトリ及びファイルの作成

  • 任意のディレクトリに以下のコマンドをターミナルで打ち、必要なディレクトリ及びファイルを作成します。
# ディレクトリ作成
mkdir env inventory project

# ファイル作成
touch docker-compose.yml env/settings inventory/hosts project/test.yml
  • 作成後のフォルダ構造は以下です。
.
├── docker-compose.yml
├── env
│   └── settings
├── inventory
│   └── hosts
└── project
    └── test.yml

ターゲットサーバーの準備

  • お試しなのでターゲット(操作対象)のサーバーをコンテナとして用意します。
  • まず作成したdocker-compose.ymlの中身を以下とします。
version: '3.7'
services:
  sample01:
    image: rockylinux/rockylinux 
    container_name: sample01
    restart: always
    tty: true
  sample02:
    image: rockylinux/rockylinux 
    container_name: sample02
    restart: always
    tty: true
  • 次に以下のコマンドをターミナルで打ち、必要なコンテナを起動します。
# コンテナをバックグラウンドで起動
docker compose up -d

# 起動確認
docker ps
  • ターゲットサーバーとして2台起動したため、以下のコマンドでコンテナ内に入れるか確認します。
# sample01に入る。exitで抜けられる。
docker compose exec sample01 bash

# sample02に入る。exitで抜けられる。
docker compose exec sample02 bash

インベントリファイルの記述

  • 実行に必要なインベントリファイルはinventoryディレクトリに配置します。
  • 作成したinventory/hostsの中身を以下とします。
[sample_servers]
sample01
sample02

runnner設定ファイルの記述

  • 実行に必要な設定ファイルはenvディレクトリの中に配置します。
  • 作成したenv/settingsの中身を以下とします。
    • job_timeout : 最大実行時間。超えると実行終了。
    • 他の設定はこちらを参照
---
job_timeout: 600

Playbookファイルの記述

  • 実行に必要なPlaybookファイルはprojectディレクトリの中に配置します。
  • 作成したproject/test.ymlの中身を以下とします。
    • タスクとして「フォルダ作成」「パッケージインストール」を設定しています。
---
- hosts: sample_servers
  connection: docker
  tasks:
    - name: crate folder
      file:
        path: ~/work
        state: directory
        mode: 0755
    - name: install package
      yum:
        name: [git,jq]
        state: present

Playbook実行

  • ここまでで必要な環境及びファイルは整ったので、以下のコマンドを打ち、Playbookのタスクを実行します。
    • project/test.ymlと指定せずとも自動でproject内のPlaybookを読み込みます。
ansible-runner run . -p test.yml

確認

  • エラー出力なく実行できていたら以下のコマンドを打ち、実行ログファイルが作成されているか確認します。
    • stdoutやstatus等のファイルがあります。
ls ~/artifacts
  • また以下のコマンドを打ち、タスクが実行されているか確認します。
# コンテナ内に入る。sample02でも確認する
docker compose exec sample01 bash

# フォルダ確認
ls ~/work

# パッケージ確認
git --version
jq -V
  • 問題なく確認できていたら完了です。

まとめ

  • 抽象化されているので非常に管理しやすいように感じました。
  • またログ出力機能もあり、証跡や調査等に捗ると感じました。

参考

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。