RHCE8.0讲义:修改文件并将其复制到主机

来自CloudWiki
跳转至: 导航搜索

描述文件模块

红帽Ansible引擎附带了作为上游Ansible项目的一部分开发的一个大型模块集合(“模块库”)。为了便于整理、记录和管理这些模块,已根据文档中的功能以及在系统上安装的时间将它们分成多个组。

Files模块库包含的模块允许您完成与Linux文件管理相关的大多数任务,如创建、复制、编辑和修改文件的权限和其他属性。下表提供了常用文件管理模块的列表:

常用文件模块

模块名称	模块说明
blockinfile	插入、更新或删除由可自定义标记线包围的多行文本块。
copy	将文件从本地或远程计算机复制到受管主机上的某个位置。类似于 file模块,copy模块还可以设置文件属性,包括SELinux上下文。
fetch	此模块的作用和copy模块类似,但以相反方式工作。此模块用于从 远程计算机获取文件到控制节点,并将它们存储在按主机名组织的文 件树中。
file	设置权限、所有权、SELinux上下文以及常规文件、符号链接、硬链 接和目录的时间戳等属性。此模块还可以创建或删除常规文件、符号 链接、硬链接和目录。其他多个与文件相关的模块支持与file模块 相同的属性设置选项,包括copy模块。
lineinfile	确保特定行位于某个文件中,或使用反向引用正则表达式来替换现有 行。此模块主要在您想要更改文件中的某一行时使用。
stat	检索文件的状态信息,类似于Linux stat命令。
synchronize	围绕rsync命令的一个打包程序,可加快和简化常见任务。synchronize模块无法提供对rsync命令的完整功能的访问权 限,但确实使最常见的调用更容易实施。根据您的用例,您可能仍需 要通过run command模块直接调用rsync命令。

FILES模块的自动化示例

在受管主机上创建、复制、编辑和删除文件是您可以使用Files模块库中的模块实施的常见任务。 以下示例显示了可以使用这些模块自动执行常见文件管理任务的方式。

确保受管主机上存在文件

使用file模块处理受管主机上的文件。其工作方式与touch命令类似,如果不存在则创建一个空 文件,如果存在,则更新其修改时间。在本例中,除了处理文件之外,Ansible还确保将文件的拥有 用户、组和权限设置为特定值。

- name: Touch a file and set permissions
  file:
  path: /path/to/file
  owner: userl
  group: groupl
  mode: 0640
  state: touch

示例结果:

$ ls -1 file

-rw-r	 userl groupl 0 Nov 25 08:00 file


修改文件属性

您可以使用file模块,确保新的或现有的文件具有正确的权限和SELinux类型。

例如,以下文件保留了相对于用户主目录的默认SELinux ±下文,这不是所需的上下文。

$ Is -Z samba_file -rw-r--r-- owner group unconfined_u:object_r:user_home_t:s0 samba_file 以下任务确保了 samba_file文件的SELinux上下文类型属性是所需的samba_share_t类型。 此行为与Linux chcon命令类似。 -name: SELinux type is set to samba_share_t file: path: /path/to/samba_file setype: samba_share_t 不例结果: $ Is -Z samba_file -rw-r--r-- owner group unconfined_u:object_r:samba_share_t:s0 samba_file g注意 文件属性参数在多个文件管理模块中可用。运行ansible-doc file和ansible- doc copy命令以获取其他信息。 使SELinux文件上下文更改具有持久性 设置文件上下文时,file模块的行为与chcon类似。通过运行restorecon,可能会意外 地撤消使用该模块所做的更改。使用file设置上下文后,您可以使用System模块集合中的 sef context 来更新 SELinux 策略,semanage fcontext o -name: SELinux type is persistently set to samba_share_t sefcontext: target: /path/to/samba_file setype: samba_share_t state: present 示例结果: $ Is -Z samba_file -rw-r--r-- owner group unconfined_u:object_r:samba_share_t:sO samba_file m重要 sefcontext模块更新SELinux策略中目标的默认上下文,但不更改现有文件的上下 文。 在受管主机上复制和编辑文件 在此示例中,copy模块用于将位于控制节点上的Ansible工作目录中的文件复制到选定的受管主 机。 默认情况下,此模块假定设置了 force: yeso这会强制该模块覆盖远程文件(如果存在但包含与 正在复制的文件不同的内容)。如果设置force: no,则它仅会将该文件复制到受管主机(如果 该文件尚不存在)。 -name: Copy a file to managed hosts copy: src: file dest: /path/to/file 要从受管主机检索文件,请使用fetch模块。这可用于在将参考系统分发给其他受管主机之前从参 考系统中检索诸如SSH公钥之类的文件。 -name: Retrieve SSH key from reference host fetch: src: H/home/模板:User/.ssh/id_rsa.pub dest: "files/keys/({ user }).pub" 要确保现有文件中存在特定的单行文本,请使用lineinfile模块: -name: Add a line of text to a file lineinfile: path: /path/to/file line: 'Add this line to the file' state: present 要将文本块添加到现有文件'请使用blockinfile模块: -name: Add additional lines to a file blockinfile: path: /path/to/file block: I First line in the additional block of text Second line in the additional block of text state: present 団注意 白 使用blockinfile模块时,注释块标记插入到块的开头和结尾,以确保冨等性。

  1. BEGIN ANSIBLE MANAGED BLOCK

First line in the additional block of text Second line in the additional block of text

  1. END ANSIBLE MANAGED BLOCK

您可以使用该模块的marker参数,帮助确保将正确的注释字符或文本用于相关文 件。 从受管主机中删除文件 从受管主机中删除文件的基本示例是使用fi丄e模块和state: absent参数。state参数对于 许多模块是可选的。出于多个原因,您应始终明确您的意图,即您是需要state: present还是 state: absento 一些模块也支持其他选项。默认值可能会在某个时候发生变化,但也许最重要 的是可以更轻松地根据您的任务了解系统应处于的状态。

-name: Make sure a file does not exist on managed hosts file: dest: /path/to/file state: absent 检索受管主机上的文件状态 stat模块检索文件的事实,类似于Linux stat命令。参数提供检索文件属性、确定文件校验和等 功能。 stat模块返回一个包含文件状态数据的值的散列字典,允许您使用单独的变量引用各条信息。 以下示例注册stat模块的结果,然后显示它检查的文件的MD5校验和。(也可使用更现代的 SHA256算法;这里使用MD5以提高易读性。) -name: Verify the checksum of a file stat: path: /path/to/file checksum_algorithm: md5 register: result -debug msg: "The checksum of the file is {{ result.stat.checksum })" 结果应类似于下文: TASK [Get md5 checksum of a file] *************************************** ok: [hostname] TASK [debug] ************************************************************ ok: [hostname] => { "msg": "The checksum of the file is 5f76590425303022e933c43a7f2092a3" } 有关stat模块返回的值的信息由ansible-doc记录,或者您可以注册一个变量并显示其内容以 查看可用内容: -name: Examine all stat output of /etc/passwd hosts: localhost tasks: -name: stat /etc/passwd stat: path: /etc/passwd register: results -name: Display stat results debug: var: results 同步控制节点和受管主机之间的文件 synchronize模块是一个围绕rsync T具的打包程序,它简化了 playbook中的常见文件管 理任务。rsync工具必须同时安装在本地和远程主机上。默认情况下,在使用synchronize 模块时,“本地主机”是同步任务所源自的主机(通常是控制节点),而“目标主机”是 synchronize连接至U的主机。 以下示例将位于AnsibleT作目录中的文件同步到受管主机: -name: synchronize local file to remote files synchronize: src: file dest: /path/to/file 有很多种方法可以使用synchronize模块及其许多参数,包括同步目录。运行ansible-doc synchronize命令查看其他参数和playbook示例。 「卩参考文献 LJI ansible-doc⑴、chmod⑴、chown⑴、rsync⑴、stat(l)和 touch(l)帮助手 册 Files模块 https://docs.ansible.com/ansible/latest/modules/list_of_files_modules.html