これは FUJITSU Advent Calendar 2017 11日目の記事です。
皆さんがっつり書いてますが私は軽めです。
unarchive機能のおさらい
ansibleでリモートマシン上に圧縮ファイルを展開する方法としてunarchiveというモジュールがありますが、これはansibleの管理マシン上にある圧縮ファイルを送って展開するというのがデフォルトの動きです。
- name: Extract foo.tgz into /var/lib/foo unarchive: src: foo.tgz dest: /var/lib/foo
[公式マニュアル][man]より引用
[man]:http://docs.ansible.com/ansible/latest/unarchive_module.html
リモートマシン上に既に置いてあるzipファイルを展開するためにはremote_src: yes
というオプションをつけます。
- name: Unarchive a file that is already on the remote machine unarchive: src: /tmp/foo.zip dest: /usr/local/bin remote_src: yes
[公式マニュアル][man]より引用
でもですね、zipファイル名なんてずっと同じか分からんのですよ。
zipファイル増えるかもしれんのですよ。
結局どうやるか
そういった場合はどうするかというと、その場でファイルリストを作ってループします。
- name: filelist of Hoge test set
shell: chdir=/home/hoge/testset/zipfiles find `pwd` | grep .zip
register: filelist
- name: unzip Hoge test set
unarchive:
remote_src: yes
src: "{{ item }}"
dest: "/home/hoge/testset/SRC"
with_items: "{{ filelist.stdout_lines }}"
今更ながら2行目のshellのところは、もうちょっと改良の余地ありかも。
余談
見てのとおりテストセットをサーバに展開するときにこれをやってました。
なんでわざわざzipに固めてたかというと、転送のスピードが全然違うためです。
zipがテストセットのリポジトリ(ファイルサーバじゃないよ)にあって、それをチェックアウトしてくるという処理が上記の前段にあります。
組織的にですね、Interstage Application Development Cycle Managerを使ってリソース管理していたもので、
こんな感じのチェックアウト処理です。
- name: check out Hoge test set
command: chdir=/home/hoge creates=/home/hoge/testset {{ escm_path }}/escm co -s {{ escm_server }} -d {{ escm_repository }} -p {{ escm_project }} -r {{ escm_release }} -c {{ escm_branch }} -i zipfiles -q
environment: "{{ env }}"
gitならソースをベタで登録してもチェックアウト速いんだろうなー。