模块说明

  • copy模块将文件从本地或远程机器复制到远程机器上的某个位置。

参数说明

Parameter

Comments




attributes

aliases: attr

string

added in Ansible 2.3



生成的文件系统对象应具有的属性。

要获得支持的标志,请查看目标系统上chattr的手册页。

该字符串应包含与lsattr显示的顺序相同的属性。

=运算符被假定为默认值,否则+or-运算符需要包含在字符串中。




backup

boolean

added in Ansible 0.7



创建一个包含时间戳信息的备份文件,这样如果您以某种方式错误地破坏了原始文件,您就可以找回原始文件。

选择:

  • false ← (default)
  • true




checksum

string

added in Ansible 2.5



正在传输的文件的 SHA1 校验和。

用于验证文件的复制是否成功。

如果未提供,ansible 将使用 src 文件的本地计算校验和。




content

string

added in Ansible 1.1



当用于代替 src时,将文件的内容直接设置为指定值。

dest仅在文件时有效。如果文件不存在则创建文件。




decrypt

boolean

added in Ansible 2.4



此选项控制使用保管库对源文件的自动解密。

选择:

  • false
  • true ← (default)




dest

path / required



应将文件复制到的远程绝对路径。

如果src是一个目录,那么这个目录也必须是一个。

如果dest是不存在的路径,并且dest以“/”结尾,或者src是目录,则会创建dest。

如果dest是相对路径,则起始目录由远程主机确定。

如果src和dest是文件,则不会创建dest的父目录,如果该父目录不存在,则任务将失败。




directory_mode

any

added in Ansible 1.5



进行递归复制时,请设置目录的模式。

如果没有设置,我们将使用系统默认值。

该模式仅在新创建的目录上设置,不会影响那些已经存在的目录。




follow

boolean

added in Ansible 1.8



此标志表示目标中的文件系统链接(如果存在)应该被遵循。

选择:

  • false ← (default)
  • true




force

boolean

added in Ansible 1.1



影响是否必须始终替换远程文件。

如果为true,则当内容与源文件不同时,将替换远程文件。

如果为false,则只有在目标不存在的情况下才会传输文件。

选择:

  • false
  • true ← (default)




group

string



应该拥有文件系统对象的组的名称,将被馈送到chown。

如果未指定,它将使用当前用户的当前组,除非您是root用户,在这种情况下,它可以保留以前的所有权。




local_follow

boolean

added in Ansible 2.4



此标志指示源树中的文件系统链接(如果存在)应该被遵循。

选择:

  • false
  • true ← (default)




mode

any



目标文件或目录的权限。

对于那些习惯于/usr/bin/cmod的人,请记住,模式实际上是八进制数。您必须添加一个前导零,以便Ansible的YAML解析器知道它是一个八进制数(如0644或01777),或者引用它(如“644”或“1777”),以便Anible接收一个字符串,并可以自己从字符串转换为数字。在不遵循这些规则的情况下给Ansible一个数字,最终会得到一个十进制数字,这将产生意外的结果。

从Ansible 1.8开始,该模式可以被指定为符号模式(例如,u+rwx或u=rw,g=r,o=r)。

从Ansible 2.3开始,模式也可以是特殊的字符串保留。

preserve意味着该文件将被授予与源文件相同的权限。

执行递归复制时,请参见directory_mode。

如果未指定模式并且目标文件不存在,则在为新创建的文件设置模式时,将使用系统上的默认umask。

如果未指定模式,并且目标文件确实存在,则将使用现有文件的模式。

指定模式是确保使用正确权限创建文件的最佳方式。




owner

string



应该拥有文件系统对象的用户的名称,正如将要提供给chown的那样。

如果未指定,它将使用当前用户,除非您是root用户,在这种情况下,它可以保留以前的所有权。

指定数字用户名将被假定为用户ID,而不是用户名。避免使用数字用户名以避免这种混淆。




remote_src

boolean

added in Ansible 2.0



影响src是否需要传输或已经远程存在。

如果为false,它将在控制器节点上搜索src。

如果为true,它将在托管(远程)节点上搜索src。

remote_src从2.8版本开始支持递归复制。

remote_src仅适用于2.6版本的mode=preserve。

当remote_src=yes时,文件的自动解密不起作用。

选择:

  • false ← (default)
  • true




selevel

string



ELinux文件系统对象上下文的级别部分。

这是MLS/MCS属性,有时也称为范围。

当设置为_default时,它将使用策略的级别部分(如果可用)。




serole

string



SELinux文件系统对象上下文的角色部分。

当设置为_default时,它将使用策略的角色部分(如果可用)。




setype

string



SELinux文件系统对象上下文的类型部分。

当设置为_default时,它将使用策略的类型部分(如果可用)。




seuser

string



SELinux文件系统对象上下文的用户部分。

默认情况下,它会在适用的情况下使用系统策略。

当设置为_default时,它将使用策略的用户部分(如果可用)。




src

path



要复制到远程服务器的文件的本地路径。

这可以是绝对的,也可以是相对的。

若路径是一个目录,它将被递归复制。在这种情况下,如果路径以“/”结尾,则只有该目录的内部内容才会被复制到目标。否则,如果它不以“/”结尾,则会复制包含所有内容的目录本身。这种行为类似于rsync命令行工具。




unsafe_writes

boolean

added in Ansible 2.2



影响何时使用原子操作来防止数据损坏或从目标文件系统对象进行不一致的读取。

默认情况下,该模块使用原子操作来防止数据损坏或从目标文件系统对象进行不一致的读取,但有时会以防止这种情况发生的方式配置或破坏系统。一个例子是安装在docker上的文件系统对象,它不能从容器内部进行原子更新,只能以不安全的方式写入。

此选项允许Ansible在原子操作失败时返回到更新文件系统对象的不安全方法(但是,它不会强制Ansible执行不安全的写入)。

重要!不安全的写入会受到竞争条件的影响,并可能导致数据损坏。

选择:

  • false ← (default)
  • true




validate

string



将更新后的文件复制到最终目标之前要运行的验证命令。

临时文件路径用于验证,通过“%s”传入,该路径必须存在,如下例所示。

此外,该命令是安全传递的,因此扩展和管道等shell功能将无法工作。


示例

- name: Copy file with owner and permissions
  ansible.builtin.copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: '0644'

- name: Copy file with owner and permission, using symbolic representation
  ansible.builtin.copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: u=rw,g=r,o=r

- name: Another symbolic mode example, adding some permissions and removing others
  ansible.builtin.copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: u+rw,g-wx,o-rwx

- name: Copy a new "ntp.conf" file into place, backing up the original if it differs from the copied version
  ansible.builtin.copy:
    src: /mine/ntp.conf
    dest: /etc/ntp.conf
    owner: root
    group: root
    mode: '0644'
    backup: yes

- name: Copy a new "sudoers" file into place, after passing validation with visudo
  ansible.builtin.copy:
    src: /mine/sudoers
    dest: /etc/sudoers
    validate: /usr/sbin/visudo -csf %s

- name: Copy a "sudoers" file on the remote machine for editing
  ansible.builtin.copy:
    src: /etc/sudoers
    dest: /etc/sudoers.edit
    remote_src: yes
    validate: /usr/sbin/visudo -csf %s

- name: Copy using inline content
  ansible.builtin.copy:
    content: '# This file was moved to /etc/other.conf'
    dest: /etc/mine.conf

- name: If follow=yes, /path/to/file will be overwritten by contents of foo.conf
  ansible.builtin.copy:
    src: /etc/foo.conf
    dest: /path/to/link  # link to /path/to/file
    follow: yes

- name: If follow=no, /path/to/link will become a file and be overwritten by contents of foo.conf
  ansible.builtin.copy:
    src: /etc/foo.conf
    dest: /path/to/link  # link to /path/to/file
    follow: no

参考文档

https://docs.ansible.com/ansible/latest/collections/ansible/builtin/copy_module.html#ansible-collections-ansible-builtin-copy-module