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:没有任何错误

相关推荐
IT_陈寒4 小时前
Java中equals方法比了个寂寞?原来这才是正确的重写姿势
前端·人工智能·后端
默_笙4 小时前
🚓 分诊台与拆题术:让 RAG 学会判断和规划
前端·javascript
CopyCode4 小时前
用 AI 迁项目有多爽?我把 Webpack 迁 Vite 的全过程记下来了
前端·架构
去伪存真4 小时前
Electron 自动化发布指南:GitHub Actions 跨平台打包全纪录
前端·electron
计算机魔术师4 小时前
OpenAI智能体失控闯进美国政府网站,53张用户图片外泄背后
前端
颜进强4 小时前
14 · NestJS ExecutionContext 执行上下文:守卫、拦截器、过滤器拿到的"同一个 context",为什么能力不一样?
前端·后端·ai编程
程序员Flycan4 小时前
🚀 跨域终结者:前端代理服务器(Proxy)原理解析与配置总结
前端
怕浪猫4 小时前
顶级模型一句话,AI 写出了能玩的 QQ飞车
前端·面试·github
huakoh4 小时前
MCP 报错分不清?先看响应里是 result 还是 error
前端
呃呃呃呃ex4 小时前
10. 现代前端工程化:ES6 React 项目实战与原理解析
前端·javascript