簡単に使えるファイル取得と、コマンド実行出力後のファイル取得のロールを作りました。
Linux/Windows で対応できるようにしています。それぞれAnsible Galaxyにあげています。
これらをラップするように、対話形式で出来るよう下記のPlaybookを作りました。(少し作り切れていないところがありますが)
少し手を加えているところは、setup
で取ってくるところの情報をJSONなので、使えそうなのをCSVで落としてくるところです。ここはしょぼいPythonスクリプトをツールとして呼び出して使っています。
苦労したところ
各ロールは、なるべく事前に準備するものを最小限の手間で行うことを前提に作ったところです。最悪ターゲットとして使うユーザの想定として「Ansible触ったことがない人」も入れています。
fetch-filesはシンプルすぎるほどなのでいいとして、fetch-command-out,fetch-wcommand-outは取得元となるINPUTのCSVファイルからリストを得て回すところ(以下参照)です。当然コードを書く際もできるだけ短くしたいという思いもあり、今回使った手は、lookup による列の抽出と with_lines によるループです。このあたりはこれがベストともまだ思っていないので、よりシンプルに楽な方法があれば、コメントいただけると幸いだったりします。
ユーザが用意するファイル
1,<command>,<output file>
2,<command>,<output file>
3,<command>,<output file>
- include: run_out_fetch.yml
vars:
command: "{{ lookup('csvfile', '{{ item }} file={{ inputcommand }} delimiter=, col=1') }}"
savefile: "{{ remtemp }}/{{ lookup('csvfile', '{{ item }} file={{ inputcommand }} delimiter=, col=2') }}"
with_lines:
- awk -F, '{ print $1 }' "{{ inputcommand }}"