ansible.cfg を作成する ansible-config init コマンド

久しぶりに Ansible を触ってみたら ansible.cfg を作成する ansible-config init コマンドができていたので素振りしてみる。 ドキュメント Ansible Configuration Settings — Ansible Documentation バージョン確認 pip で最新の ansible をインストールしている。 ansible-core は v2.13.2。 GitHub を見たところ、ansible-config の init オプションは v2.12.0 から追加されているので、使うなら v2.12.0 以上で。 職場では v2.9 を使っているため、このオプションは使えない模様……。 $ ansible-config --version ansible-config [core 2.13.2] config file = None configured module search path = ['/home/nnstt1/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /home/nnstt1/.virtualenv/ansible/lib/python3.9/site-packages/ansible ansible collection location = /home/nnstt1/.ansible/collections:/usr/share/ansible/collections executable location = /home/nnstt1/.virtualenv/ansible/bin/ansible-config python version = 3....

August 4, 2022 · 6 min · @nnstt1

AWX Operator を使って外部 PostgreSQL と連携する AWX をデプロイ

Ansible AWX バージョン 18.0 から AWX Operator を使うインストール方法に変更されました。 https://github.com/ansible/awx-operator AWX Operator を使うと Kubernetes クラスタへの AWX デプロイが簡単にできます。 標準的な設定では AWX 関連のコンテナをまとめた Pod と一緒に PostgreSQL Pod もデプロイされますが、今回は AWX Operator 管理外の PostgreSQL インスタンスと連携するように AWX をデプロイします。 環境情報 ソフトウェア バージョン Kubernetes 1.21.2 AWX 19.3.0 AWX Operator 0.13.0 Zalando Postgres Operator 1.6.3 AWX Operator AWX Operator は公式の マニュアル 手順通りにインストールしていきます。 特筆する点はないのでマニュアルを参照してください。 PostgreSQL AWX で利用する PostgreSQL インスタンスは Zalando Postgres Operator を使って用意します。 Operator のインストール方法は下記の投稿を参照してください。 Zalando Postgres Operator を試してみた - 勇往邁進 以下の postgresql リソースのマニフェストで、AWX 用の PostgreSQL インスタンスがデプロイされます。...

August 25, 2021 · 3 min · @nnstt1

GitLab CIとMoleculeでRoleテスト自動化

はじめに Ansible には Role のテストを支援してくれる「Molecule」というツールがあります。今回は Molecule と GitLab CI を用いて Role のテスト自動化ができるように環境を整えていきます。 Molecule の詳細については、ひよこ大佐本こと「Ansible構築・運用ガイドブック」や「ソフトウェアデザイン 2020年6月号」に載っています。(Molecule 実践ガイドまだ?) 主に備忘録のため参照される場合は適宜読み替えてください。 作業内容 今回は「自宅ラボ」と称している仮想化基盤(ESXi)上の「作業用マシン(CentOS 7)」で moleculeコマンドの実行 GitLab Runnerコンテナの起動 GitLab CIでmolecule testの自動化 をできるようにします。なお前提として、作業用マシンにはdockerインストール済みで、GitLabは仮想化基盤上の別サーバに導入済みです。 環境構築 Moleculeインストール 作業用マシンでMoleculeのコマンドを実行できるようにします。Molecule 公式サイトに複数のインストール方法が載っていますが、今回はvirtualenv内にmoleculeコマンドをインストールします。 $ sudo python3 -m pip install virtualenv $ virtualenv molecule $ source molecule/bin/activate (molecule) $ python -m pip install "molecule[lint]" "docker" (molecule) $ molecule --version molecule 3.0.4 ansible==2.9.9 python==3.6 公式サイトではインストール時に--userオプションを付いていたのですが、自分の環境ではエラーが出てしまったので外しています(TODO: エラー原因調査)。また、pipでmoleculeをインストールするとansibleもついてきます。pipでansibleをインストールする場合はmoleculeに置き換えてもいいかもしれませんね。 Ansible Role作成 さきほどインストールした molecule コマンドを使って Ansible の Role を作成します。 ansible-galaxy コマンドと同様に、Role に必要なディレクトリのテンプレートを作成することができ、Molecule で使用する molecule ディレクトリも作成されます。 今回は「test-role」という名前の Role にしています。...

May 31, 2020 · 2 min · nnstt1

AWX が Ansible Galaxy を使う動きを追ってみた

前回の投稿でAWXのProjects自動同期方法を調べたのですが、その中で一つ気になることが出てきました。 それは 「AWXではAnsible GalaxyのRoleはどのように参照されるのか」 という点です。 CLIで使うAnsibleでは ansible-galaxy install コマンドで外部Role(Galaxyに公開されているRoleや特定リポジトリのRole)をPlaybookから参照/実行できます。参照するRoleを指定する方法の1つに、参照情報を記載したYAMLファイルを読み込む方法があります。その際のコマンドは ansible-galaxy install -r [参照ファイルパス] です。AWXでも同じように参照されるのか、確認してみました。 マニュアルを読む Ansible TowerでAnsible Galaxyを使う方法はUser Guideに書かれています。AWXも同じ方法です。それによると、<project-top-level-directory>/roles/requirements.yml ファイルを見つけると自動的に ansible-galaxy installコマンドが実行されるようです。 [https://docs.ansible.com/ansible-tower/latest/html/userguide/projects.html#ansible-galaxy-support:embed:cite] なるほど、CLI版とほぼ同じでansible-galaxy installコマンドを使って、参照するファイルの名前や保存先は指定されていると。そして実行タイミングはProject Update(プロジェクトの同期)の最後。じゃあ特段気にすることはないな、と思っていたのですが…。 実際に確認 前回の調査で知ったのですが、Project Update自体もAWXの Internal Job となっています。(正式用語かわかりませんがプログラム内のコメントでは Internal Job と記載されていたのでここでもそう呼びます) そして、Internal JobもPlaybookを参照して実行されるようで、Project Updateは project_update.yml というPlaybookを参照しています。このPlaybookはawx_taskコンテナの/var/lib/awx/venv/awx/lib/python3.6/site-packages/awx/playbooks/project_update.ymlにあります。project_update.ymlの中身を見ると、 name: Update source tree if necessary name: Install content with ansible-galaxy command if necessary という2つのtasksで構成されていることが分かります。前者がAWX上で指定したSCMの更新で、後者がrequirements.ymlで指定した外部Roleの更新なんですね。実際に後者のタスクでcommand: ansible-galaxy installの記述があるので、マニュアルで書かれていた内容はこのPlaybookで実現しているようです。 外部Role更新タスクの実行条件として when: roles_enabled|bool と tags: install_roles がありました。変数roles_enabledは Settings -> Jobs -> Enable Role Download のON/OFFで決まるようです。tagsのほうはInternal Job実行時に install_roles が付いていれば実行されるタスクのようですが、ここは未確認です(理由は後述)。...

May 24, 2020 · 1 min · @nnstt1

AWXのプロジェクトを自動同期させたい

Ansible/AWXを利用していて、少し煩わしいと思ったことがあります。 それは「Playbookをリポジトリに追加したら、AWXのプロジェクトの同期を手動実行しないとジョブテンプレートからそのPlaybookを選択できない」という点です。 プロジェクトを同期していないと、ジョブテンプレートのPlaybook選択するプルダウンに追加したPlaybookが出てこないのです。 現在の手順は以下のような感じです。 新規Playbookをリポジトリに追加 プロジェクト手動同期 ジョブテンプレートで新規playbookを選択 簡単な手順ではあるのですが、わざわざ「2. プロジェクト手動同期」をする度にモヤモヤーってしています。このモヤモヤを取り除きたいと思います。 [f🆔nnstt1:20200517200209p:plain] (どんだけ面倒くさがりなんだ……) やりたいこと 簡潔にいうとタイトルの通り 「AWXのプロジェクトを自動同期させたい」 です。自分の検証環境ではGitLabでPlaybookを管理しているので、具体的には以下のような流れで自動同期をしてみます。 GitLabのリポジトリを更新する(Playbookの追加に限定しません) AWXになんとかして更新を通知する AWXのプロジェクトを更新させる 「AWXになんとかして更新を通知する」方法として、AWXの「Webhook」と「API」の2通り検討しました。 前提 今回使用した環境は以下です。 それぞれ個別のサーバに構築 AWX 11.0.0(Ansible 2.9.5) GitLab CE 12.10.3 AWXのプロジェクトはGitLabと連携済み GitLab Runnerは Shell Executer を登録済み 同期方法 Webhook AWXにはWebhook経由でジョブテンプレートを実行するための設定があります。 ジョブテンプレート編集画面でENABLE WEBHOOKにチェックし、WEBHOOK SERVICEでGitLabを選択するとWEBHOOK URLとWEBHOOK KEYに値が表示されます。(WEBHOOK KEYはジョブテンプレート保存後に表示) Towerのマニュアルになりますが、詳細はこちら。 22. Working with Webhooks &mdash; Ansible Tower User Guide v3.8.6 マニュアルにある通りGitLabの設定をしたら、Webhookを使用してジョブテンプレートを実行することができます。しかし、AWXのプロジェクトをWebhookで実行することはできないようです。上記のジョブテンプレート編集画面のようなWebhookを設定する画面は見つかりませんでした。(AWXのソースを見ても無さそうです) Webhook経由で無理やりプロジェクトを同期させる方法としては「Update Revision on Launchを有効にしたプロジェクトを使用するジョブテンプレートをWebhookで実行する」があるかと思います。AWXのプロジェクトの設定でUpdate Revision on Launchを有効にしていると、当該プロジェクトを使用するジョブテンプレートを実行するときにプロジェクトの同期も実行されます。 この機能を利用してWebhookからジョブテンプレートを実行し、間接的にプロジェクトを同期することで AWXのプロジェクトを自動同期させたい を達成可能です。ジョブテンプレートの中身は何でも良いですが、目的がプロジェクトの同期なので処理が軽めの同期用ジョブテンプレートを用意するのが良いと思います。また、Webhookはワークフローテンプレートの実行も可能なので、複数プロジェクトを一斉に同期ということも可能です。(やる機会は無さそうですが) API AWXではAPIが提供されており、こちらからジョブテンプレートの実行やインベントリのホスト一覧を取得などができます。その中でプロジェクトの同期も可能となっています。 Ansible Tower API Guide v3....

May 17, 2020 · 1 min · @nnstt1