Nossa instalação do OpenStack é lançada com o Puppet. Usamos o excelente módulo puppetlabs-openstack
para isso. Devido aos ciclos lentos de rotatividade, ainda estamos presos à versão 5.0.2
. No momento, não podemos migrar para uma versão mais recente. Portanto, essa questão está relacionada ao OpenStack 2014.2.2.
Nossa configuração de rede atual (GRE-tunneled) nos obriga a anunciar o MTU de 1454 via DHCP para as VMs convidadas em nossos nós de computação. Estamos cientes de que podemos fazer isso fornecendo a configuração relevante em /etc/neutron/dnsmasq-neutron.conf
e especificando isso em /etc/neutron/dhcp_agent.ini
. O problema agora é que nos falta o conhecimento Puppet adequado para configurar esses parâmetros como "Puppet-way".
A configuração atual é assim:
(1) Usamos um recurso de arquivo para criar o arquivo dnsmasq-neutron.conf
no local apropriado em nosso nó de rede única. Isso obviamente funciona muito bem e acredito que podemos continuar assim.
file { 'dnsmasq-neutron.conf':
name => '/etc/neutron/dnsmasq-neutron.conf',
mode => '0644',
owner => 'root',
group => 'neutron',
content => template('/etc/puppet/manifests/neutron/dnsmasq-neutron.erb')
}
(2) Atualmente usamos a seguinte maneira realmente ruim de injetar a linha de configuração no arquivo dhcp_agent.ini
.
exec { 'dnsmasq_config-file':
command => '/usr/bin/echo "dnsmasq_config_file=/etc/neutron/dnsmasq-neutron.conf" >> /etc/neutron/dhcp_agent.ini && /usr/sbin/service neutron-dhcp-agent restart',
user => 'root',
}
Nosso primeiro palpite foi usar Augeas, que não funcionou como pretendido. E sabemos que deve haver uma maneira de definir a propriedade dnsmasq_config_file
de maneira limpa e controlada pelo Puppet. Existe, na verdade, um parâmetro para class neutron::agents::dhcp
chamado dnsmasq_config_file
, cujo padrão é indefinido.
A questão é: Como alguém define corretamente este parâmetro? Nossa configuração atual do nó para o nó da rede pode ser encontrada abaixo.
node 'network.lan' inherits basenode {
class { '::openstack::role::network' :
#dnsmasq_config_file => '/etc/neutron/dnsmasq-neutron.conf'
}
file { 'dnsmasq-neutron.conf':
name => '/etc/neutron/dnsmasq-neutron.conf',
mode => '0644',
owner => 'root',
group => 'neutron',
content => template('/etc/puppet/manifests/neutron/dnsmasq-neutron.erb')
}
exec { 'dnsmasq_config-file':
command => '/usr/bin/echo "dnsmasq_config_file=/etc/neutron/dnsmasq-neutron.conf" >> /etc/neutron/dhcp_agent.ini && /usr/sbin/service neutron-dhcp-agent restart',
user => 'root',
}
}
A solução fornecida acima funciona. No entanto, os agentes DHCP / dnsmasq são reiniciados duas vezes a cada execução do Puppet. Alguns recursos adicionais, como nossas configurações de firewall, foram retirados do código acima, porque eles apenas sobrecarregariam o exemplo.