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

SLES 12环境下Ansible如何向配置指定行末尾追加条目

解决方法

原有playbook中修改pam_winbind.conf的逻辑存在三个核心问题,无法实现通用追加效果:

  • 正则表达式(^*2185915*)$语法非法,且没有锚定require_membership_of配置键,可能误改文件中其他无关行
  • 没有判断目标SID是否已经存在,重复执行playbook会反复追加同一个SID,导致配置格式错误
  • 没有兼容配置文件中不存在require_membership_of配置行的场景

要实现无论原有配置是什么内容,都能正确追加目标SID且保证幂等性,替换原有修改pam_winbind.conf的任务为以下两个任务即可:

- name: 追加目标SID到已存在的require_membership_of配置行末尾(不存在重复值时才修改)
    lineinfile:
      path: /etc/security/pam_winbind.conf
      regexp: '^require_membership_of=(?!.*S-1-5-21-84296906-944397292-530207130-587119)(.*)$'
      line: 'require_membership_of=\1,S-1-5-21-84296906-944397292-530207130-587119'
      backrefs: yes

  - name: 配置文件不存在require_membership_of行时直接新增配置
    lineinfile:
      path: /etc/security/pam_winbind.conf
      regexp: '^require_membership_of='
      line: 'require_membership_of=S-1-5-21-84296906-944397292-530207130-587119'
      state: present

逻辑说明

  • 第一个任务通过负向预查(?!.*目标SID)匹配所有已存在、且未包含目标SID的require_membership_of行,将原有配置值作为捕获组\1,在末尾拼接逗号和目标SID;如果行内已经存在目标SID,正则不会匹配,不会做任何修改,避免重复追加。
  • 第二个任务检测文件中是否存在require_membership_of开头的配置行,如果完全不存在该配置,就直接插入值为目标SID的配置行;如果已存在该行,不会做任何改动。
  • 该写法兼容所有场景:无论原有require_membership_of的值是空、单个SID、还是多个逗号分隔的SID,都能正确追加,且多次执行playbook不会产生脏配置。

原有备份配置、sudoers修改、winbind服务重启的任务不需要调整,保留即可。

内容的提问来源于stack exchange,提问作者user19310105

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:06:24