Ansibleで圧縮ファイルを作るにはarchiveモジュールを使います。
1つのディレクトリや複数ファイルを圧縮する場合、最初にtarでアーカイブされ、それからformatで指定された形式で圧縮されます。
1つのファイルを圧縮する場合、デフォルトではtarでアーカイブされません。
パラメータの説明
ここでは有用なパラメータについて説明します。
- dest
-
圧縮ファイルのファイル名(パス)
pathに1つのディレクト、グロブ、複数のファイルパスを指定して、pathが複数ファイルを参照する場合にはdestは必須になる。
- exclude_path
-
アーカイブから除外するファイルを絶対パス、グロブ、パスのリストで指定する。
- force_archive
-
1つのファイルが指定された場合でも、アーカイブするようモジュールに強制する。
デフォルト値は「no」。「yes」を指定すると1つのファイルでもtarでアーカイブされる(それからformatで指定した形式で圧縮される)。
- format
-
圧縮形式を指定する。
「bz2」「gz(デフォルト)」「tar」「xz」「zip」の形式が使えます。
- path(必須)
-
圧縮対象のファイルを、絶対パス、グロブ、パスのリストで指定する。
- group
-
chownに渡すようなグループの所有者を指定する。
- mode
-
ファイルの権限を指定する。
- owner
-
chownに渡すようなファイルの所有者を指定する。
公式ドキュメントのサンプルの説明
公式ドキュメントのサンプルを元に、注意点などをコメントしていきます。
- name: Compress directory /path/to/foo/ into /path/to/foo.tgz
archive:
path: /path/to/foo
dest: /path/to/foo.tgz
ディレクトリを圧縮する場合、1つのディレクトリでもdestの指定は必須です。複数ファイルの場合はtarでアーカイブされてから圧縮される。デフォルトの圧縮形式はgzなので出力ファイルはtgz(tar.gz)形式となる。
- name: Compress regular file /path/to/foo into /path/to/foo.gz and remove it
archive:
path: /path/to/foo
remove: yes
1つのファイルを圧縮する場合は、destは必須ではない。この例の場合は「/path/to/foo.gz」という圧縮ファイルが作成される。
1ファイルの場合はtarでアーカイブはされないので、圧縮ファイルはgz形式になる。
また「remove: yes」なので、圧縮後に対象ファイルは削除される。
- name: Create a zip archive of /path/to/foo
archive:
path: /path/to/foo
format: zip
これは1つのファイルをzip形式で圧縮する。
- name: Create a bz2 archive of multiple files, rooted at /path
archive:
path:
- /path/to/foo
- /path/wong/foo
dest: /path/file.tar.bz2
format: bz2
- name: Create a bz2 archive of a globbed path, while excluding specific dirnames
archive:
path:
- /path/to/foo/*
dest: /path/file.tar.bz2
exclude_path:
- /path/to/foo/bar
- /path/to/foo/baz
format: bz2
- name: Create a bz2 archive of a globbed path, while excluding a glob of dirnames
archive:
path:
- /path/to/foo/*
dest: /path/file.tar.bz2
exclude_path:
- /path/to/foo/ba*
format: bz2
pathに複数ファイルを指定する例。ファイルのリストやグロブを指定できるます。
- name: Use gzip to compress a single archive (i.e don't archive it first with tar)
archive:
path: /path/to/foo/single.file
dest: /path/file.gz
format: gz
- name: Create a tar.gz archive of a single file.
archive:
path: /path/to/foo/single.file
dest: /path/file.tar.gz
format: gz
force_archive: true
これは1つのファイルを圧縮するときに、force_archiveでアーカイブを強制した時と、そうでない時の例。
不可解なのはforce_archiveに「true」が指定されていることだ。force_archiveのパラメーター説明の箇所では、「no」「yes」のどちらかを指定することになっています。ただしyes でも true でも正しく動く。
まとめ
使い方に特に難しい点はありませんでした。destには常にフルパスを指定するのがわかりやすいと思います。