Ansibleは、リモートサーバーBから現在ログインしているリモートサーバーA(両方ともLinuxホスト)にzipファイルをインポートまたはコピーしようとします。以下のようにワイルドカードを使用してソースファイルを指定します。
- hosts: server-A
become: yes
tasks:
- name: copy the zip files
fetch:
src: /tmp/data/*.zip
dest: /tmp/app/
flat: yes
register: zip_status
delegate_to: server-B
以下は私が経験するエラーです。コピー/同期モジュールも試しましたが、機能しません。実際、ファイルはターゲットサーバーBに存在します。
fatal: [server-B -> 10.98.68.222]: FAILED! => {
"changed": false,
"invocation": {
"module_args": {
"src": "/tmp/data/*.zip"
}
"msg": "file not found: /tmp/data/*.zip"
頑張ったチームケネディの答え。上記のように、私は最初にServer-Aにログインしました。上記のコードに示すように、Server-Bに委任します。以下に1行追加しましたdelegate_to: server-B
。上記のように/tmp/data/
(サーバーB)から(サーバーA)に.zipファイルをコピーしたいと思います/tmp/app/
。
- hosts: server-A
become: yes
tasks:
- name: find the zip files
find:
paths: "/tmp/data"
recurse: no
patterns: "*.zip"
register: zip_files
delegate_to: server-B
- name: copy the zip files
fetch:
src: "{{ item.path }}"
dest: "/tmp/app/"
flat: yes
with_items: "{{ zip_files.files }}"
register: zip_status
delegate_to: server-B
検索モジュールを使用するとファイルが正しく表示されますが、/tmp/app/
ディレクトリがすでに存在する場合はディレクトリを作成しようとしているインポートモジュールを使用するとエラーが発生します。完全なライセンスを持っています。
fatal: [server-A]: FAILED! => {
"msg": "Unable to create local directories(/tmp/app/): [Errno 13] Permission denied: '/tmp'"
答え1
Fetchはディレクトリやワイルドカードをサポートしていません。文書では、文字列がファイル名として解釈され、ファイル名としてのみ解釈されることは非常に明確です。別の検索プロセスによって提供されるファイルのリストと共に使用できます。
たぶん、次のようなものがあります。
- hosts: server-A
become: yes
tasks:
- name: find the zip files
find:
paths: "/tmp/data"
recurse: no
patterns: "*.zip"
register: zip_files
- name: copy the zip files
fetch:
src: "{{ item.path }}"
dest: "/tmp/app/"
flat: yes
with_items: "{{ zip_files.files }}"
register: zip_status
delegate_to: server-B
これが私たちが望む方法で機能するかどうかは完全にはわかりませんが、少なくとも正しい方向を教えてくれます。