7

私は Puppet を始めて、大好きになりましたが、小さなことで頭を壁にぶつけています。

.bashrcユーザーの次の行のコメントを外したい:

#force_color_prompt=yes

いろいろとオーゲアスを使ってきたのですが、これではうまくいかないようです。

file_lineファイルに行が存在することを確認するために使用できるリソースがあることに注意してください。ただし、行を同じ場所に残す必要があります。

このパターンが Puppet で一般的であることがわかっているにもかかわらず、完全に自分のコピーに置き換え.bashrcたくはありません。アップグレードの合間に自分のバージョンを維持したくないので、意味がありません。

sed では、これを使用します。

sed -i "s/#force_color_prompt=yes/force_color_prompt=yes/g" ~/.bashrc

何か案は?

4

4 に答える 4

7

grepを使用して、unlessオプションを使用してsedコマンドをexecに追加するだけです。このようなもの(テストされていません):

exec { 'force_color_prompt':
  command   => 'sed -i "s/#force_color_prompt=yes/force_color_prompt=yes/g" .bashrc'
  cwd       => '/home/user',
  shell     => true,
  unless    => 'grep -Fxq "force_color_prompt=yes" .bashrc',
}

または、あなたが言及したfile_lineリソース(私が信じているPuppet Labs stdlibモジュールの一部)を使用して、コメントを外して行を追加し、コメントを付けた行をそのままにしておきます。

于 2012-08-08T01:35:58.057 に答える
6

私の経験では、file_line は正規表現に一致する行を置き換えます。

したがって、force_color_prompt=yesvs . を取得#force_color_prompt=yesするには:

file_line {
    'color_prompt':
        path        => '/home/<youruser>/.bashrc',
        match       => 'force_color_prompt',
        line        => "force_color_prompt=yes",
}

重要なのは、正規表現が に一致する場合その場で置換が行われることです。線の位置ではなく、線が変更されます。ただし、正規表現が一致しない場合、その行はファイルの末尾に追加されます。

このエクスペリエンスは Puppet 3.1 でのものです。

参照: https://forge.puppetlabs.com/puppetlabs/stdlib

于 2013-07-08T18:14:15.547 に答える
1

shellvarはすでに行のコメントを解除できます

shellvar { '.bashrc':
  ensure    => present,
  target    => "/home/${your_user}/.bashrc",
  variable => 'force_color_prompt'
  uncomment => true,
}

これは、exec を使用して sed を呼び出すよりもはるかにクリーンだと思います。

于 2015-05-07T08:14:22.087 に答える