Ansible Copy

Ansible は copy および fetch モジュールの助けによってファイルおよびディレクトリをコピーする機能を提供します。 コピーモジュールは、ローカルマシンからリモートサーバーにファイルやフォルダーをコピーするために使用されます。 そして、fetchモジュールは、リモートマシンからローカルマシンにデータをコピーするために使用します。

IPを変更した設定ファイルなど、変数で置換した後にファイルをコピーしたい場合、またはtemplateモジュールも使用することができます。

ローカルからリモートへのファイルコピー

コピーモジュールは、ローカルマシンのsrcパラメータに設定されたファイルを確認するために使用されます。

以下の例では、ローカルマシンのホームディレクトリにある sample.txt を、リモートサーバーの /tmp ディレクトリにコピーしています。 ファイルに対するパーミッションを指定していない限り、リモート ファイルのデフォルトのパーミッションは -rw-rw-r-(0664).

ケース 1:ファイルがリモート サーバーにすでに存在するが、ソース ファイルの内容が異なる場合、コピー先のファイルが変更されます。 forceパラメータを設定することにより、これを制御することができます。 デフォルトはyesに設定されています。 そのため、デフォルトでファイルを修正します。

ソースファイルの内容が異なる場合、ファイルを修正したくない場合は、Noに設定します。次のタスクは、ファイルがリモートサーバーに存在しない場合にファイルをコピーします。

ケース2:ファイルがローカルマシンに見つからなかった場合、Ansibleはエラーをスローします。

例:fatal:: FAILED!=> {“changed”: false, “failed”: true, “msg”: “unable to find ‘~/sample.txt’ in expected paths.”}

ローカルからリモートへのディレクトリのコピー

また、Ansible copy モジュールを使用して、フォルダまたはディレクトリをコピーすることも可能です。 src’ パスがディレクトリの場合、再帰的にコピーされます。 または、ディレクトリ全体がコピーされます。

このタスクには、2つの異なるバリエーションがあります。 src’ パスの終点に ‘/’ 文字があるかどうかによって異なります。

最初の方法は、リモート サーバー上に src パラメータに設定された名前のディレクトリを作成します。 その後、ソース フォルダーのコンテンツをそのディレクトリにコピー アンド ペーストします。

この動作が必要な場合は、src パラメーターのパスの後に ‘/’ を付与しません。

以下の例では、まずリモート サーバーの /tmp に copy_dir_ex という名前のディレクトリを作成します。

リモート マシンのディレクトリ間でファイルをコピーする

Ansibleコピーでは、同じリモート マシンのあるディレクトリから別のディレクトリへファイルをコピーすることができます。 しかし、これはファイルに対してのみであり、ディレクトリに対してはできません。 remote_src パラメータを使用して、Ansible にあなたの意図を知らせることができます。

以下のコードは /tmp/test.txt をユーザーのホーム ディレクトリ (/home//) にコピーします。