ansible——在受管节点上管理文件

1.对受管主机文件的常见管理方式

常用文件模块

模块作用
blockinfile将文本块添加到现有文件
copy将文件复制到受管主机
fetch从受管主机拷贝文件到控制节点
file设置文件属性
lineinfile确保特定行位于某个文件
stat检索文件状态信息
synchronizersync 命令的一个打包程序
file对文件进行处理:模块库包含创建、复制、编辑、修改等权限和其他属性,不存在则新建

示例:
①:在受管主机创建文件

---
 - name: Test
  hosts: rhel8_no1.test.com
  tasks:
    - name: Touch a file
      file:
         path: /mnt/file   ##路径
         owner: student
         group: student
         mode: 0640   #权限
         state: touch
    - name: Set SElinux
      file:
         path: /mnt/file
         setype: samba_share_t   #安全上下文
    - name: always  set selinux   
      sefcontext:   
          target : /mnt/file     ##永久修改文件的安全上下文
          setype: samba_share_t    
          state: present   

在这里插入图片描述
②:删除文件

 - name: delete file
  file:
     dest: /mnt/file
     state: absent    ##删除

③:检测文件的 MD5 校验和

 - name: Verify the status 
  stat: 
      path: /mnt/file 
      checksum_algorithm: md5 
  register: result 
 - debug: 
    msg: "The checksum is {{ result.stat.checksum }}"

④:同步控制节点和受管主机之间的文件

 - name: synchronize file 
  synchronize: 
      src: file 
      dest: /mnt/file

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

作用: 使用 jinja2 模板动态构建文件,可以更方便的管理文件
写法:

  • {% EXPR %} #表达式或者逻辑
  • {{ EXPR }} #最终向用户输出表达式或结果
  • {# COMMENT #} #注释

构建 jinja2 模板:
jinja2 模板由多个元素组成:数据、变量、表达式
模板中使用的变量可以在 playbook 的 vars 中指定 ,模板中所有的值都使用变量方式,将来会被受管主机对应的值替代

部署 jinja2 模板:

tasks: 
    - name: template
      template: 
          src: /root/j2-template.j2 
          dest: /root/dest-config-file.txt

jinjia2 的控制结构
jinja2 的循环和条件只能在模板中使用,不能在 playbook 中使用
使用循环:

#写法一:
 {% for user in users %} 
         {{ user }}   #user 变量将遍历 users 
 {% endfor %} 
 #写法二:

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

使用条件句 :

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

变量过滤器:

{{ output | to_json }}     #以 json 格式输出
{{ output | to_yaml }}      #以yml格式输出
{{ output | from_json }}  #对 json 格式字符串进行解析 
{{ output | from_yaml }}    #对 yml 格式字符串进行解析 

3. jinjia2 的练习

①:vim motd.j2构建jinjia2模板

This is the system {{ ansible_facts['fqdn'] }} 
This is a {{ ansible_facts['distribution'] }} version {{ ansible_facts['distribution_version'] }} system. 
System owner is {{ system_owner }}.

②:vim motd.yml 编写playbook, 部署jinjia2模板

---
- name: configure SOE
  hosts: rhel8_no1.test.com
  remote_user: student
  become: true
  vars:
    - system_owner: wsp439@sina.com
  tasks:
    - name: configure /etc/motd
      template:
         src: motd.j2   ##模板文件
         dest: /etc/motd    ##受管主机上的目标文件
         owner: root
         group: root
         mode: 0644

③:运行playbook,并验证受管主机上的文件是否得到修改
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值