ansible copy模块参选选项

copy模块用于将文件从ansible控制节点(管理主机)或者远程主机复制到远程主机上。其操作类似于scp(secure copy protocol)。

关键参数标红。

参数:

src:(source:源)

要复制到远程服务器的文件的本地路径。这可以是绝对的,也可以是相对的。若路径是一个目录它将被递归复制。如果路径以“/”结尾,则仅在其内容内部目录被复制到目标。否则,如果没有以“/”结尾,包含所有内容的目录本身为复制。此行为类似于“rsync”命令行工具。

对于远程到远程的复制,更推荐使用synchronizefetch模块。

模板文件除了直接复制文件外,src还可以是一个Jinja2模板文件,Ansible会在传输前根据变量渲染这个模板。

当复制模板文件时,文件扩展名应为.j2,表明这是一个需要渲染的模板文件。

dest:(destination:目的地)

选项:必须、必填

文件应复制到的远程绝对路径。如果“src”是目录,那么它也必须是目录。如果“dest”是不存在的路径,并且其中一个“dest“结束如果“/”或“src”是目录,则会创建“dest”。如果“dest”是相对路径,则起始目录为由远程主机确定。如果“src”和“dest”是文件,则“dest“的父目录未创建,如果任务尚未创建则会失败存在。

remote_src:(remote_source:远程源)

类型:bool        选项:可选

默认情况下,src参数指向本地主机的文件。但当你需要从远程主机复制文件到另一台远程主机时,可以将此参数设为yes,此时src应指向远程主机的文件路径。

owner:(description:主人;所有权人)

类型:str        选项:可选。        默认值: 保持与源文件相同的属主(如果可能的话)

文件的所有者,执行后返回:成功

描述: 指定远程主机上目标文件或目录的所有者的用户名。

group:(group:组;群;类)

类型:str        选项:可选。        默认值: 保持与源文件相同的属组(如果可能的话)

描述:指定目标文件或目录在远程主机上的所属用户组。执行后返回:成功

mode:(mode:模式;方式;形式;风格)

类型: 字符串                必填: 否        默认值: 保持与源文件相同的权限(如果可能的话)

描述: 设置目标文件或目录的权限。(权限值遵循标准的Unix八进制权限表示法。)

backup:(backup:备份)

类型:bool(布尔型参数)        必填: no

默认值为no,意味着不会自动备份文件。当你将其设置为yes时,Ansible会在覆盖远程主机上的目标文件之前,创建该文件的一个备份。

备份文件命名规则

备份文件通常会被保存在同一目录下,并且文件名会被修改以包含时间戳,以便于追踪和区分不同时间点的备份。备份文件的命名格式通常形如filename.ext.ansible_bak_YYYY-MM-DD_HH.MM.SS,其中YYYY-MM-DD_HH.MM.SS代表备份创建的日期和时间。

force:(force:力量;武力)

类型:bool        默认值:True        

当设置为yes时,即使目标文件和源文件内容相同也会强制复制。默认是yes,但当使用checksum参数时,会根据校验和决定是否复制。

checksum:(checksum:检查和)

类型:str        选项:可选

使用此参数可以让Ansible通过计算源文件的校验和(默认是SHA1)来决定是否需要复制,这对于大文件尤其有用,可以避免不必要的复制。

directory_mode:(directory_mode:目录属性)

类型:raw        选项:可选

当复制目录时,设置目录的权限模式。如果没有设置,将使用系统默认值。该模式仅设置在新创建的目录上,并且不会影响那些已经存在的。

content:(content:内容;含量;所容纳之物)

类型:str        选项:可选

当代替“src”使用时,设置文件的内容直接设置为指定值。仅当“dest”是文件时才有效。创建文件(如果有)不存在。对于高级格式,或者如果“内容”包含变量,使用[template]模块。

(当你不想从本地文件系统复制文件,而是想直接提供文件内容时,可以使用此参数。内容可以是字符串或者引用Ansible变量。)

特点和注意事项

contentsrc是互斥的,这意味着在一个copy任务中不能同时使用这两个参数。

当使用content时,你可以利用YAML的多行文本特性(使用|符号),方便地编写多行内容。

如果你需要对内容进行更复杂的处理,比如变量插值或循环,可能需要考虑使用template模块而非直接使用content

content选项非常适合于小规模的文本内容或者配置片段的部署,而对于大文件或二进制文件,直接指定源文件路径(使用src)会更加合适。

通过content选项,Ansible的copy模块提供了灵活的方式来处理文件内容的创建或更新,特别适合于自动化配置文件生成或简单文本文件的分发。

validate:(validate:验证;确认;使生效)

类型:str        选项:可选

对于特定类型的文件(如配置文件),可以提供一个命令来验证目标文件的有效性。

例如,对于Apache配置文件,你可以用validate: apache2ctl configtest来确保配置是有效的。

Security Enhanced Linux(安全上下文)

如果你想要设定与SELinux相关的安全上下文(Security Enhanced Linux),在Ansible的copy模块中,可能会用到的是以下几个与SELinux相关的参数:

seuser:

类型:str

  • seuser: 设置文件的安全上下文中的用户部分。

参数用于设置复制到远程主机上的文件或目录的SELinux安全上下文中的用户部分。SELinux(Security-Enhanced Linux)是一个为Linux系统提供强制访问控制(MAC)的安全模块,它增加了额外的安全层,通过标签和策略来控制进程对文件和资源的访问。

描述: 指定文件或目录在远程主机上的SELinux安全上下文中的用户字段。这个值通常用来定义文件应该由哪个SELinux用户类型来访问。

使用场景

当你在启用SELinux的系统上部署应用或配置文件时,正确设置SELinux上下文对于确保系统和服务能够正常运行至关重要。例如,如果你需要将一个文件设置为由HTTP服务的SELinux用户访问,你可能会使用像httpd_sys_content_t这样的用户标签。

serole:

类型:str

  • serole: 设置文件的安全上下文中的角色(role)部分,这可能就是你所询问的类似于selevel的部分,但实际上正确的参数名是serole

描述: 指定文件或目录在远程主机上的SELinux安全上下文中的角色字段。角色决定了哪些类型的进程可以访问哪种类型的文件。

使用场景

当你的部署环境中启用了SELinux,并且需要精确控制文件访问权限时,设置正确的角色就显得尤为重要。例如,在部署Web服务相关的文件时,你可能需要将其角色设置为system_r中的某个特定角色,如允许Web服务进程访问的httpd_sys_content_t所对应的角色。

selevel:

类型:str

  • selevel: 或许是想表达SELinux级别的设置,但标准的Ansible参数应该是secontext,它允许你指定完整的SELinux上下文,如system_u:object_r:my_custom_t:s0

与SELinux相关的选项通常是selinux状态下划线role(如selinux状态下划线userselinux状态下划线groupselinux状态下划线mode等),用于控制目标文件或目录的SELinux上下文设置。

setype: 

类型:str

  • setype: 这是另一个可能与你提到的selevel有所关联的参数,它用于指定SELinux类型(Type)。

当你复制文件到远程系统并且希望控制该文件的SELinux上下文类型时,可以使用setype参数。这个参数值应该是目标系统上有效的SELinux类型字符串。

例如:

- name: Copy file and set SELinux typecopy:src: /local/path/to/source/file.txtdest: /remote/path/destination/file.txtsetype: httpd_sys_content_t  # 指定SELinux类型

在这个例子中,复制到远程主机的file.txt将被赋予httpd_sys_content_t这个SELinux类型,这在Apache HTTP服务的上下文中比较常见,表示文件内容可供HTTP服务读取。 

注意事项

  • 确保你提供的SELinux类型是正确的并且适用于目标系统及文件用途。错误的类型可能导致服务无法访问文件或安全策略违反。
  • 使用setype前,确认远程系统启用了SELinux。如果SELinux未启用,这个参数将不起作用。
  • 除了setype之外,还可以使用seuserserole, 和 selevel(或综合使用的secontext)来完全控制文件的SELinux上下文。
  • 如果不确定需要设置的SELinux类型,可以先在目标系统上使用ls -Z命令查看类似文件的SELinux标签,或者使用chcon命令进行临时测试。

directory_mode:(目录模式)

类型:str                选项:可选                      默认值: 使用系统默认权限

(当复制目录时)设置递归复制的目录的权限模式。

描述: 指定在复制目录结构时新创建的目录的权限。权限值遵循标准的Unix八进制权限表示法。

使用场景

当你复制包含多级目录的结构至远程主机,并希望确保所有新创建的中间目录具有统一且非默认的权限时,directory_mode就显得非常有用。

示例

假设你正在部署一个应用,需要确保所有新创建的目录权限设置为750(所有者可读写执行,所属组可读执行,其他人无权限),你可以这样配置Ansible任务:

Yaml

1- name: Copy directory with specific mode for new directories
2  copy:
3    src: /path/to/local/directory
4    dest: /path/to/remote/directory
5    directory_mode: '0750'

在这个例子中,directory_mode: '0750'确保在复制目录结构过程中创建的所有新目录都具有权限750。请注意,原始目录中的文件和已存在的目录权限不会被改变,只有复制操作中新建的目录权限会被设置为指定值。

正确使用directory_mode可以帮助你更好地控制目录的权限,确保部署环境的一致性和安全性。

unsafe_writes:

类型: 布尔值                必填: 否                默认值false

 描述: 当设置为true时,允许Ansible在写入文件时不进行某些安全检查,比如跳过在NFS等网络文件系统上的权限检查或锁定检查。这可能在某些情况下帮助解决写入问题,但也可能引入安全隐患,因为它绕过了正常的安全措施。

使用场景

通常情况下,你应该保持这个选项为默认值false,以确保文件写入操作遵循标准的安全实践。但是,在遇到特定场景,比如与某些网络文件系统交互时遇到权限或锁冲突问题,可以考虑临时启用这个选项来尝试解决问题。

注意事项

  • 使用unsafe_writes: true应当谨慎,因为它可能破坏文件系统的完整性或导致并发写入问题。
  • 只应在明确了解潜在风险,并且没有其他可行解决方案的情况下使用。
  • 确保在问题解决后恢复此选项的默认值,以维持系统的安全性和稳定性。

示例

1- name: Copy file with unsafe writes enabled
2  copy:
3    src: /local/path/to/source_file
4    dest: /network/mounted/path/to/destination_file
5    unsafe_writes: true

在这个示例中,由于目标路径位于网络文件系统上,可能会遇到常规写入时的权限或锁问题,通过设置unsafe_writes: true尝试绕过这些问题完成文件复制。但请记住,这是最后的尝试手段,并且需要评估潜在的风险。

八进制权限表示法

在Unix/Linux中,文件权限由三组数字表示,每组数字分别对应文件所有者的权限、所属组的权限和其他用户的权限,每一组由三位组成,可能的位值包括4(读权限)、2(写权限)、1(执行权限)或0(无权限)。因此,一个典型的权限字符串可能是755,意味着:

  • 第一位7(4+2+1)代表所有者有读、写、执行权限。
  • 第二位5(4+1)代表所属组有读和执行权限。
  • 第三位5同样代表其他人有读和执行权限。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/33063.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“明天下班以后请假了,孩子中考“

「作者简介」:冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础著作 《网络安全自学教程》,适合基础薄弱的同学系统化的学习网络安全,用最短的时间掌握最核心的技术。 前几天约服务器…

上海市计算机学会竞赛平台2023年9月月赛丙组点对之和(一)

题目描述 给定两个数列 𝑎1,𝑎2,…,𝑎𝑛a1​,a2​,…,an​ 与 𝑏1,𝑏2,…,𝑏𝑛b1​,b2​,…,bn​,保证这些数字是 11 到 𝑛n 之间的整数,请计算 …

轻轻一按,即可加速您的 Mac

一键智能清理 让你的 Mac 电脑焕然一新 CleanMyMac X 是一款专业的 Mac 电脑清理软件,支持一键扫描 Mac 磁盘垃圾,智能清理垃圾文件和系统语言安装包,快速释放磁盘空间,让你的 Mac 电脑焕然一新! 智能扫描一键清理 Ma…

模板匹配算法:基于模板相关性匹配的手写数字识别

1 前言 得益于硬件技术的发展,基于深度学习的各种识别方法如火如荼,在各种应用场景中都取得很好的效果。本人入行深度学习领域若干年,做过很多项目的工程化评估,对于神经网络是如何工作的也解释不清楚,只是知道这样做是…

硬引用、软引用、弱引用、虚引用和原子引用

以下是不同类型引用的详细信息,通过表格展示原理、作用、使用场景和优缺点: 引用类型原理作用使用场景优点缺点硬引用默认的引用类型,只要有硬引用指向对象,垃圾收集器就不会回收该对象。确保对象在程序运行过程中一直存在。普通…

【IVIF】Equivariant Multi-Modality Image Fusion

2024CVPR Zixiang Zhao团队 分析透彻,方法耳目一新 统一融合架构 1、Motivation Our approach is rooted in the prior knowledge that natural imaging responses are equivariant to certain transformations 我们的方法根植于自然成像响应对于某些变换的等变性…

vscode python pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

在vscode中控制台运行python文件出现:无法将"pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 使用vscode开发python,需要安装python开发扩展: 本文已经安装,我们需要找的是python安装所在目录,本文…

【SparkStreaming】面试题

Spark Streaming 是 Apache Spark 提供的一个扩展模块,用于处理实时数据流。它使得可以使用 Spark 强大的批处理能力来处理连续的实时数据流。Spark Streaming 提供了高级别的抽象,如 DStream(Discretized Stream),它代…

大气的wordpress官网主题

海外就医wordpress主题 出国看病、海外就医是越来越多中产家庭的选择,此wordpress主题适合做相关业务的公司官网。 https://www.jianzhanpress.com/?p5220 通用多用途wordpress模板 中国红WordPress模板,适合服务行业企业建站的通用多用途wordpress模…

2024高考-优先选专业还是优先选学校

分数限制下,选好专业还是选好学校? 24年高考帷幕落下,一场新的思考与选择悄然来临。对于每一位高考考生,学校和专业都是开启大学新生活的两个前置必选项。但有时候“鱼与熊掌不可兼得”,在分数受限的条件下&#xff0…

Golang -----channel

Channel channel的作用 channel主要用于goroutine之间通讯和同步 设计思路是:不要通过共享内存来通讯,而是通过通讯来共享内存(前者就是传统的加锁,后者就是channel) channel的底层数据结构 type hchan struct {//channel分为无缓冲和有缓…

HashMap 的工作原理及其在 Java 中的应用?

在Java的数据结构中,HashMap是最常见且最重要的一个数据结构之一。HashMap是Java集合框架中的一部分,它存储的是键值对(Key-value)映射,也就是说,你可以通过键(Key)找到对应的值&…

选专业,如何分析自己的兴趣爱好?

在学习的过程中,我们对于有兴趣的学科往往精力充足,不知疲倦,从而相应科目的分数较高,而在得到较高的分数之后,个人自信更足,学习更轻松,竞争力更强大。 在专业选择当中,如果我们就…

urfread刷算法题day5|Set和排序|217. 存在重复元素

217. 存在重复元素 需要复习的知识点:Set、排序; Set

基于matlab的高斯滤波与图像去噪

1 高斯滤波原理 1.1 原理 高斯滤波是一种线性平滑滤波技术,主要用于消除图像中的高斯噪声。它的工作原理可以理解为对整幅图像进行加权平均的过程,即每个像素点的值都由其本身和邻域内的其他像素值经过加权平均后得到。 高斯滤波实质上是一种信号的滤…

驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法

在连接数据库的时候出现了下面图面中的错误,尝试集中方法后终于解决了这个问题。 1.修改驱动程序版本 出现这种错误可能是因为你的驱动程序版本不兼容,我们可以尝试修改版本解决。而我们的驱动程序往往是以依赖的形式导入,因此可以在maven仓…

【UG\NX二次开发】部件间表达式 (字符串类型的) 问题记录

问题描述: 参数化建模项目中,为了防止表达式由于顺序问题,导致报错。则统一修改完表达式再进行uf_modl_update更新模型。但针对于部件间表达式 (字符串类型的),某些情况下,会出现子部件的表达式…

HTML(16)——边距问题

清楚默认样式 很多标签都有默认的样式,往往我们不需要这些样式,就需要清楚默认样式 写法: 用通配符选择器,选择所有标签,清除所有内外边距选中所有的选择器清楚 *{ margin:0; padding:0; } 盒子模型——元素溢出 作…

MySQL锁、加锁机制(超详细)—— 锁分类、全局锁、共享锁、排他锁;表锁、元数据锁、意向锁;行锁、间隙锁、临键锁;乐观锁、悲观锁

文章目录 一、概述1.1 MySQL锁的由来1.2 锁定义1.3 锁分类 二、共享锁与排他锁2.1 共享锁(S锁)2.2 排他锁(X锁)2.3 MySQL锁的释放 三、全局锁3.1 介绍3.2 语法3.3 特点 四、表级锁4.1 介绍4.2 表锁4.3 元数据锁(Meta D…