【问题标题】:Using SaltStack to append to lines in a file if a regex is found如果找到正则表达式,则使用 SaltStack 附加到文件中的行
【发布时间】:2014-10-26 08:05:30
【问题描述】:

本质上,我正在尝试将此 sed 命令转换为 Salt file.replace 方法:

sed -i '/^\s*kernel/ s/$/ elevator=noop/' /etc/grub.conf

它的作用是,如果它在 grub.conf 中找到以任意数量的空格开头然后是“内核”的行,它会将其替换为整个原始行 + 最后的电梯=noop。

这样:

kernel vmlinuz-2.6.32-431.29.2.el6.x86_64 [...] KEYTABLE=us rd_NO_DM rhgb quiet

变成:

kernel vmlinuz-2.6.32-431.29.2.el6.x86_64 [...] KEYTABLE=us rd_NO_DM rhgb quiet elevator=noop

但是当我直接将 sed cmd 复制到模式中并在 Salt 的 file.replace 中复制时,我得到了这一行:

s/$/ elevator=noop vmlinuz-2.6.32-431.29.2.el6.x86_64 [...] KEYTABLE=us rd_NO_DM rhgb quiet

【问题讨论】:

    标签: regex sed salt-stack


    【解决方案1】:

    我不精通sed,也无法完全理解您的sed 命令,但我注意到您可能错过的一件事是sed 使用$ 引用组,而Python 正则表达式使用\ 。

    除此之外,您的描述很清楚。所以:

    如果我在奴才上做了:

    echo "kernel vmlinuz-2.6.32-431.29.2.el6.x86_64 [...] KEYTABLE=us rd_NO_DM rhgb quiet" > /tmp/foo
    

    然后在master上:

    salt '*' file.replace /tmp/foo '(\s*kernel.*)' '\1 elevator=noop'
    

    结果:

    --- 
    +++ 
    @@ -1 +1 @@
    -kernel vmlinuz-2.6.32-431.29.2.el6.x86_64 [...] KEYTABLE=us rd_NO_DM rhgb quiet
    +kernel vmlinuz-2.6.32-431.29.2.el6.x86_64 [...] KEYTABLE=us rd_NO_DM rhgb quiet elevator=noop
    

    【讨论】:

      【解决方案2】:

      与其使用正则表达式,还有什么理由你不能用盐管理文件?

      salt 的作用是保存文件的副本。然后,您可以对 salt 上的文件进行更改,一旦您针对该特定服务器运行状态,它将使用 salt 端所做的更改进行更新。下面的链接应该提供更多的深度。

      http://docs.saltstack.com/en/latest/ref/states/all/salt.states.file.html

      【讨论】:

      • 有时在 salt master 上管理整个文件简直是矫枉过正,尤其是。当您只想对 grub config 之类的文件进行微小更改时,该文件也可以通过内核升级在 minion 上自动生成。强迫人们将每一个这样的副本复制到 salt config 中以使其正常化很容易被认为是愚蠢的。
      猜你喜欢
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-27
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      相关资源
      最近更新 更多