- 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サイトをご覧ください。