Um cronograma parece fornecer o que você está procurando. Primeiro, você cria um recurso de programação que especifica quando as coisas podem ser executadas e quantas vezes em um determinado período.
schedule { "slow":
range => "1 - 5",
period => daily,
repeat => 1,
}
O exemplo acima só será avaliado ou executado durante as horas de 1h e 5h e no máximo uma vez. Você pode remover o parâmetro range
e ele será executado a qualquer hora do dia, mas novamente, apenas uma vez.
Em recursos, você especifica o meta-parâmetro schedule
para vinculá-los a o cronograma acima:
exec { "example":
command => "/usr/bin/foo",
unless => "/usr/bin/bar",
schedule => "slow",
}
Quando você executar o Puppet com --debug
, você verá o seguinte se já tiver sido avaliado o número de vezes especificado ou o intervalo não for aplicável:
debug: /Stage[main]//Exec[example]: Not scheduled
Se você tiver alguns recursos, poderá usar padrões de recursos dentro da classe você está restringindo a afetar todos os recursos do mesmo tipo:
Exec {
schedule => "slow",
}
Você precisaria fazer isso para cada tipo de recurso - Exec, File, Augeas, etc.
Algumas notas sobre como melhorar isso:
- Eu não sei como aplicá-lo a todos os tipos de recursos da classe
- A aplicação do meta-parâmetro
schedule
a uma classe parece não funcionar, pode valer a pena gerar um bug