Ansibleを使用してリモートサーバー(globを使用)から現在のサーバーにファイルをインポートまたはコピーすると、「ファイルが見つかりません:/ tmp / data / * .zip」が発生します。

Ansibleを使用してリモートサーバー(globを使用)から現在のサーバーにファイルをインポートまたはコピーすると、「ファイルが見つかりません:/ tmp / data / * .zip」が発生します。

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

これが私たちが望む方法で機能するかどうかは完全にはわかりませんが、少なくとも正しい方向を教えてくれます。

関連情報