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
相关产品推荐
相关产品推荐

