LoginSignup
6
4

More than 5 years have passed since last update.

ansibleでリモート側にある複数のzipファイルを展開する方法

Posted at

これは 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

公式マニュアルより引用

リモートマシン上に既に置いてある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

公式マニュアルより引用

でもですね、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ならソースをベタで登録してもチェックアウト速いんだろうなー。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4