ときどきAnsible日記

主にITインフラ基盤の自動化に関する事を書いているブログです

AnsibleのModule:copy

お疲れ様です。伊藤です。

AnsibleのModuleを使っていきます。よく使うModuleから順に記録を残していきたいと思います。

なお、情報はほぼ公式からのものになります。英語なので翻訳してお届けいたします。
まずはモジュールの説明文ですが、下記になります。

copyモジュールは、ローカルマシンまたはリモートマシンからリモートマシン上の場所にファイルをコピーします。 fetchモジュールを使用して、リモートロケーションからローカルボックスにファイルをコピーします。コピーしたファイルに変数補間が必要な場合は、templateモジュールを使用します。

簡単に言うとAnsibleの管理サーバから管理対象サーバにファイルをコピーすると、それだけですね。他の部分はとりあえず無視でよいと思います。Moduleで重要なものは基本はパラメータです。このあたりさえ押さえておけば使う分には問題ありません。
早速パラメータについて記述していきます。

パラメータ 必須 デフォルト 選択肢 備考
attributes no None ファイルまたはディレクトリに必要な属性。サポートされているフラグを取得するには、ターゲットシステムのchattrのマニュアルページを参照してください。この文字列には、lsattrで表示されるものと同じ順序で属性を含める必要があります。
backup no no yes or no タイムスタンプ情報を含むバックアップファイルを作成して、元のファイルを戻すことができます。
content no srcの代わりに使用すると、ファイルの内容を指定された値に直接設定します。これは単純な値のためのもので、複雑なものや書式を使ってテンプレートモジュールに切り替えてください。
dest yes ファイルをコピーするリモート絶対パス。 srcがディレクトリの場合、これもディレクトリでなければなりません。
directory_mode no 再帰コピーを実行するときは、ディレクトリのモードを設定します。これが設定されていない場合は、システムのデフォルトを使用します。このモードは、新しく作成されたディレクトリにのみ設定され、既存のディレクトリには影響しません。
follow no no yes or no このフラグは、存在する場合、ファイルシステムのリンクが続くことを示します。
force no yes yes or no デフォルトはyesで、内容がsrcと異なる場合はリモートファイルを置き換えます。noの場合、ファイルは宛先が存在しない場合にのみ転送されます。
group no chownに与えられるような、ファイル/ディレクトリを所有すべきグループの名前。
mode no ファイルまたはディレクトリをモードにする必要があります。 / usr / bin / chmodには、実際にはモードが0644のような8進数であることを覚えておいてください。先行ゼロを離れると予期せぬ結果が出る可能性が高い。バージョン1.8では、モードはシンボリックモード(たとえば、u + rwxまたはu = rw、g = r、o = r)として指定できます。
owner no chownに与えられるように、ファイル/ディレクトリを所有すべきユーザの名前。
remote_src no False True or False Falseの場合、起点/マスタマシンでsrcを検索し、Trueであればsrcのリモート/ターゲットマシンに移動します。デフォルトはFalseです。現在、remote_srcは再帰的コピーをサポートしていません。
selevel no s0 SELinuxファイルコンテキストのレベル部分。これはMLS / MCS属性であり、範囲とも呼ばれます。 _default機能はseuserと同じように機能します。
serole no SELinuxファイルコンテキストの役割部分、_default機能はseuserと同じように機能します。
setype no SELinuxファイルコンテキストの一部を入力し、_default機能はseuserと同じ働きをします。
seuser no SELinuxファイルコンテキストのユーザ部分。該当する場合、システムポリシーをデフォルトにします。 _defaultに設定すると、利用可能であれば、ポリシーのユーザー部分が使用されます。
src no リモートサーバーにコピーするファイルへのローカルパス。絶対的であっても相対的であってもよい。 pathがディレクトリの場合、再帰的にコピーされます。この場合、パスが "/"で終わると、そのディレクトリの内容のみがコピー先にコピーされます。それ以外の場合は、 "/"で終わらない場合は、すべての内容のディレクトリ自体がコピーされます。この動作はRsyncに似ています。
unsafe_writes no 通常、このモジュールでは、アトミック操作を使用してデータの破損やターゲットファイルからの一貫性のない読み込みを防止しています。 1つの例は、ドッカーがマウントしたファイルです。アトミックに更新することはできず、安全でない方法でのみ実行できます。このブールオプションは、他の選択肢がない場合にファイルを更新する安全でない方法にフォールバックすることを可能にします。これは競合状態になり、データが破損する可能性があることに注意してください。
validate no 場所にコピーする前に実行する検証コマンド。検証するファイルへのパスは、以下の例のように存在しなければならない '%s'経由で渡されます。コマンドは安全に渡され、拡張やパイプなどのシェル機能は機能しません。


いやあ、多いですね。こちらのパラメータを利用してPlaybookの記述例を下記に記載します。(これも公式のものですが。。)

# Ansible Playbooksの例
- copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: 0644

# 上記と同じ例ですが、0644に相当する記号モードを使用します
- copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: "u=rw,g=r,o=r"

# 別の象徴的なモードの例。いくつかのパーミッションを追加し、他を削除する
- copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: "u+rw,g-wx,o-rwx"

# 新しい ntp.confファイルを所定の場所にコピーし、コピーされたバージョンと異なる場合はオリジナルをバックアップする
- copy:
    src: /mine/ntp.conf
    dest: /etc/ntp.conf
    owner: root
    group: root
    mode: 0644
    backup: yes

# visudoで検証をパスした後、新しい "sudoers"ファイルを適切な場所にコピーする
- copy:
    src: /mine/sudoers
    dest: /etc/sudoers
    validate: 'visudo -cf %s'

# 編集のためにリモートマシン上の "sudoers"ファイルをコピーする
- copy:
    remote_src: true
    src: /etc/sudoers
    dest: /etc/sudoers.edit

戻り値は下記の通りになります。

名前 説明 値が戻る場合 サンプル
src ターゲットマシン上のコピーに使用されるソースファイル changed string /home/httpd/.ansible/tmp/ansible-tmp-1423796390.97-147729857856000/source
backup_file 作成されたバックアップファイルの名前 changed and if backup=yes string /path/to/file.txt.2015-02-12@22:09~
uid 実行後のファイルの所有者ID success int 100
dest 宛先ファイル/パス success string /path/to/file.txt
checksum コピーを実行した後のファイルのsha1チェックサム success string 6e642bb8dd5c2e027bf21dd923337cbb4214f827
md5sum コピーを実行した後のファイルのmd5チェックサム when supported string 2a5aeecc61dc98c4d780b14b330e3282
state 実行後のターゲットの状態 success string file
gid 実行後のファイルのグループID success int 100
mode 実行後のターゲットのパーミッション success string 0644
owner 実行後のファイルの所有者 success string httpd
group 実行後のファイルのグループ success string httpd
size 実行後のターゲットのサイズ success int 1220

以上です。戻り値については正常にファイルがコピーされたことの確認などに使用できるかと思います。いったんこちらで記事をアップしますが、後程実用例を挙げるかもしれません。
お疲れ様でした。