【Ansible】AnsibleTowerしか使えない開発環境でサンプルソースを効率よく試す方法
【結論】
AnsibleTowerにはSurvery機能がある。
この機能を使うことで、ジョブテンプレート実行時に任意の値を渡すことができる。
渡された値によって、読み込む
.yml
ファイルを可変にすることで効率よくサンプルソースを試せる。Ansibleでは
fomart()
を使うことで、C言語のsprintf()
と同じ文字列置換を行える。
【目次】
- はじめに
- Ansibleでサンプルソースを試す場合
- AnsibleTowerでサンプルソースを試す場合
- AnsibleTowerしか動かせない環境で効率よくサンプルソースを試す方法
- 効率よくサンプルソースを動かすためのyml
- 参考
- さいごに
はじめに
CLIで操作可能なAnsibleではなく、GitLabにソース投入してAnsibleTowerで実行する方法しかない開発環境に身を置いている私が、効率よくサンプルソースを試すために考えた手順を紹介します。
Ansibleでサンプルソースを試す場合
CLI環境のAnsibleでサンプルソースを試す手順は以下になります。
【手順】
以上です。これ以上でも以下でもありません。
AnsibleTowerでサンプルソースを試す場合
AnsibleTowerはAnsibleのソースをGUIで実行するためのインタフェースでしかなく、ソースはGitLab等のソース管理ツールで管理する必要があります。
よって、AnsibleTowerでサンプルソースを動かすには、GitLabにソースを投入し、AnsibleToweで実行した時にGitLab上のどのソースを実行するかを設定してあげる必要があります。
【事前準備】
GitLabにサンプルソースを格納するための任意のプロジェクトを作成する。
AnsibleTowerでプロジェクト作成して、GitLabに作成したプロジェクトを紐づける。
詳細な手順は以下参照
https://docs.ansible.com/ansible-tower/3.2.4/html_ja/userguide/projects.html
【サンプルソース作成手順】
GitLabに作成した任意のプロジェクトにサンプルソースをcommitする。
AnsibleTowerを操作して、サンプルソースを動かすためのジョブテンプレートを作成する。
下図はジョブテンプレート作成するための設定画面です。
[1]は事前準備2で作成したプロジェクトをリストから選択します。
[2]ではプロジェクト(GitLabと連携)に紐づいたソース一覧(※1)から、このジョブテンプレートを実行した時に実行したいソースを選択します。
※ Ansibleのコーディング規約に違反している(拡張子が
.yml
でない、先頭行が---
でないetc...)ファイルはGitLabに登録されていたとしても、一覧に表示されません。引用:https://docs.ansible.com/ansible-tower/3.2.4/html_ja/userguide/job_templates.html
作成したジョブテンプレートを実行する。
AnsibleTowerしか動かせない環境で効率よくサンプルソースを試す方法
【Before_1】
真っ先に思いついた方法ですが、チームみんなで共有しているAnsibleTowerのジョブテンプレートが増えまくるので却下しました。
【Before_2】
AnsibleTowerについて無知だった私は、以下の方法でサンプルソースを試していました。
サンプルソースを作成するたびに、ジョブテンプレートを設定し直す必要があり手間です。。
【After】
AnsibleTowerのジョブテンプレートにはSurvery機能があります。この機能を使うことで、ジョブテンプレート実行時に任意の値を渡すことができます。
Survery機能でワイが入力したidによって、どのサンプルソースを実行するかを判断する「サンプルソースxx」という仲介役をかましてあげることで、ファイルを追加するだけでサンプルソースを動かすことができるようになります。
効率よくサンプルソースを動かすためのyml
以下になります。
--- - hosts: localhost # 自分自身に接続する tasks: # 実際はAnsibleTowerのSurvery機能で宣言される変数 - name: Survery入力で定義された変数 set_fact: task_id: 01 - name: タスク名のフォーマット指定 set_fact: task_name_format: "sample_%02d.yml" - name: 実行するタスク名確定 set_fact: task_name: "{{ task_name_format | format(task_id) }}" - debug: msg="{{task_name}}" - name: "{{task_name}}を実行する" include_tasks: "{{ task_name }}"
[task_name_format
で指定したサンプルソースの命名規則] + [surveryで入力したtask_id
]から、include_tasks
で実行する.yml
を決めるようにすることで実現しています。
ジョブテンプレートでSurveryを設定する方法は以下を参照ください。
https://docs.ansible.com/ansible-tower/3.2.4/html_ja/userguide/job_templates.html#surveys
参考
さいごに
なぜ私はこのようなブログを書いているのだろう??
DockerかVagrantをローカルPCにインストールできる環境であれば、やる必要もない効率化の方法について考えているのだろう??
と自問自答してて、改めて気づかされる。。
現在の自分は、開発環境が優遇されたモダンなIT企業ではなく、好きなツールをインストールできなシンクラ端末という無人島みたいな開発環境でサバイバル生活をしているのだと。。