たそ@ITインフラ初心者

taso@初心者エンジニア

新卒2年目 エンジニアが適当に語るブログてす

ansible-navigatorを使う 環境構築編

はじめに

こんにちは たそ(@taso_int)です。
久しぶりです。更新すると言いながら更新できずにすみません。
希望のプロフェッショナル職になり、発信したいのに出来ず…
皆さんAnsibleでPlaybookを実行する時何を打ちますか?
ansible-playbookコマンドですかね。
もしかしたらansible-navigator runかも?
今回はAnsible navigatorについて紹介したいと思います。 長いので3部構成にします。

Ansible navigatorとは?

ここ最近Ansibleの実行環境について新しいアップデートが行われました。

こちらの記事がとても参考になるので時間がある方はぜひ
https://rheb.hatenablog.com/entry/ansible_future_2021_review

簡単に纏めるとAnsibleの実行環境がPythonの仮想環境であるvenvではなく、
コンテナ化(execution environmentと呼ばれる)するようになりました。
そこで前に紹介したansible-builderがコンテナイメージを作成します。

ここでPlaybookの実行するために
Ansible navigatorが登場します。(ようやく名前が出た)

Ansible navigator と Ansible runnerの違い

「おいおい Ansible runnerで実行するんじゃないの?」と
その通りで、Ansible runnerでPlaybookを動かします。
Ansible navigatorは以下の内容ができます。
(触ったばっかりなのでもっと出来ることあると思います)

・collectionやpythonパッケージの管理
・inventoryの管理
・コンテナへ追加の設定
・Playbookの実行
・モジュールのドキュメント閲覧
・リプレイ機能

Ansible navigatorはバックエンドにAnsible runnerを持っており、
Playbookの実行ができます。
またTUI(テキストユーザインタフェース)になっており、CLIより目視で操作ができます。

公式のドキュメントも置いておきます。結構分かりやすいです。
https://access.redhat.com/documentation/ja-jp/red_hat_ansible_automation_platform/2.0-ea/html/ansible_navigator_creator_guide/index

インストールまで

環境
AWS
os:RHEL
m5.large

今回はvenvからインストールをしたいと思います。

venvからpipでインストールします。 やり方(rootで)

python 3.9のインストール
dnf install python39
python3.9 --version ←3.9代がでればOK

venv作成
python3.9 -m venv /opt/venv
source /opt/venv/bin/activate
python --version ←3.9代がでればOK
pip install --upgrade pip
pip install ansible-navigator

rpmからインストール
rpmからインストールするにはライセンスが必要となります。
(AAPをインストールする時と同じ操作)
今回はRed HatさんのRed Hat Developer Programに参加し、
Developer Subscriptionを利用しています。

詳しくはこちらを確認してください。
https://rheb.hatenablog.com/entry/developer-program

やり方(root)で

サブスクリプション登録
subscription-manager register
Registering to: subscription.rhsm.redhat.com:443/subscription
Username: taso_int(サブスクリプションユーザー名)
Password:(パスワード)

リポジトリ有効化
subscription-manager list --available 

Red Hat Ansible Automation Platformが入っているpool値をメモ

subscription-manager attach --pool=<メモしたpool値> 有効になればOK

クラウド環境の場合(リポジトリを引っ張れるように)
subscription-manager config --rhsm.manage_repos=1

subscription-manager repos --enable=ansible-automation-platform-2.1-for-rhel-8-x86_64-rpms

navigatorのインストール
dnf install ansible-navigator

podmanやrunner等もインストールされます。

rpmだとpodman login registry.redhat.ioが必要そうですね rpmだとRedHatさんの公式イメージがあるのでカスタマイズが必要ない限りは公式イメージ(ee)を利用するのが良さげ まあansible-navigatorよりもAAPをインストールした方がいいかも?

build

eeがない場合はbuilderをインストールしてeeを用意してください(地味に手間)
詳しくはbuilderのブログを見てください

taso-int.hatenablog.com

ファイル類だけ補足します。
buildには execution-environment.yml
requirements.txt
requirements.yml (bindep.txt)
が必要になります。

execution-environment.yml

---
version: 1

build_arg_defaults:
  EE_BASE_IMAGE: quay.io/ansible/ansible-runner:latest

dependencies:
  galaxy: requirements.yml
  python: requirements.txt

additional_build_steps:
  prepend: |
    RUN pip3 install --upgrade pip setuptools

requirements.txt

paramiko
netaddr
ansible[azure]

requirements.yml(この書き方でバージョン指定ができる)

---
collections:
  - name: azure.azcollection
    version: 1.11.0
  - name: ansible.utils
    version: 2.4.3
  - name: cisco.ios

navigater.ymlについて

ansible navigatorはansible-navigator.ymlという設定ファイルが必要です。
ここでansible-navigatorの色々な設定が可能となっています。

公式ドキュメントがかなり参考になります。
https://access.redhat.com/documentation/ja-jp/red_hat_ansible_automation_platform/2.0-ea/html/ansible_navigator_creator_guide/index

これについてはまた後で違う記事で書きたいと思います。

今回のansible-navigator.ymlはこんな感じです。

---
ansible-navigator:
  ansible:
    inventories:
      - inventory/hosts/
  execution-environment:
    container-engine: podman
    enabled: true
    image: localhost/blog:latest
  mode: stdout
  playbook-artifact:
    enable: true
    replay: ./log/{playbook_name}/{ts_utc}.json
    save-as: ./log/{playbook_name}/{ts_utc}.json

以上で環境の構築は終わりです。
次は実際にansible-navigatorを動かしたいと思います。