その名の通り、ターゲットとなるサーバ上で実行した標準出力をリダイレクトしたファイルをとってくるRole "fetch-command-out" を作ってみました。
通常少なからずAnsibleのコードを書かなければなりませんが、取得に必要なファイルが決まってさえいれば直ぐに使えるようにしています。
fetch-command-out Role
Ansible Galaxy に上げています。
https://galaxy.ansible.com/tksarah/fetch-command-out/
準備
- Ansible 2.X 以上の入ったホスト(v2.1.2でテスト済み)
- とってきたいファイルのリスト
sample_comlist.txt
'ls -l /etc','ls_l'
'hostid','hostid_out'
'cat /etc/hosts','cat_hosts'
使い方例
対象となるサーバのインベントリファイルを用意します。
hosts
[hoge]
192.168.0.1
[fuga]
192.168.0.2
Ansible Galaxy からロールをダウンロードします。
# ansible-galaxy install --roles-path ./roles tksarah.fetch-command-out
プレイブックを用意します。(以下そのまま使っていただくと便利です。)
site.yml
- name: Playbook for fetching files
hosts: "{{ target }}"
gather_facts: no
become: true
become_user: root
vars_prompt:
- { name: "target" , prompt: "Input target host" , default: all , private: no }
- { name: "inputcommand" , prompt: "Input your command list" , default: sample_comlist.txt , private: no }
- { name: "remtemp" , prompt: "Input remote temp directory " , default: /tmp/remtemp , private: no }
- { name: "savedir" , prompt: "Input a save directory" , default: fetched , private: no }
roles:
- tksarah.fetch-command-out
実行します。
# ansible-playbook -i hosts site.yml
Input target host [all]:(ターゲットホストを指定します。デフォルトはall)
Input your command list [sample_comlist.txt]:(取得したいコマンドと保存ファイル名が書かれているファイルを指定します。)
Input remote temp directory [/tmp/remtemp]:(ターゲットサーバ上で一時的に保存するディレクトリを指定します。)
Input a save directory [fetched]:(取得したファイルを保存するディレクトリを指定します。デフォルトはカレントのfetched)
PLAY [Playbook for fetching files] *********************************************
:
:
:
PLAY RECAP *********************************************************************
192.168.0.1 : ok=19 changed=6 unreachable=0 failed=0
192.168.0.2 : ok=17 changed=6 unreachable=0 failed=0
上記サンプルのプレイブックを使った時、とってきたファイルはカレントの「fetched」ディレクトリに格納されます。
# tree fetched
fetched
|-- 192.168.0.1
| |-- tmp
| | `-- remtemp
| | |-- cat_hosts
| | |-- hostid_out
| | `-- ls_l
|-- 192.168.0.2
| |-- tmp
以下も合わせて使うと効果的です。
シンプルにファイルをとってくるAnsible Role
シンプルにコマンド出力をとってくるAnsible Role(Windows版)