Depois de pesquisar um pouco mais, descobri que file_line
é mais ou menos uma tentativa de melhor esforço no gerenciamento de arquivos de configuração não invasivos. Havia muitas outras pessoas fazendo queixas semelhantes às minhas. O consenso geral parece ser usar file_line
quando você quer fácil ler módulos de marionetes, mas prenda-se ao primeiro sinal de problema e comece a usar Augeas para todo o resto
A versão final do meu módulo de fantoches temporário:
class kiwiprep {
if ($::syslogng == "ABSENT"){
case $::operatingsystemmajrelease {
/^5/: {
$serviceName="syslog"
$confFile="/etc/syslog.conf"
}
/^(6|7)/: {
$serviceName="rsyslog"
$confFile="/etc/rsyslog.conf"
}
default:{
fail("Platform Not Supported")
}
}
service {$serviceName:
ensure => running,
enable => true,
}
file_line {'remove_kiwi_comment':
ensure => absent,
path => $confFile,
match => "^#.*Kiwi$",
line => "# Added for Kiwi",
match_for_absence => true,
}
augeas {"kiwi forwarder 1":
context => "/files$confFile",
changes => ["rm *[descendant::hostname = '10.19.24.50']"],
}
augeas {"kiwi forwarder 2":
context => "/files$confFile",
changes => ["rm *[descendant::hostname = '10.18.104.50']"],
}
}
}
(você notará que isso é específico do RHEL, alternações precisariam ser feitas para o SUSE ou Debian)
Como você pode ver, meu módulo final manteve o file_line
para o comentário, o que funciona bem para mim. Então, reverti para augeas
para remover qualquer objeto de nível superior que tivesse um descendente chamado hostname
cujo valor fosse o mesmo de um dos meus encaminhadores. Este módulo funcionou perfeitamente para mim quando se trata de limpar o ambiente. Em seguida, voltarei a usar file_line
para adicionar os novos encaminhadores, agora que eu limpei o antigo.