Como posso testar a data no fantoche para implementar uma regra temporária?

3

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 sair com uma atualização. Parecia mais simples simplesmente 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 alterá-lo de volta. O que eu gostaria de ter feito seria tornar o valor do atributo ensure dependente de um seletor que testou a data em tempo de execução.

Alguém pode sugerir uma maneira legal de fazer isso?

Posso imaginar disponibilizar uma função através do analisador de fantoches para fazê-lo, 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"
  }
  ...
}

Ocorreu-me também que um teste baseado na versão atual do pacote ntp seria bastante elegante, mas também não sei como você faria isso no fantoche.

    
por mc0e 21.12.2014 / 17:03

3 respostas

1

Para usar a data no mestre, você pode escrever um simples invólucro de shell para date e invocá-lo a partir do manifesto usando o gerar função .

$ echo -e '#!/bin/bash\n/bin/date -I\n' >/tmp/dater
$ chmod 755 /tmp/dater
$ bundle exec puppet apply -e 'notice(generate("/tmp/dater"))'
Notice: Scope(Class[main]): 2014-12-23

Você pode buscar o resultado em uma variável e enlouquecer.

$now = generate("/tmp/dater")

Como o Puppet não compara as strings usando < e > como bash ou awk do, provavelmente você desejará usar date +%s , para poder comparar numericamente o registro de data e hora a qualquer data desejada você definiu.

Como um aparte, eu pessoalmente me absteria de implementar esse tipo de coisa. Ele vem com um alto risco de cair em seu pé muito strongmente. Considere a possibilidade de 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 amistosas no Puppet.

    
por 23.12.2014 / 11:19
2

Para conseguir a versão atual do pacote NTP, você precisaria escrever um fato personalizado que seja enviado para cada host gerenciado via pluginsync e discernir o valor consultando o gerenciador de pacotes local. Consulte o link para escrever fatos personalizados.

Você pode usar a função versioncmp() em seu manifesto para habilitar ou desabilitar condicionalmente o daemon NTP usando o valor desse fato e comparando-o com a versão válida do NTP que contém sua correção.

    
por 21.12.2014 / 19:21
0

Você pode escrever um fato externo assim:

#!/bin/bash
echo "date=$(date '+%Y-%m-%d')"

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

if $::date > "2016-05-15" {
  ...
}
    
por 06.05.2016 / 21:39

Tags