Ansibleを使用して2つの管理対象ノード間でファイルをコピーするにはどうすればよいですか? 質問する

Ansibleを使用して2つの管理対象ノード間でファイルをコピーするにはどうすればよいですか? 質問する

2 つのリモート ノード間でファイルをコピーする必要があります。

  • ノードAはファイルが存在する管理対象ノードである
  • ノードBは、ファイルをコピーする管理対象ノードです。

すべての Ansible タスクを実行するコントロール ノードは、上記のノードのいずれでもないことに注意してください。

私は次のことを試しました:

scpAnsibleのシェルモジュールでコマンドを使用する

- hosts: machine2
  user: user2
  tasks:
    - name: Copy file from machine1 to machine2 
      shell: scp user1@machine1:/path-of-file/file1 /home/user2/file1

このアプローチはいつまでも続くことはありません。

fetchおよびcopyモジュールを使用する

- hosts: machine1
  user: user1
  tasks:
    - name: copy file from machine1 to local
      fetch: 
        src: /path-of-file/file1 
        dest: /path-of-file/file1
    
- hosts: machine2
  user: user2
  tasks:
    - name: copy file from local to machine2
      copy: 
        src: /path-of-file/file1 
        dest: /path-of-file/file1

このアプローチでは、次のようなエラーが発生します。

ファイル /Users//.ansible/cp/ansible-ssh-machine2-22- にアクセス中にエラーが発生しました。エラーは次のとおりです: [Errno 102] ソケットでは操作がサポートされていません: u'/Users//.ansible/cp/ansible-ssh-machine2-22-'

どうすればこれを実現できるでしょうか?

ベストアンサー1

として@ant31がすでに指摘している、あなたはsynchronizeモジュールはこれに対応しています。デフォルトでは、モジュールは制御マシンと現在のリモートホスト(inventory_host)の間でファイルを転送しますが、delegate_toタスクのパラメータ(これはタスク(モジュールのものではありません)。

タスクは または のどちらにも配置できますServerAServerB、それに応じて転送の方向を調整する必要があります (modeのパラメータを使用synchronize)。

タスクを配置するServerB

- hosts: ServerB
  tasks:
    - name: Transfer file from ServerA to ServerB
      synchronize:
        src: /path/on/server_a
        dest: /path/on/server_b
      delegate_to: ServerA

これはデフォルトの を使用するmode: pushため、ファイルはデリゲート ( ServerA) から現在のリモート ( ServerB) に転送されます。

これは奇妙に見えるかもしれません。なぜなら、タスクはServerB(経由hosts: ServerB)に配置されているためです。しかし、タスクは実際には委任されたホストで実行されるこの場合は です。したがって、からServerAにプッシュすることは確かに正しい方向です。また、単に委任しないことを選択することはできないことに注意してください。そうすると、転送が と の間で行われることになります。ServerAServerB制御ノードそしてServerB

タスクを配置するServerA

- hosts: ServerA
  tasks:
    - name: Transfer file from ServerA to ServerB
      synchronize:
        src: /path/on/server_a
        dest: /path/on/server_b
        mode: pull
      delegate_to: ServerB

これは、mode: pull転送方向を反転するために を使用します。繰り返しますが、タスクは実際には で実行されるServerBため、プルが正しい選択であることに留意してください。

おすすめ記事