通过 ansible 上传 sudoers.d 文件会出现语法错误,但在 vi 中打开并保存会修复它

通过 ansible 上传 sudoers.d 文件会出现语法错误,但在 vi 中打开并保存会修复它

好吧,我知道问题标题很糟糕,但情况本身也是如此。

我想做的是:

  1. 在本地创建一个包含 sudoers 配置的文件
  2. 使用 Ansible 通过模板模块上传该文件
  3. 使用模板模块的验证功能确保配置有效

到目前为止,一切都很好。现在出现了奇怪的部分:该文件的验证 ( validate: 'visudo -cf %s') 抛出错误。当我注释掉验证行时,文件会被上传,但手动验证 ( visudo -cf /etc/sudoers.d/foo_bar) 也会失败。使用 vi 打开文件,保存它 ( :wq) 而不进行任何更改,然后再次运行验证会成功。

我目前的工作论文:WTF?!

但已经很晚了,我也累了。如果有人有建议,请告诉我。一旦获得新信息,我将立即更新此问题,并且一旦我将解决方案归零,我将清理它。

答案1

您的文件可能缺少文件结尾换行符。sudo期望如此,并且visudo将无法验证缺少它的文件。在 Vi 中打开文件并保存它会在必要时在末尾添加换行符,从sudo的角度修复文件。

相关内容