首页 > 解决方案 > 为什么ansible远程副本不能从本地工作

问题描述

我刚开始学习 ansible 并编写第一个copy模块,但我不知道为什么它不起作用。

---
 - hosts: osa
   tasks:
     - name: Copying file to remote host
       copy: src=/tmp/foo.txt dest=/tmp/bar.txt

运行剧本,但什么也没发生,也没有错误。

# /usr/bin/ansible-playbook /home/spatel/ansible/first-playbook.yml

PLAY [osa] **************************************************************************************************************************************************************************

TASK [Gathering Facts] **************************************************************************************************************************************************************
ok: [10.5.1.160]

TASK [Copying file to remote host] **************************************************************************************************************************************************
ok: [10.5.1.160]

PLAY RECAP **************************************************************************************************************************************************************************
10.5.1.160                 : ok=2    changed=0    unreachable=0    failed=0

我的 /etc/ansible/hosts 文件有远程主机 IP 地址:

[osa]
10.5.1.160

详细输出:

# ansible-playbook -vv first-playbook.yml
ansible-playbook 2.4.1.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 2.7.5 (default, Nov  6 2016, 00:28:07) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)]
Using /etc/ansible/ansible.cfg as config file

PLAYBOOK: first-playbook.yml ********************************************************************************************************************************************************
1 plays in first-playbook.yml

PLAY [osa] **************************************************************************************************************************************************************************
META: ran handlers

TASK [Copying file to remote host] **************************************************************************************************************************************************
task path: /home/spatel/ansible/first-playbook.yml:5
ok: [10.5.1.160] => {"changed": false, "checksum": "4383f040dc0303e55260bca327cc0eeb213b04b5", "failed": false, "gid": 0, "group": "root", "mode": "0644", "owner": "root", "path": "/tmp/bar.txt", "secontext": "unconfined_u:object_r:admin_home_t:s0", "size": 8, "state": "file", "uid": 0}
META: ran handlers
META: ran handlers

PLAY RECAP **************************************************************************************************************************************************************************
10.5.1.160                 : ok=1    changed=0    unreachable=0    failed=0

更新

我注意到它将文件复制到本地主机而不是远程主机,这没有任何意义,为什么它在输出中说它正在远程主机(10.5.1.160)上执行剧本??????

# ls -l /tmp/bar.txt
-rw-r--r--. 1 root root 16 May 24 10:45 /tmp/bar.txt

标签: linuxcopyansible

解决方案


我有一个类似的问题,它正在远程服务器上查找文件。您正在远程服务器上运行任务,hosts: osa但文件位于本地主机上。我可以用delegate_to: localhost解决它。

---
 - hosts: osa
   tasks:
     - name: Copying file to remote host
       delegate_to: localhost
       copy: src=/tmp/foo.txt dest=/tmp/bar.txt

但是,我什至必须首先从 localhost 获取文件,然后再将其提供给远程主机:

  - name: read files

    # This needs to run on localhost, because that's where
    # the keys are stored.
    delegate_to: localhost

    command: cat {{item}}

    # Register the results of this task in a variable called
    # "files"
    register: files

    with_fileglob:
      - "/tmp/*.txt"

  - name: show what was stored in the files variable
    debug:
      var: files

  - name: Copying file to remote host
     delegate_to: localhost
     copy: src="{{item.stdout}}" dest=/tmp/bar.txt
    with_items: "{{keys.results}}"

推荐阅读