You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible中验证cgroup_vars项是否全部存在于cmd_vars中的方法

验证Cgroup变量在cmdline.txt中的存在状态

需求说明

搭建小型集群时,需要确保cgroup_vars中的所有参数都已写入/boot/firmware/cmdline.txt,同时生成包含每个参数存在状态的列表。

实现步骤(Ansible Playbook)

---
- name: 检查并验证cgroup变量状态
  hosts: cluster_nodes
  vars:
    # 定义需要检查的cgroup参数列表,根据实际需求调整
    cgroup_vars:
      - "cgroup_enable=cpuset"
      - "cgroup_memory=1"
      - "cgroup_enable=memory"
      - "cgroup_enable=blkio"
  tasks:
    # 读取cmdline.txt内容
    - name: 获取cmdline.txt内容
      command: cat /boot/firmware/cmdline.txt
      register: cmdline_content
      changed_when: false  # 避免该任务被标记为"已变更"

    # 将内容拆分为单个参数的列表
    - name: 拆分cmdline参数为列表
      set_fact:
        cmd_vars: "{{ cmdline_content.stdout.split() }}"

    # 逐个检查参数并生成状态列表
    - name: 生成cgroup参数存在状态列表
      set_fact:
        cgroup_status_list: "{{ cgroup_status_list | default([]) + [{'var': item, 'exists': item in cmd_vars}] }}"
      loop: "{{ cgroup_vars }}"

    # 打印状态列表,方便查看结果
    - name: 输出cgroup参数状态
      debug:
        var: cgroup_status_list

    # 可选:自动修复缺失的cgroup参数
    - name: 补全缺失的cgroup参数
      lineinfile:
        path: /boot/firmware/cmdline.txt
        regexp: '^(.*)$'
        line: '\1 {{ item.var }}'
        backrefs: true
      when: not item.exists
      loop: "{{ cgroup_status_list }}"
      notify: 重启节点生效

  # 重启节点的handler
  handlers:
    - name: 重启节点生效
      reboot:

结果说明

执行完playbook后,cgroup_status_list会输出类似如下结构的列表:

ok: [node1] => {
    "cgroup_status_list": [
        {
            "exists": true,
            "var": "cgroup_enable=cpuset"
        },
        {
            "exists": false,
            "var": "cgroup_memory=1"
        }
    ]
}

可以清晰看到每个cgroup参数的存在状态,若开启了自动修复任务,缺失的参数会被追加到cmdline.txt并触发节点重启。

内容的提问来源于stack exchange,提问作者Lasse Michael Mølgaard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 02:33:20