ツール

Ansibleでファイルを圧縮する ー archiveモジュール

投稿日:

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

-ツール
-

Copyright© アナグマのモノローグ , 2021 All Rights Reserved Powered by STINGER.