ローカルAnsible GalaxyでプライベートなCollection管理(Galaxy NG編)

#はじめに
以前に[ローカルAnsible GalaxyでプライベートなCollection管理](https://qiita.com/ussvgr/items/f7c18919c56fbca76094)という記事を書きました。
今回は[Galaxy NG](https://github.com/ansible/galaxy_ng)という別実装を試してみます。

[フロントエンド側のリポジトリ](https://github.com/ansible/ansible-hub-ui)を見ると「Frontend for Ansible Automation Hub」と記載があるので、Tower 3.8.0から同梱されるようになったAutomation Hub※のOSS版というような位置付けでしょうか。

※参考：https://tekunabe.hatenablog.jp/entry/2020/11/19/091903

#試した環境
Galaxy NG 4.2.0
CentOS Linux release 7.8.2003(Galaxy NGのインストール先。今回はOracle CloudのAlways Free枠で建てたCPU１コア・メモリ１GBのサーバを利用しています)
Ansible 2.9.13（インストールに使用。上記のCentOSではなく、自分の端末にインストールして使用しています）
AWX 15.0.1（インストール後の動作確認環境）

#インストール手順
リポジトリ内に[ドキュメント](https://github.com/ansible/galaxy_ng/wiki/End-User-Installation)があるので、そのとおりに進めます。

Ansibleがインストールされている端末から、以下を実行していきます。

必要なコレクションをインストール。

```bash
$ ansible-galaxy collection install pulp.pulp_installer
$ ansible-galaxy collection install ansible.galaxy_collection
```

インストールに利用するPlaybookなどを取得します。

```bash
$ git clone https://gist.github.com/629ba52d68301cc9798227b87704df84.git example
$ cd example
```

enduser-install-vars.yml内の「pulp_default_admin_password」の値を変更しておきます。
この値が管理ユーザーのログインパスワードになります。

```bash
$ vi enduser-install-vars.yml
```

最初にインストールしたpulp_installerの動作に必要なロール・コレクションをインストール。

```bash
$ ansible-galaxy install -r ~/.ansible/collections/ansible_collections/pulp/pulp_installer/requirements.yml
```

インストール先のサーバのinventoryファイルを作成します。

```bash
$ vi hosts
XXX.XXX.XXX.XXX ansible_user=opc
```

Ansibleを使ってインストールします。
ドキュメントにはPythonパッケージを利用する方法とRPMパッケージを利用する方法の２パターン記載がありましたが、私はPythonパッケージ利用の方法で実行しました。

```bash
$ ansible-playbook enduser-install.yml -i hosts --extra-vars "@enduser-install-vars.yml"
```

完了したらブラウザで「https://<サーバーIP>」を開くと、ログイン画面に遷移します。
Usernameは「admin」、パスワードは上記で設定したものでログイン可能です。
![スクリーンショット 2020-11-11 0.40.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274613/1f8d3181-d4f6-e8d2-94e7-315d88eaaee1.png)

#コレクションのアップロード
まずはNamespaceを作成してみましょう。
左のメニューの「My Namespaces」をクリックし、「Create」ボタンを押下し作成します。
![スクリーンショット 2020-11-20 16.45.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274613/f9b6437b-c1ac-0ccf-59cd-193085488cb9.png)

Namespaceを作成したら、「Upload collection」を押下しアップロードします。

![スクリーンショット 2020-11-20 16.39.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274613/59d96273-6c44-5d12-73b1-999da55ec3f0.png)

また、コレクションのアップロードはコマンドからも可能です。
左メニューのAPI Tokenからトークンを発行し、
![スクリーンショット 2020-11-20 16.58.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274613/a3411370-4f2e-9013-6ef1-0a8898d1cbef.png)
以下のようにコマンドを実行します。

```bash
$ ansible-galaxy collection publish <Collectionのtar.gz> --api-key <発行したトークン> --server https://<サーバーのIP>/api/galaxy/ --ignore-certs
```

#AWXから利用する
[以前](https://qiita.com/ussvgr/items/f7c18919c56fbca76094#awx%E8%A8%AD%E5%AE%9A)は「設定」の中に参照するGalaxyサーバーの設定がありましたが、バージョン15あたりから「認証情報」に変わったようです。

「認証情報タイプ」で『Ansible Galaxy/Automation Hub API トークン』を選択、
「GALAXY SERVER URL」に『https://<サーバーのIP>/api/galaxy/』、
「APIトークン」にGalaxy NG側で発行したAPIトークンを入力し保存します。
![スクリーンショット 2020-11-20 20.22.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274613/7d0884d7-4776-2fb5-7635-3957f70a55c3.png)

次に「組織」の設定で『GALAXY 認証情報』に上記で作成した認証情報を追加。
![スクリーンショット 2020-11-20 20.49.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274613/1f3a3c9a-e2df-bb9a-72eb-7b1393026517.png)

最後に「設定 -> ジョブ」にて『ANSIBLE GALAXY SSL 証明書の検証を無視する』を有効化します。
![スクリーンショット 2020-11-20 21.06.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274613/c9218504-17b1-868d-3c0c-07b22e73781f.png)

以上で設定は終了です。[以前の記事](https://qiita.com/ussvgr/items/f7c18919c56fbca76094#playbook%E4%BD%9C%E6%88%90)で書いたようにcollections/requirements.ymlを含めたプロジェクトを作成すれば、Galaxy NGにアップロードしたコレクションを利用できます。

#終わりに
インストールや初期設定は通常のGalaxyよりコチラの方が簡単な印象。
Private Automation Hubもリリースされたことだし、今後はコチラが主流になるのかな、と思います。