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には常にフルパスを指定するのがわかりやすいと思います。