Раскомментировать строку в Puppet

Я вхожу в Puppet, и мне это нравится, но я бьюсь головой о стену из-за одной мелочи, которая, я уверен, должна быть проще, чем я ее делаю.

Я хочу раскомментировать эту строку в .bashrc пользователя:

#force_color_prompt=yes

Я использовал augeas для многих вещей, но, похоже, с этим это не сработает.

Я отмечаю, что есть ресурс file_line, который я могу использовать, чтобы убедиться, что строка присутствует в файле, но мне нужно, чтобы строка оставалась на том же месте.

Я не хочу полностью заменять .bashrc своей собственной копией, несмотря на то, что этот шаблон популярен в Puppet, для меня это просто не имеет смысла, поскольку я не хочу поддерживать свою собственную версию между обновлениями.

В sed я использую это:

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

Любые идеи?


person Ludo    schedule 07.08.2012    source источник


Ответы (4)


Вы можете просто добавить свою команду sed в exec с параметром, если только с помощью grep. Что-то вроде этого (не проверено):

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 (я полагаю, что это часть модуля stdlib Puppet Labs), чтобы добавить строку без комментариев и оставить закомментированную строку нетронутой.

person czervik    schedule 08.08.2012
comment
Ты мой герой, спасибо! Невозможно просто добавить строку, так как важно расположение в сценарии, но ваше предложение отличное. Спасибо :) - person Ludo; 09.08.2012

По моему опыту, file_line заменит строку, соответствующую регулярному выражению.

Таким образом, чтобы получить force_color_prompt=yes против #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

person rutgoff    schedule 08.07.2013

shellvar уже может раскомментировать строки

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

Я воспринимаю это намного чище, чем использование exec и вызов sed.

person sumid    schedule 07.05.2015

В то время как один Augeas не может этого сделать, поставщик shellvar из Augeasproviders сможет это сделать всякий раз, когда это PR объединен.

person raphink    schedule 06.01.2014