Eu tenho a tendência de usar o tempo de modificação do arquivo manifest ou hiera no qual você está declarando as entradas do host e convertê-lo em um timestamp adequado para o serial. (Você também pode usar o que for o mais novo de um conjunto de arquivos se estiver dividido em vários arquivos ou um registro de data e hora para a alteração mais recente se for por meio de outra rota, como um banco de dados)
Infelizmente, o número de série máximo é um inteiro não assinado de 32 bits, portanto, você só pode usar números até 2147483647.
Isso não nos permite simplesmente usar segundos desde o unix epoch como o número de série, infelizmente . Em vez disso, o formato padrão é usar YYYYMMDDxx, mas isso exige que você tenha o número de série atual como estado, se você já o definiu na mesma data.
Como alternativa, e uma que não exige que você leia em um arquivo e incremente o número, eu uso o seguinte modelo in-line:
$serial_mtime_file = '/etc/puppetlabs/code/environments/production/site/profile/manifests/dns_dhcp_pxe.pp'
$serial_secs = inline_template("<%= File.mtime(@serial_mtime_file).strftime(\"%y%j\").to_s + (File.mtime(@serial_mtime_file).to_i % 86400).to_s %>")
notify { "Created magical serial number ${serial_secs}": }
validate_numeric($serial_secs)
Isso faz com que você tenha um formato YYDDDsssss (ano de 2 dígitos, dia de ano de 3 dígitos, segundo dígito de 5 dígitos), que funcionará até 2099 (se você iniciar em 2000 como eu fiz acima) e permite atualizar a cada segundo até então. Isso permite usar essa variável como um argumento para qualquer módulo existente que você deseja usar para criar as configurações de ligação, em vez de precisar de um modelo que possa ler de volta a serial existente (para incrementar).
Portanto, os modelos são aceitáveis se você for um pouco criativo sobre o local de onde obter o tempo para definir o número de série com:)
Eu usei o acima com o módulo camptocamp / bind puppetforge e isso funciona corretamente