RedHat Linux 8 中ansible程序 part6 管理受管主机文件操作

在受管节点上创建文件或目录

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

常用的文件模块

blockinfile#将文本块添加到现有文件
copy#将文件复制到受管主机
fetch#从受管主机拷贝文件到控制节点
file#设置文件属性
lineinfile#确保特定行位于某个文件
stat#检索文件状态信息
synchronize#rsync 命令的一个打包程序

测试1:
使用 file 模块处理文件,如果不存在就新建出来

---
- name: Test
  hosts: usersevers
  tasks:
    - name: Touch file
      file:
        path: /mnt/testfile		#写入需要创建的文件路径和文件名
        owner: redhat		# 文件拥有者
        group: root		#文件拥有组
        mode: 0555		#文件的权限
        state: touch
...

执行后去受管主机查看
在这里插入图片描述
在这里插入图片描述

测试2:
创建文件,并修改文件的安全上下文

---
- name: Test
  hosts: usersevers
  tasks:
    - name: Touch file
      file:
        path: /mnt/testfile
        owner: redhat
        group: root
        mode: 0555
        state: touch

    - name: Set up selinux
      file:
        path: /mnt/testfile
        setype: samba_share_t
...

执行后查看文件的安全上下文状态
在这里插入图片描述
但是这种修改方式是临时修改,使用命令刷新安全上下文就会还原
在这里插入图片描述
测试3:
创建文件,并永久修改文件的安全上下文

---
- name: Test
  hosts: usersevers
  tasks:
    - name: Touch file
      file:
        path: /mnt/testfile
        owner: redhat
        group: root
        mode: 0555
        state: touch

    - name: Set up selinux
      file:
        path: /mnt/testfile
        setype: samba_share_t

    - name: Save selinux
      sefcontext:
        target: /mnt/testfile
        setype: samba_share_t
        state: present
...

在这里插入图片描述
在受管主机上复制和编辑文件
可以使用到的模块有:blockinfile、 copy、 fetch、 lineinfile
例:

---
- name: Copy file
  hosts: usersevers
  tasks:
    copy:
      src: /mnt/testfile 	#文件原路径
      dest: /mnt/testfile	#复后存放的路径
...

检测受管主机上的文件状态
检测文件的 MD5 校验和输出结果

  tasks:
    - name: Touch file
      file:
        path: /mnt/testfile
        owner: redhat
        group: root
        mode: 0555
        state: touch

    - name: Verify the status
      stat:
        path: /mnt/testfile
        checksum_algorithm: md5
      register: result

    - debug:
       msg: "The checksum is {{ result.stat.checksum }}"
...

在这里插入图片描述


使用 jinja2 模板部署自定义文件

构建出模板可以更方便的管理文件
{% EXPR %} #表达式或者逻辑
{{ EXPR }} #最终向用户输出表达式或结果
{# COMMENT #} #注释

构建 jinja2 模板
jinja2 模板由多个元素组成:数据、变量、表达式
模板中使用的变量可以在 playbook 的 vars 中指定 模板中所有的值都使

用变量方式,将来会被受管主机对应的值替代
如:将 /etc/ssh/sshd_config 文件 中的配置替换为变量引用
Port 22 ==> Port {{ ssh_port }}
PermitRootLogin yes ==> {{ root_allowed }}

部署 jinja2 模板

tasks: 
  - name: template 
    template: 
      src: /root/j2-template.j2 
      dest: /root/dest-config-file.txt
结构设置

使用循环语句
jinja2 使用 for 语句提供循环:

{% for user in users %}
	{{ user }}	#user 变量将循环使用 users
{% endfor %}

{% for myhost in groups['myhosts'] %} #列出 myhosts 组中所有主机 
	{{ myhosts }} 
{% endfor %}

使用条件句

{% if finished %} #只有此条件为真,才会将 result 变量的值放入文件 
	{{ result }} 
{% endif %}

jinja2 的循环和条件只能在模板中使用,不能在 playbook 中使用

变量过滤器
{{ output | to_json }} #以 json 格式输出
{{ output | to_yaml }}
{{ output | from_json }} #对 json 格式字符串进行解析
{{ output | from_yaml }}

jinja2 模板由两个元素构成:变量和表达式,在使用 jinja2 模板时,他们被替换为值;
通过 jinja2 过滤器,模板表达式可以从一种数据格式转换为另一种。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Howei__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值