ansible实战:「磁盘空间 ≥ 2G 时自动创建文件」

一、任务目标

在 openEuler 系统中,使用 Ansible 实现:

  1. 检查指定目录所在分区的剩余空间
  2. 当剩余空间 ≥ 2GB 时,自动在该目录下创建一个标记文件

二、前置准备

  1. 系统:openEuler(已安装 Ansible)
  2. 当前用户:lcy
  3. 工作目录:/home/lcy/management
  4. 目录权限:用户 lcy 对该目录有读写权限

三、步骤 1:确认磁盘空间(手动验证)

运行

复制代码
# 1. 查看所有分区使用情况(单位:KB)
df -k

# 2. 查看根分区 / 的剩余空间(单位:GB)
df -BG /

你会看到类似输出,确认可用空间 ≥ 2G:

复制代码
文件系统                 1G-块  已用  可用  已用% 挂载点
/dev/mapper/openeuler-root  13G   4G   8G   29% /

四、步骤 2:编写 Ansible Playbook

1. 进入工作目录(你当前已在该目录)

运行

复制代码
cd /home/lcy/management

2. 创建剧本文件

文件名:disk_ok.yml

yaml

复制代码
---
- name: 检查磁盘空间并创建文件
  hosts: test01
  gather_facts: yes
  become: false

  tasks:
    - name: 输出根分区剩余空间(字节)
      debug:
        msg: "{{ ansible_mounts[0].size_available }}"

    - name: 剩余空间 ≥ 2G 时创建文件
      file:
        path: "/home/lcy/management/disk_ok.txt"
        state: touch
        mode: '0644'
      when: (ansible_mounts[0].size_available / 1024 / 1024 / 1024) >= 2

五、逐行解释

1. 剧本开头

yaml

复制代码
---
- name: 检查磁盘空间并创建文件
  hosts: test01
  gather_facts: yes
  become: false
  • hosts: test01:和当前主机 test01 对应
  • gather_facts: yes:开启事实收集,这样 Ansible 会自动获取 ansible_mounts 信息
  • become: false:不需要管理员权限,和当前用户 lcy 一致

2. 获取挂载点信息的任务

yaml

复制代码
- name: 输出根分区剩余空间(字节)
  debug:
    msg: "{{ ansible_mounts[0].size_available }}"
  • ansible_mounts[0]:取第一个挂载点,就是根分区 /
  • .size_available:这个挂载点的剩余空间(单位:字节)
  • 运行后,输出一个数字(比如 36727005184),方便看到磁盘信息

3. 条件创建文件的任务

yaml

复制代码
- name: 剩余空间 ≥ 2G 时创建文件
  file:
    path: "/home/lcy/management/disk_ok.txt"
    state: touch
    mode: '0644'
  when: (ansible_mounts[0].size_available / 1024 / 1024 / 1024) >= 2
  • path: "/home/lcy/management/disk_ok.txt":和当前目录 /home/lcy/management 完全匹配
  • state: touch:创建文件
  • when: 条件里:
    1. ansible_mounts[0].size_available:拿到根分区剩余的字节数
    2. 除以 1024*1024*1024,把字节转换成 GB
    3. 判断是否 >= 2,如果满足条件,就创建文件

六、完整执行步骤

1. 进入工作目录

运行

复制代码
cd /home/lcy/management

2. 创建剧本文件

运行

复制代码
vim disk_ok.yml

把上面的剧本内容粘贴进去,保存退出。

3. 执行剧本

运行

复制代码
ansible-playbook disk_ok.yml

4. 验证文件是否创建成功

运行

复制代码
# 查看文件是否存在
ls -l /home/lcy/management/disk_ok.txt

# 查看文件内容(空文件,用来标记条件满足)
cat /home/lcy/management/disk_ok.txt

七、成功执行的输出参考

  • changed=1:表示文件已经被成功创建
  • failed=0:没有任何错误

相关推荐
陈随易2 小时前
在 VSCode 里,把项目一键部署到服务器
前端·后端·程序员
Highcharts.js2 小时前
教程:基于 React + Highcharts 构建一个单页应用程序、按需数据拉取与图表渲染
开发语言·前端·数据结构·react.js·前端框架·highcharts·页面应用
To_OC3 小时前
我被 useState 坑了两次之后,终于把它的脾气摸透了
前端·javascript·react.js
鱼樱前端3 小时前
我用 Claude Code 后,编码效率翻 3 倍。但更值钱的是别的。
前端·后端·ai编程
_lucas3 小时前
给知识库网站接入AI问答
前端·ai编程·全栈
前端糕手4 小时前
前端面试题大全:JavaScript + Vue3 + React + TypeScript + 工程化 + 性能优化
前端
我不叫武5 小时前
一个用 Rust 写的离线编码查询桌面工具
前端
Web4Browser6 小时前
指纹浏览器 API 自动化怎么接:启动 Profile、获取 CDP 端点并连接自动化框架
前端·网络·typescript·自动化
Patrick_Wilson6 小时前
从 React 到 Flutter:写给前端的一张跨端知识地图
前端·flutter·react.js
颜酱6 小时前
06 | 把 meta_config 同步进 MySQL(生成阶段)
前端·人工智能·后端