新手求助:如何基于ansible_mount将swap挂载项存为变量并禁用swap
基于ansible_mount实现永久禁用Swap的方案
实现前提
你目前靠正则匹配替换/etc/fstab禁用swap的方案,存在正则适配性差的问题——只要fstab里swap行的格式不标准(比如多余空格、字段顺序错位),就可能匹配失效。要求改用ansible_mount(即内置的ansible.builtin.mount挂载管理模块)的核心目的,就是靠模块自带的fstab解析能力,替代手写正则的不可靠操作。
完整可运行的任务代码
# 临时关闭所有运行态swap,即时生效 - name: Temporarily turn off all active swap ansible.builtin.command: swapoff -a become: true changed_when: true # 读取fstab文件原始内容 - name: Get raw content of /etc/fstab ansible.builtin.slurp: src: /etc/fstab register: fstab_raw # 提取所有未被注释的swap配置条目 - name: List uncommented swap entries in fstab ansible.builtin.set_fact: swap_entries: >- {{ fstab_raw.content | b64decode | regex_findall('^([^#]\S+)\s+swap\s+\S+\s+\S+\s+\d+\s+\d+', '\1') }} # 用ansible_mount清理所有swap的持久化配置,替代原来的replace正则操作 - name: Remove persistent swap configs via ansible_mount ansible.builtin.mount: path: "{{ item }}" fstype: swap state: absent backup: true loop: "{{ swap_entries }}" become: true
关键说明
- 核心替换逻辑:原来用
replace模块逐行正则注释swap行的操作,全部迁移到ansible_mount模块实现。模块本身内置了fstab的解析、修改能力,不需要手写整行正则匹配,只会精准定位fstype为swap的目标条目,不会误改普通磁盘挂载行。 - 最终效果和原需求完全对齐:任务执行后会即时关闭当前系统所有激活的swap,重启后fstab中的swap配置会被移除,不会自动激活swap。开启
backup: true参数后,模块会自动生成修改前的fstab备份文件,和原来手动注释留痕的效果完全一致。 - 原来重复定义的两个swapoff任务可以合并为单个
swapoff -a,避免冗余执行。
内容的提问来源于stack exchange,提问作者tonyzaa
相关产品推荐
相关产品推荐

