首页 > 解决方案 > 复制文件(remote1->fetch->控制机->copy->remote2)

问题描述

我的剧本有 2 个远程主机和 1 个主节点。我希望将名为“.env”的文件与模块“Fetch”复制到主节点,然后使用模块“copy”将复制到远程主机 2

我的主人:

[jitsi]
185.139.68.189

[VideoBridge2]
46.17.104.103

[Jitsi_Stack]
185.139.68.189
46.17.104.103

[jitsi:vars]
ansible_python_interpreter=/usr/bin/python3

[VideoBridge2:vars]
ansible_python_interpreter=/usr/bin/python3

我的剧本:

---
- hosts: Jitsi_Stack
  tasks:

    - name: fetch /home/docker-jitsi-meet/.env
      fetch:
        src: /home/docker-jitsi-meet/.env
        dest: /home/
        flat: true
        when: inventory_hostname == "185.139.68.189"

    - name: Copy the file from master to VideoBridge2
      copy:
        src: /home/.env
        dest: /home/
        when: inventory_hostname == "46.17.104.103"

我得到错误:

root@lxd02:/etc/ansible/playbook/VideoBridges# ansible-playbook -vv File_copy_from_host_to_host.yaml
ansible-playbook 2.9.6
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 3.8.5 (default, Jan 27 2021, 15:41:15) [GCC 9.3.0]
Using /etc/ansible/ansible.cfg as config file

PLAYBOOK: File_copy_from_host_to_host.yaml **************************************************************************
1 plays in File_copy_from_host_to_host.yaml

PLAY [Jitsi_Stack] **************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************
task path: /etc/ansible/playbook/VideoBridges/File_copy_from_host_to_host.yaml:2
ok: [185.139.68.189]
ok: [46.17.104.103]
META: ran handlers

TASK [fetch /home/docker-jitsi-meet/.env] ***************************************************************************
task path: /etc/ansible/playbook/VideoBridges/File_copy_from_host_to_host.yaml:6
changed: [185.139.68.189] => {"changed": true, "checksum": "b445c33c0e4e59ef8624d22060cdbeb1e8953a86", "dest": "/home/.env", "md5sum": "89718e47f6f1fa3817a707f88e7c3774", "remote_checksum": "b445c33c0e4e59ef8624d22060cdbeb1e8953a86", "remote_md5sum": null}
fatal: [46.17.104.103]: FAILED! => {"changed": false, "msg": "file not found: /home/docker-jitsi-meet/.env"}

TASK [Copy the file from master to VideoBridge2] ********************************************************************
task path: /etc/ansible/playbook/VideoBridges/File_copy_from_host_to_host.yaml:13
ok: [185.139.68.189 -> localhost] => {"changed": false, "checksum": "b445c33c0e4e59ef8624d22060cdbeb1e8953a86", "dest": "/home/.env", "gid": 0, "group": "root", "mode": "0644", "owner": "root", "path": "/home/.env", "size": 10437, "state": "file", "uid": 0}
META: ran handlers
META: ran handlers

PLAY RECAP **********************************************************************************************************
185.139.68.189             : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
46.17.104.103              : ok=1    changed=0    unreachable=0    failed=1    skipped=0   

获救=0 忽略=0

任务 #1 工作正常,并将文件复制.env到我的本地主节点,但任务 2 完成但出现错误。我试图找到解决方案将近 3 天。

标签: ansiblecopyfetch

解决方案


我更改了我的host文件

[jitsi_app]
jitsi ansible_host=185.139.68.189

[videobridge_server]
videobridge ansible_host=46.17.104.103

[Jitsi_Stack]
jitsi
videobridge

[jitsi_app:vars]
ansible_python_interpreter=/usr/bin/python3

[videobridge_server:vars]
ansible_python_interpreter=/usr/bin/python3

并改变剧本:

---
- hosts: Jitsi_Stack
  gather_facts: yes
  tasks:

    - name: Here we are displaying the inventory_hostname values.
      debug:
         msg: "inventory_hostname = {{ inventory_hostname }}"

    - name: fetch.env from /home/docker-jitsi-meet/.env
      run_once: true
      fetch:
        src: /home/docker-jitsi-meet/.env
        dest: /home/.env
        flat: true
      when: inventory_hostname == "jitsi"

    - name: Copy the file .env from master to videobridge
      copy:
        src: /home/.env
        dest: /home/docker-jitsi-meet/.env
      when: inventory_hostname == "videobridge"

之后,一切正常。也许它会帮助某人!


推荐阅读