Qual é uma boa maneira de testar a data/hora atual no fantoche para implementar uma alteração temporária?
por exemplo, acabamos de ter um problema de segurança com o NTP e demorou um pouco para o Debian lançar uma atualização. Parecia mais simples desligar o ntp por um tempo.
service { 'ntp':
# remember to re-enable this after ntp is secured. CVE-XXXXXXXXXX
ensure => "stopped",
...
}
Então isso requer lembrar de voltar e mudá-lo de volta. O que eu gostaria de ter feito seria tornar o valor do ensure
atributo dependente de um seletor que testasse a data em tempo de execução.
Alguém pode sugerir uma boa maneira de fazer isso?
Posso imaginar disponibilizar uma função por meio do analisador de marionetes para fazer isso, e seria bom saber se alguém já escreveu isso, mas pontos de bônus se você tiver uma maneira de fazer isso sem um módulo extra.
service { 'ntp':
ensure => date_is_after("23 Dec 2014"): {
true => "running",
false => "stopped"
}
...
}
Ocorre-me também que um teste baseado na versão atual do pacote ntp seria bastante elegante, mas também não tenho certeza de como você faria isso no puppet.
Para poder obter a versão atual do pacote NTP, você precisa escrever um fato personalizado que é enviado para cada host gerenciado
pluginsync
e discerne o valor consultando o gerenciador de pacotes local. Consulte https://docs.puppetlabs.com/facter/2.3/custom_facts.html para escrever fatos personalizados.Você pode então usar a
versioncmp()
função em seu manifesto para habilitar ou desabilitar condicionalmente o daemon NTP usando o valor desse fato e comparando-o com a versão boa conhecida do NTP que contém sua correção.Para usar a data no mestre, você pode escrever um shell wrapper simples
date
e invocá-lo a partir do manifesto usando a função generate .Você pode buscar o resultado em uma variável e enlouquecer.
Como o Puppet não compara strings usando
<
e>
gostabash
ouawk
faz, você provavelmente desejará usardate +%s
em vez disso, para poder comparar numericamente o carimbo de data/hora com qualquer data-alvo definida.Como um aparte, eu pessoalmente me abstenho de implementar esse tipo de coisa. Ele vem com um alto risco de cair em seu pé muito fortemente. Em vez disso, considere definir uma chave Hiera global, que você pode virar manualmente depois que seu calendário o lembrar de fazer isso. Não construa suas surpresas amigáveis em Puppet.
Você pode escrever um fato externo assim:
Para distribuí-lo, você pode colocá-lo em um novo módulo (por exemplo
modules/date/facts.d/date
).E então você pode fazer