Estamos usando o Puppet para gerenciar uma instalação do OpenStack. Pilha aberta
consiste em um número de peças fracamente conectadas, todas se comunicando via
AMQP. Várias das partes usam um arquivo de configuração comum
( /etc/nova/nova.conf
), portanto, um recurso de serviço típico parece
isso:
service { 'openstack-nova-network':
ensure => running,
enable => true,
subscribe => File['/etc/nova/nova.conf'],
}
Isso tudo funciona muito bem.
Agora, estamos usando o Puppet para instalar um hotfix em alguns dos recursos subjacentes
Código Python. Quando substituímos um dos arquivos de origem do Python,
gostaria de reiniciar os serviços que fazem uso dele. Em geral, isso é
exatamente o mesmo conjunto de serviços que são assinados
/etc/nova/nova.conf
.
Eu estava esperando que eu pudesse fazer isso aproveitar o existente
dependências notificando o arquivo, assim ...
file { '/path/to/some/file':
source => 'puppet:///.../',
notify => File['/etc/nova/nova.conf'],
}
... mas isso não parece funcionar. Além de colocar em explícito
notify
entradas para cada serviço, existe uma maneira melhor de fazer isso?
UPDATE
Você sabe, estou começando a suspeitar que minha pergunta não estava totalmente clara. Gostaria de pedir desculpas pela confusão e tentar tornar meu pedido um pouco mais explícito:
Sei que posso fazer isso com um conjunto de dependências explícitas, como valores subscribe
nos serviços ou valores notify
nos arquivos instalados. O problema é que isso significa manter uma matriz M * N de dependências. Introduzir um novo arquivo significa:
- Atualizando M
service
resources ou
- Atualizando N
file
resources
Esse tipo de trabalho repetitivo de copiar e colar é propenso a erros, especialmente quando várias pessoas são responsáveis pela configuração.
Uma opção seria manter uma lista central de serviços:
$services = [ service1, service2, service ]
Porque então eu poderia fazer isso:
file { '/usr/lib/python/glance/notifier/notify_qpid.py':
notify => Service[$services],
}
Mas isso não vai funcionar, porque a lista de serviços é diferente em hosts diferentes. Possivelmente eu posso virar isso e manter uma lista de arquivos "hotfix":
$hotfix_files = [
'/usr/lib/python2.6/site-packages/glance/notifier/notify_qpid.py',
'/root/puppet/modules/openstack/files/nova/impl_qpid.py',
]
Em seguida, atualize todas as definições de serviço uma vez:
service { 'openstack-nova-network':
ensure => running,
enable => true,
subscribe => [
File['/etc/nova/nova.conf'],
File[$hotfix_files],
]
}
Mas isso ainda requer a manutenção manual da lista de arquivos modificados.
O que eu realmente quero fazer é dizer "notificar todos os serviços que estão inscritos em /etc/nova/nova.conf
".