📜  Ansible复制

📅  最后修改于: 2020-12-26 12:33:46             🧑  作者: Mango

Ansible副本

Ansible提供了在复制和获取模块的帮助下复制文件和目录的功能。复制模块具有多种功能。

复制模块用于将文件和文件夹从本地计算机复制到远程服务器。并且获取模块将数据从远程计算机复制到本地计算机。

如果要在替换变量后复制文件,例如IP更改的配置文件,或者也可以使用模板模块。您可以使用此模块执行许多复杂的任务。

将文件从本地复制到远程

复制模块用于检查本地计算机上src参数中设置的文件。然后,它将数据复制到destpath中指定的远程机器路径。

在下面的示例中,我们将本地计算机的主目录中的sample.txt文件复制到远程服务器上的/ tmp目录中。只要我们没有为文件指定任何权限,就将远程文件的默认权限设置为-rw-rw-r-(0664)

- hosts: blocks
  tasks:
  - name: Ansible copy file to a remote server
    copy:
      src: ~/sample.txt
      dest: /tmp 

情况1:如果远程服务器上已经存在该文件,但是源文件的内容不同,则将修改目标文件。您可以通过设置力参数来控制它。默认设置为是。因此,它默认情况下会修改文件。

如果您不希望修改文件,如果源文件不同,则可以将其设置为No。如果远程服务器上不存在该文件,则以下任务将复制该文件。

- hosts: blocks
  tasks:
  - name: Ansible copy file force
    copy:
      src: ~/sample.txt
      dest: /tmp 
      force: no

情况2:如果在本地计算机上找不到该文件,则Ansible会引发错误。

例如: fatal:[remote-machine-1]:FAILED!=> {“ changed”:false,“ failed”:true,“ msg”:“无法在预期路径中找到'〜/ sample.txt'。” }

将目录从本地复制到远程

您也可以使用Ansible复制模块复制文件夹或目录。如果“ src ”路径是目录,则将以递归方式复制它。否则将复制整个目录。

此任务有两种不同的变体。取决于您是否在“ src”路径的端点处使用“ /”字符。

第一种方法将在远程服务器上创建一个目录,其名称在src参数中设置。然后,它将复制源文件夹的内容并将其粘贴到该目录中。

如果您想要这种行为,那么它不会在src参数中的路径后给出'/'。

在下面的示例中,它将首先在远程服务器的/ tmp中创建一个名为copy_dir_ex的目录。

- hosts: blocks
  tasks:
  - name: Ansible copy the directory to the remote server
    copy:
      src:/Users/mdtutorials2/Documents/Ansible/copy_dir_ex
      dest:/Users/mdtutorials2/Documents/Ansible/tmp

在远程计算机上的目录之间复制文件

Ansible副本使您可以将文件从同一远程计算机上的一个目录复制到另一个目录。但这仅适用于文件,不适用于目录。您可以使用remote_src参数让Ansible知道您的意图。

下面的代码会将/tmp/test.txt复制到用户的主目录(/ home / [username] /)

---
-hosts: webservers 
tasks:
-name: copy the file between directories on a remote server
copy:
src: /tmp/test.txt
dest: ~/test.txt
remote_src: yes