はじめに
度々行っている作業を、依頼元に直接やってもらってハッピーになれないか
AWX(AnsibleTower)ならGUIもあるし良いかも
そう思って取り組んだときのメモから引用しました
課題
- ユーザに必要なデータを入力してもらう必要がある(インベントリの編集は不可)
- とにかく簡単な手順にする
対応策
- AWXの
SURVEY
機能に頼りました - Ansibleの
delegate_to
を利用しました
1. AWXのSURVEY機能について
AWXではジョブテンプレートに対して、SURVEYという機能が利用できます。
SURVEYを使うと、ジョブ実行時にプロンプトを表示してextra_vars
の値の入力を求めることができます。
入力値は選択形式にしたり、デフォルト値を決めたり、コメントを付けたりできて、利用者のフォローをすることができます。
例えば、作業対象のサーバを選択させるために以下のようなSURVEYを設定します。
そうすると、ジョブの実行時に以下のようにプロンプトが表示され、入力値の選択が求められます。
なお'選択肢'の形式以外にも、テキストであったりチェックボックスだったりも利用できます。
詳しくは以下の公式ドキュメントがわかりやすいです。
https://docs.ansible.com/ansible-tower/3.4.3/html_ja/userguide/job_templates.html#surveys
2. delegate_to
と組み合わせる
作業に利用するパラメータはSURVEYで集めることに成功したけれども、作業対象のサーバを柔軟に変更することが難しい。
実行時にインベントリを選択してもらえれば良いんだけどもインベントリの整備や権限管理が大変。
そんなわけで、SURVEYとAnsibleのdelegate_to
と組み合わせて利用しました。
先程の例からだと、SURVEYで取得した作業対象サーバの値(target_server)を、以下のようにAnsible playbook側でdelegate_to
として指定するだけです。
---
- name: Demo
hosts: localhost
tasks:
- name: Create config file to work directory
template:
src: ./templates/ifcfg-eth0.jinja2
dest: /tmp
owner: root
group: root
mode: 0644
delegate_to: "{{ target_server }}"
こうすることでお手軽に、ユーザ側で作業対象サーバを切り替えることができます。
SURVEYの機能で選択肢を限定することができるので、作業対象外のサーバにアクセスされることを防ぐこともできます。
おわりに
短いですが以上です。
アドベントカレンダー参加登録したものの、書こうと思っていたネタはすでに記事があったので慌てて別のネタを書きました