IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 在被管理主机上创建文件或目录 -> 正文阅读

[系统运维]在被管理主机上创建文件或目录

在被管理主机上创建文件或目录

修改文件并将其复制到主机

描述文件模块

? 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: user
  hosts: "*"
  tasks:
    - name: file  
      file:
          path: /opt/test1  # 在/opt/下touch一个test1文件
          owner: harry      # 属于harry用户
          group: harry     # 属于harry组
          mode: 0644         # 权限为0644
          state: touch      # 状态为touch

修改文件属性

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

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

[root@localhost ~]# ls -Z samba_file
- rw-r--r-- owner group unconfined_u:object_r:user_home_t:s0 samba_file

? 以下任务确保了anaconda-ks.cfg文件的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

结果:

[root@localhost ~]# ls -Z samba_file
- rw-r--r-- owner group unconfined_u:object_r:samba_share_t:s0 samba_file

使SELinux文件上下文更具持久性

设置文件上下文时,file模块的行为与chcon类似。通过运行restorecon,可能会意外地撤消使用该模块所做的更改。使用file设置上下文后,用户可以使用system模块集合中的sefcontext来更新SELinux策略,如semanage fcontext

- name: SELinux type is persistently set to samba_share_t
  sefcontext:
    target: /path/to/samba_file
    setype: samba_share_t
    state: present

注意:sefcontext模块更新SELinux策略中目标的默认上下文,但不更改现有文件的上下文。

在受管主机上复制和编辑文件

在此示例中,copy模块用于将位于控制节点上的Ansible工作目录中的文件复制到选定的受管主机。

默认情况下,此模块假定设置了force: yes。这会强制该模块覆盖远程文件(如果存在但包含与正在复制的文件不同的内容)。如果设置force: no,则它仅会将该文件复制到受管主机(如果该文件尚不存在)。

---
- name: test
  hosts: "*"
  tasks:
    - name: cp
      copy:
        src: /etc/ansible/ll.yml # 复制控制机上的/etc/ansible/ll.yml
        dest: /opt/               # 受管主机上的/opt目录下

? 要从受管主机检索文件,请使用fetch模块。这可用于在将参考系统分发给其他受管主机之前从参考系统中检查诸如SSH公钥之类的文件。

---
- name: test
  hosts: "*"
  tasks:
    - name: fetch
      fetch:
        src: /opt/test1 # 受管主机上的/opt/test1文件复制到控制主机上的/etc/ansible下
        dest: /etc/ansible/
        
[root@localhost ansible]# ls
192.168.220.8  

[root@localhost ansible]# cd 192.168.220.8/
[root@localhost 192.168.220.8]# ls
opt
[root@localhost 192.168.220.8]# cd opt/
[root@localhost opt]# ls
test1

要确保现有文件中存在特定的单行文本,请使用lineinfile模块:

---
- name: user
  hosts: "*"
  tasks:
    - name: lineinfile
      lineinfile:               # 让/etc/selinux/config文件中存在"SELINUX=disabled"
         path: /etc/selinux/config  
         line: "SELINUX=disabled"  
         state: present     

要将文本块添加到现有文件,请使用blockinfile模块:

---
- name: user
  hosts: "*"
  tasks:
    - name: blockinfile 
      blockinfile:
        path: /etc/selinux/config
        block: |
                This is the first line
                This is the two line
        state: present  
 
 //结果       
# BEGIN ANSIBLE MANAGED BLOCK
This is the first line
This is the two line
# END ANSIBLE MANAGED BLOCK

注意:使用blockinfile模块时,注释块标记插入到块的开头和结尾,以确保幂等性。

从受管主机中删除文件

? 从受管主机中删除文件的基本示例是使用file模块和state: absent参数。state参数对于许多模块是可选的。一些模块也支持其他选项。

---
- name: user
  hosts: "*"
  tasks:
    - name: absent file
      file:                  # 删除受管主机上的/opt/test1文件
         path: /opt/test1
         state: absent        # 状态为不存在

检索受管主机上的状态

stat模块检索文件的事实,类似于Linux中的stat命令。参数提供检索文件属性、确定文件检验和等功能。

stat模块返回一个包含文件状态数据的值的散列字典,允许用户使用单独的变量引用各条信息。

以下示例注册stat模块的结果,然后显示它检查的文件,有关stat模块返回的值的信息由ansible-doc记录,或者可以注册一个变量并显示其内容以查看可用内容:

---
- name: user
  hosts: "*"
  tasks:
    - name: stat
      stat:
        path: /root/tset.sh # 检查受管主机上/root.tset.sh文件并打印输出
      register: result
    - debug: 
        var: result    
        
[root@localhost ansible]# ansible-playbook userl.yml 
.....
TASK [stat] ***************************************************************************************************
ok: [192.168.220.8]

TASK [debug] **************************************************************************************************
ok: [192.168.220.8] => {
    "result": {
        "changed": false,
        "failed": false,
        "stat": {
            "atime": 1627364248.4208493,
            "attr_flags": "",
            "attributes": [],
            "block_size": 4096,
            "blocks": 8,
            "charset": "us-ascii",
            "checksum": "c80b4e91e9e222f1ed8696579a403cda8b2ce9cb",
            "ctime": 1627364247.2038436,
            "dev": 64768,
            "device_type": 0,
            "executable": true,  
.....

同步控制主机和受管主机之间的文件

synchronize模块是一个围绕rsync工具的打包程序,它简化了playbook中的常见文件管理任务。rsync工具必须同时安装在本机和远程主机上。默认情况下,在使用synchronize模块时,“本地主机”是同步任务所源自的主机(通常是控制节点),而“目标主机”是synchronize连接到的主机。

以下示例将位于Ansible工作目录中的文件同步到受管主机:

(必须都安装rsync工具才行,yum -y install rsync)
---
- name: test
  hosts: "*"
  tasks:
    - name: sync
      synchronize:         # 将控制主机上的/etc/ansbile/loop目录同步到受管主机下/opt下
        src: /etc/ansible/loop
        dest: /opt/  

? 有很多种方法可以使用synchronize模块及其许多参数,包括同步目录。运行ansible-doc synchronize命令查看其他参数和playbook示例。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 16:36:09  更:2021-07-28 16:36:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 16:55:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码