Private Automation Hub を使ってみよう!

みなさんこんにちは。レッドハットの杉村です。Ansible のテクニカルサポートをしています。

米国時間の11月18日、Red Hat Ansible Automation Platform 1.2 がリリースされました。Ansible Tower 3.8.0 と Automation Hub 4.2.0 を同梱しています。

Red Hat Ansible Automation Platform Release Notes

今回の記事では、この Automation Hub について紹介します。

Automation Hub とは

これまで Collections としてさまざまなロールやモジュールを SaaS サービスの cloud.redhat.com から配布してきました。

今回リリースされた Automation Hub では、Collections をインターネットへの接続がなく閉じた環境からでも利用したいということや、社内だけで使う Collections を配布したいといった用途にお使いいただけるものとなっています。

Automation Hub のインストール

Automation Hub は Ansible Tower 3.8.0 と一緒に配布されています。

inventory ファイルにこのような項目が追加されていて、Tower と同時にインストールすることができます。いろいろと設定値があるように見えますが、インストール先とDBの接続情報、初期パスワードを設定するものとなっています。

インストールは同時に実施いただけるのですが、Automation Hub をインストールするサーバは Tower と同居させることはできません。データベースもサーバを Tower でお使いのものと分離することをお勧めしますが、検証等で同居させる場合であっても、automationhub_pg_database は pg_database の設定とは分けるようにしてください。

Tower がすでに導入されている場合でも、Automation Hub を後から追加することができます。

[automationhub]
192.168.0.102

[all:vars]

automationhub_admin_password='XXXXXXXX'

automationhub_pg_host='192.168.0.101'
automationhub_pg_port='5432'

automationhub_pg_database='automationhub'
automationhub_pg_username='automationhub'
automationhub_pg_password='XXXXXXXX'
automationhub_pg_sslmode='prefer'

# automationhub_upgrade = False
# automationhub_require_content_approval = True
# automationhub_importer_settings = None
# automationhub_disable_https = False
# automationhub_disable_hsts = False
# automationhub_ssl_validate_certs = False

# automationhub_ssl_cert=/path/to/automationhub.cert
# automationhub_ssl_key=/path/to/automationhub.key

Tower と同じようにインストーラを起動すると、プレイブックが動作してインストールされます。

# ./setup.sh

無事正常終了したら、Web ブラウザから admin ユーザでログインしてみてください。

f:id:sugitk:20201130160433p:plain

f:id:sugitk:20201130160605p:plain

Automation Hub の設定

社内に閉じた環境に Collections を提供するということを想定して、cloud.redhat.com から Collections を同期してみることにします。

cloud.redhat.com にログインしていただきますと、このような画面になります。Red Hat Ansible Automation Platform の四角いパネルの中にある、Automation Hub をクリックします。

f:id:sugitk:20201130160714p:plain

f:id:sugitk:20201130160801p:plain

Connect To Hub のメニューを開きますと、接続のための情報が出てきます。

Load Token のボタンを押して、Token の値をメモします。この Token や URL の情報を使って、Automation Hub から接続します。

f:id:sugitk:20201130160837p:plain

この cloud.redhat.com から提供されている Collections は、Ansible Engine からも使うことができます。

ansible.cfg にこのように設定します。

[galaxy]
server_list = automation_hub

[galaxy_server.automation_hub]
url=https://cloud.redhat.com/api/automation-hub/
auth_url=https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token
token=<Tokenの文字列>

詳しくはこちらのドキュメントをご覧ください。

docs.ansible.com

Automation Hub に戻りまして、Repo Management のメニューを開きます。Local と Remote がありますが、Remote を開いて、rh-certified の列で一番右にある設定から Edit を押します。

f:id:sugitk:20201130161001p:plain

f:id:sugitk:20201130161023p:plain

cloud.redhat.com で取得した Token をこの欄に入力して、Save を押して保存します。

Sync のボタンを押しますと、同期処理が始まります。

f:id:sugitk:20201130161133p:plain

もし失敗したときは、この Automation Hub をインストールしたサーバの /var/log/messages にログが記録されるので確認してみてください。わたしの環境では、なぜか Chrome では Token のコピーが正しく行われないようで、Firefox で実行するとうまくできました。

Nov 30 15:08:16 localhost rq: pulp: pulp_ansible.app.downloaders:INFO: Updating bearer token

のようなエラーが出ているときは Token が正しくないと判断されていますので、何度か入れ直してみてください。

無事同期が終わりますとこのように Completed となります。

f:id:sugitk:20201130161148p:plain

左のメニューから Red Hat Cerfified を選んで、Collections を開くとこのように cloud.redhat.com で見たものと同じように取り込まれていることが確認できます。このとき、アイコンは残念ながら同期されないようです。

f:id:sugitk:20201130161238p:plain

Ansible Tower からの利用

この同期した Automation Hub に対して、Ansible Tower から接続して Collections を取ってきて使うということをしてみます。例としてはあまりいいものではないかもしれませんが、ansible.tower を使ってみることにします。

f:id:sugitk:20201130161322p:plain

プロジェクトを作成

まずプロジェクトを作成します。playbook を書いて、github に保存しました。「手動 (manual)」プロジェクトではなく SCM を使うようにしてください。

ファイルを2つ作ります。

playbook.yml

ansible.tower.tower_job_launch モジュールを使って、Tower のジョブを起動するというものを作ってみました。

---
- hosts: all
  gather_facts: false

  collections:
    - ansible.tower

  tasks:
  - name: Launch a job
    tower_job_launch:
      job_template: "Demo Job Template"
      tower_host: 192.168.0.100
      tower_username: user46
      tower_password: XXXXXXXX
      validate_certs: false
collections/requirements.yml

Private Automation Hub にある ansible.tower を使いますよということを宣言します。この collections/requirements.yml に書いておくことで、プロジェクトを Tower が同期したときに一緒に取ってくるようになります。

---
collections:
  - name: ansible.tower
    version: 3.8.0
    source: https://192.168.0.102/api/galaxy/content/rh-certified/

この source: で指定する URL は、Repo Management の rh-certified の列にある Repo URL から取得して使います。

f:id:sugitk:20201130161358p:plain

このとき、API Token も取得しておいてください。

左のメニューから API Token を開いて、Load Token のボタンを押します。

f:id:sugitk:20201130161425p:plain

認証情報を作成

Tower から Automation Hub にアクセスするための認証情報を作成します。

認証情報タイプは「Ansible Galaxy/Automation Hub API トークン」です。

f:id:sugitk:20201130161452p:plain

を設定して保存します。

この認証情報は、「組織」に設定します。ここでは「組織」の「Default」に設定しました。

f:id:sugitk:20201130161600p:plain

プロジェクトを同期

ここまでできたら、プロジェクトの同期ができるようになります。github からプロジェクトを同期してくるよう設定して、「最新SCMリビジョンの取得」のアイコンをクリックすると git clone のような処理を実行します。このとき、Tower はプロジェクトに含まれる collections/requirements.yml ファイルが存在することを確認して、内部的に ansible-galaxy コマンドを実行して Collections も取得してきます。

f:id:sugitk:20201130161720p:plain

f:id:sugitk:20201130161738p:plain

ジョブを実行

このプロジェクトを使うジョブテンプレートを作成して、ジョブを実行します。

f:id:sugitk:20201130161833p:plain

実際にジョブが実行されて成功したことも確認してみてください。

f:id:sugitk:20201130161942p:plain

少々ややこしくなりますが、このジョブから実行されたプレイブックは Tower のジョブテンプレートを user46 ユーザで実行するものでした。そちらのログも確認してみると、正しく実行されていることがわかります。

f:id:sugitk:20201130162101p:plain

まとめ

Automation Hub を導入して、そこに格納されている Collections を Ansible Tower から利用してみるための方法について紹介しました。

今後 Collections としてロールやモジュールを再利用していくことが増えてきます。弊社が提供する SaaS の cloud.redhat.com で共有するのがさまざまな理由で難しい場合には、お手元で Automation Hub を建てていただくことで、Collections の機能を閉じた環境でも利用できるようになります。

Ansible Towerの評価ライセンスリクエストはこちらからご利用いただけます。

www.redhat.com

Happy Automation!

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。