如何无需shell模块,以Ansible原生方式添加login.cfg缺失Shell条目?
无需shell模块的AIX login.cfg Shell配置自动化方案
你的需求是在AIX服务器的login.cfg文件中,当/usr/bin/bash未出现在shells配置行时,将其追加到行尾,且无需依赖shell模块实现,更贴合Ansible的原生风格。
可以直接通过lineinfile模块结合正则负向预查实现一步到位的幂等操作,无需提前执行检查命令:
--- - name: Ensure /usr/bin/bash is in login.cfg shells list hosts: your_aix_hosts tasks: - name: Append /usr/bin/bash to shells line if missing lineinfile: path: /etc/security/login.cfg regexp: "^(?P<indent>\\s+)shells =(?!.*\\/usr\\/bin\\/bash).*$" line: "\\g<indent>shells = \\g<0>,/usr/bin/bash" backrefs: yes
方案说明:
- 正则表达式逻辑:
^(?P<indent>\\s+)shells =:捕获行首的缩进空格(匹配AIX配置文件的格式),并命名为indent(?!.*\\/usr\\/bin\\/bash):负向预查,确保该行不包含/usr/bin/bash.*$:匹配该行剩余的所有内容
- line参数:
\\g<indent>:引用捕获的缩进,保持原文件格式一致\\g<0>:引用整个匹配到的行内容(即原shells配置部分),然后追加,/usr/bin/bash
- 幂等性保障:只有当
shells行确实缺少/usr/bin/bash时,才会执行修改操作,重复执行不会重复追加。
这个方案完全使用Ansible原生模块,避免了调用外部grep命令的依赖,更符合Ansible的声明式配置风格,同时保证操作的幂等性。
内容的提问来源于stack exchange,提问作者Trifo
相关产品推荐
相关产品推荐

