ansible常用模块之 -- copy模块 -- 将文件复制到远程位置

ansible常用模块之 -- copy模块 -- 将文件复制到远程位置

copy模块 – 将文件复制到远程位置

一、摘要

  • copy 模块将文件从本地或远程计算机复制到远程计算机上的某个位置。
  • 使用 fetch 模块将文件从远程位置复制到本地机器。
  • 如果需要在复制的文件中插入变量,请使用 template 模块。在 content 字段中使用变量将导致不可预知的输出。
  • 对于Windows目标,请使用win_copy模块。

二、参数

参数选项/默认值描述
attributes
string
生成的文件或目录应该具有的属性。
要获得支持的标志,请查看目标系统上的chatr手册页。
该字符串应该包含与lsattr显示的相同顺序的属性。
= 操作符为默认值,否则需要在字符串中包含 + 或 - 操作符。
backup
string
· no ←
· yes
创建一个包含时间戳信息的备份文件,以便在不正确地损坏原始文件时可以恢复原始文件。
checksum
string
正在传输文件的SHA1校验和。
用于验证文件的复制是否成功。
如果没有提供该选项,ansible将使用src文件的本地计算校验和。
content
string
当用来代替src时,直接将文件的内容设置为指定的值。
仅当dest为文件时有效。如果文件不存在,则创建该文件。
对于高级格式,或者如果内容包含变量,请使用 template 模块。
decrypt
boolean
· yes ←
· no
此选项使用vault控制源文件的自动解密。
dest
path
required
要将文件复制到的远程绝对路径。
如果 src 是一个目录,那么这个值也必须是一个目录。
如果 dest 是一个不存在的路径,并且 dest 以 “/” 结尾,或者 src 是一个目录,则创建 dest。
如果 dest 是相对路径,则起始目录由远端主机确定。
如果 src 和 dest 是文件,则不会创建 dest 的父目录,如果 dest 的父目录不存在,任务将失败。
directory_mode
raw
在进行递归复制时,设置目录的模式。
如果没有设置,我们将使用系统默认值。
该模式只设置在新创建的目录上,不会影响已经存在的目录。
follow
boolean
· no ←
· yes
这个标志表明,如果目标文件系统链接存在,那么应该遵循它们。
force
boolean
· yes ←
· no
影响是否必须始终替换远程文件。
如果是 yes:当内容与源文件不同时,将替换远程文件。
如果不是 no,则只有在目标文件不存在的情况下才会传输文件。
group
string
应该拥有该文件/目录的组的名称,将提供给 chown。
local_follow
boolean
· yes ←
· no
这个标志表明,如果源树中的文件系统链接存在,那么应该遵循它们。
mode
path
目标文件或目录的权限。
对于那些习惯了 /usr/bin/chmod 的人来说,记住模式实际上是八进制数。你必须添加一个前导零,这样Ansible的YAML解析器就知道这是一个八进制数(比如 0644 或 01777 ),或者引用它(比如 ‘644’ 或 ‘1777’ ),这样Ansible就可以接收到一个字符串,并可以进行自己的从字符串到数字的转换。给Ansible一个不遵循这些规则的数字将会得到一个十进制数,这将会产生意想不到的结果。
从Ansible 1.8开始,模式可以指定为符号模式(例如,u+rwx 或 u=rw, g=r, o=r)。
在Ansible 2.3中,模式也可以是特殊的字符串 preserve。
preserve 意味着该文件将被授予与源文件相同的权限
owner
string
应该拥有该文件/目录的用户名,将提供给chown。
remote_src
boolean
· no ←
· yes
影响src是否需要被传输或已经远程存在。
如果是 no,它将在原始/主机器上搜索 src。
如果是 yes,它将被发送到src的远程/目标机器上。
remote_src从2.8版本开始支持递归复制。
从2.6版本开始,Remote_src只能与mode=preserve一起工作。
selevel
string
Default:“s0”SELinux文件上下文的 level 部分。
这是 MLS/MCS 属性,有时称为 range。
当设置为 _default 时,它将使用策略的 level 部分(如果可用的话)。
serole
string
SELinux文件上下文的角色部分。
当设置为 _default 时,它将使用策略的角色部分(如果可用的话)。
setype
string
SELinux文件上下文的类型部分。
当设置为 _default 时,它将使用策略的类型部分(如果可用的话)。
seuser
string
SELinux文件上下文的用户部分。
默认情况下,它使用系统策略。
当设置为 _default 时,它将使用策略的用户部分(如果可用的话)。
src
path
要复制到远程服务器的文件的本地路径。
值可以是绝对路径,也可以是相对路径。
如果path是一个目录,则递归复制它。
在本例中,如果path以 “/” 结尾,则只复制该目录的内部内容到目标目录。否则,如果它不以 “/” 结尾,则复制包含所有内容的目录本身。此行为类似于rsync命令行工具。
unsafe_writes
boolean
· no ←
· yes
影响何时使用原子操作以防止数据损坏或从目标文件读取不一致。
默认情况下,该模块使用原子操作来防止数据损坏或从目标文件读取不一致,但有时系统的配置或破坏会防止这种情况发生。一个例子是docker装载的文件,它不能从容器内部原子地更新,只能以不安全的方式写入。
这个选项允许Ansible在原子操作失败时使用不安全的方法更新文件(然而,它并不强制Ansible执行不安全的写操作)。
重要!不安全的写操作会受到竞争条件的影响,并可能导致数据损坏。
validate
string
复制到位之前要运行的验证命令。
要验证的文件的路径是通过 '%s ’ 传入的,它必须像下面的示例中一样显示。
该命令是安全传递的,因此 shell 功能如扩展和管道将不起作用。

三、示例

# 复制具有所有者和权限的文件
- name: Copy file with owner and permissions
  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
  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
  copy:
    src: /srv/myfiles/foo.conf
    dest: /etc/foo.conf
    owner: foo
    group: foo
    mode: u+rw,g-wx,o-rwx

# 复制一个新的“ntp.conf”文件,如果原始文件与复制的版本不同,则备份原始文件
- name: Copy a new "ntp.conf file into place, backing up the original if it differs from the copied version
  copy:
    src: /mine/ntp.conf
    dest: /etc/ntp.conf
    owner: root
    group: root
    mode: '0644'
    backup: yes

# 在通过visudo验证后,复制一个新的“sudoers”文件到适当的位置
- name: Copy a new "sudoers" file into place, after passing validation with visudo
  copy:
    src: /mine/sudoers
    dest: /etc/sudoers
    validate: /usr/sbin/visudo -csf %s

# 在远程计算机上复制一个“sudoers”文件进行编辑
- name: Copy a "sudoers" file on the remote machine for editing
  copy:
    src: /etc/sudoers
    dest: /etc/sudoers.edit
    remote_src: yes
    validate: /usr/sbin/visudo -csf %s

# 使用内联内容复制
- name: Copy using inline content
  copy:
    content: '# This file was moved to /etc/other.conf'
    dest: /etc/mine.conf

# 如果follow=yes, /path/to/file将被foo.conf的内容覆盖
- name: If follow=yes, /path/to/file will be overwritten by contents of foo.conf
  copy:
    src: /etc/foo.conf
    dest: /path/to/link  # link to /path/to/file
    follow: yes

# 如果follow=no, /path/to/link将成为一个文件,并被foo.conf的内容覆盖
- name: If follow=no, /path/to/link will become a file and be overwritten by contents of foo.conf
  copy:
    src: /etc/foo.conf
    dest: /path/to/link  # link to /path/to/file
    follow: no

官方文档:https://docs.ansible.com/ansible/2.9/modules/copy_module.html#copy-module

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值