仅在远程主机上复制或移动文件

时间:2016-12-13 21:21:38

标签: move ansible-playbook glob

这应该可行,但不会,并给出以下错误(如下)。

我已经在stackoverflow herehere上阅读了几篇帖子,但在这种情况下似乎没有一个好的答案。我真的希望我只是缺少一些愚蠢的东西而且我已经在这里待了几个小时所以请不要介意我的嗤之以鼻,但我需要发泄。

既然ansible,2.3.0,只能在远程主机上复制/移动/重命名文件那么简单,我的意思是谁想要这样做?而且它也不能作用于globs(*)(比如当你不知道要处理什么文件时),两步法似乎是移动某些文件的唯一方法(仅限于远程主机)。但即使这样也行不通。

migrate_rhel2centos.yml

---
- hosts: RedHat
  become: true
  become_user: root
  become_method: sudo
  vars:
    repo_dir: /etc/yum.repos.d
  tasks:
  - name: create directory
    file: path=/etc/yum.repos.d/bak/ state=directory

  - name: get repo files
    shell: "ls {{ repo_dir }}/*.repo"
    register: repo_list

 - debug: var=repo_list.stdout_lines

 - name: move repo files  
   command: "/bin/mv -f {{ item }} bak"
   args:  
     chdir: "{{repo_dir}}"
   with_items: repo_list.stdout_lines


#################################

TASK [get repo files]     

**********************************************************************
changed: [myhost]

TASK [debug]    
**********************************************************************
ok: [myhost] => {
     "repo_list.stdout_lines": [
     "/etc/yum.repos.d/centric.repo", 
     "/etc/yum.repos.d/redhat.repo", 
     "/etc/yum.repos.d/rhel-source.repo"
   ]
}

TASK [move repo files]   
*******************************************************************
failed: [myhost] (item=repo_list.stdout_lines) => {"changed": true,    "cmd": ["/bin/mv", "-f", "repo_list.stdout_lines", "bak"], "delta": "0:00:00.001945", "end": "2016-12-13 15:07:14.103823", "failed": true, "item": "repo_list.stdout_lines", "rc": 1, "start": "2016-12-13 15:07:14.101878", "stderr": "/bin/mv: cannot stat `repo_list.stdout_lines': No such file or directory", "stdout": "", "stdout_lines": [], "warnings": []}
to retry, use: --limit @/home/jimm/.ansible/migrate_rhel2centos.retry

PLAY RECAP 
********************************
myhost : ok=5    changed=1    unreachable=0    failed=1   

3 个答案:

答案 0 :(得分:0)

name: copy files task
  shell: cp source/path/file destination/path/file 

这解决了我在远程主机上处理文件的问题。

答案 1 :(得分:0)

复制带有标志 remote_src

如果否,它将在始发/主计算机上搜索src。

如果是,它将转到src的远程/目标计算机。默认为否。

当前remote_src不支持递归复制。

https://docs.ansible.com/ansible/2.5/modules/copy_module.html

答案 2 :(得分:0)

您需要使用以下内容

with_items: "{{repo_list.stdout_lines}}"