当前位置: 首页 > news >正文

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: 这是另一个可能与你提到的selevel有所关联的参数,它用于指定SELinux类型(Type)。

八进制权限表示法

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

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

相关文章:

  • ASP .Net Core创建一个httppost请求并添加证书
  • 操作系统——信号
  • 椭圆曲线加密算法中公钥与私钥互换性分析
  • CSS 变量的优势
  • 移动语义和完美转发
  • java的构造方法——无参构造方法
  • 【JavaEE】Spring Boot MyBatis详解(二)
  • 企业为什么要进行数据资产管理工作:价值与案例剖析
  • 在Elasticsearch中-SpaceJam一个全文搜索的实例
  • Sping源码(九)—— Bean的初始化(非懒加载)— Bean的创建方式(factoryMethod)
  • 深(广)度优先遍历
  • STM32单片机-FLASH闪存
  • LC15.三数之和、LC22括号生成
  • OpenCV--滤波器(一)
  • Redis缓存的一些概念性问题
  • 网络传输文件的问题
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • JavaScript实现分页效果
  • miaov-React 最佳入门
  • RxJS: 简单入门
  • session共享问题解决方案
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 力扣(LeetCode)22
  • 你真的知道 == 和 equals 的区别吗?
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 携程小程序初体验
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 智能网联汽车信息安全
  • 回归生活:清理微信公众号
  • ​​​【收录 Hello 算法】9.4 小结
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #pragam once 和 #ifndef 预编译头
  • (2)空速传感器
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (二)测试工具
  • (二)丶RabbitMQ的六大核心
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (转)Oracle存储过程编写经验和优化措施
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .Net - 类的介绍
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .Net 6.0 处理跨域的方式
  • .NET 指南:抽象化实现的基类
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET大文件上传知识整理
  • .Net各种迷惑命名解释
  • .NET正则基础之——正则委托
  • @EnableConfigurationProperties注解使用
  • @EventListener注解使用说明
  • @staticmethod和@classmethod的作用与区别