Раскомментируйте строку в кукольный
я попадаю в марионетку и люблю ее, но бьюсь головой о стену с одной маленькой вещью, которая, я уверен, должна быть легче, чем я ее делаю.
Я хочу раскомментировать эту строку в .bashrc
пользователь:
#force_color_prompt=yes
я использовал augeas для многих вещей, но кажется, что это не сработает с этим.
я замечаю, что есть file_line
ресурс, который я могу использовать для обеспечения строки присутствует в файле, но мне нужно, чтобы строка оставалась в том же месте.
Я не хочу заменить .bashrc
полностью с моей собственной копией, несмотря на то, что этот шаблон популярен в Puppet, он просто не имеет смысла для меня, поскольку я не хочу поддерживать свою собственную версию между обновлениями.
в sed я использую это:
sed -i "s/#force_color_prompt=yes/force_color_prompt=yes/g" ~/.bashrc
какие идеи?
4 ответов
вы можете просто добавить свою команду sed в exec с опцией unless, используя 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, который вы упомянули (часть модуля Puppet Labs stdlib, я считаю), чтобы добавить строку незафиксированной и оставить прокомментированную строку нетронутой.
по моему опыту, 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",
}
важно, если regex игр, замена происходит на место, т. е. это изменит линию, а не расположение линии. Если регулярное выражение не match однако строка будет добавлена в конец файла.
этот опыт с марионеткой 3.1.
на shellvar уже можно раскомментировать строки
shellvar { '.bashrc':
ensure => present,
target => "/home/${your_user}/.bashrc",
variable => 'force_color_prompt'
uncomment => true,
}
Я воспринимаю это намного чище, чем использование exec и вызов sed.
в то время как Augeas в одиночку не может этого сделать,shellvar
провайдер от Augeasproviders сможет это сделать, когда это PR сливается.