我们的 OpenStack 安装是通过 Puppet 推出的。我们使用了出色的puppetlabs-openstack
模块。由于更新周期缓慢,我们仍然停留在版本5.0.2
,目前我们无法迁移到较新的版本。所以这个问题与 OpenStack 2014.2.2 有关。
我们当前的网络设置(GRE 隧道)强制我们通过 DHCP 向计算节点上的客户虚拟机宣布 MTU 为 1454。我们很清楚,我们可以通过在 中提供相关配置/etc/neutron/dnsmasq-neutron.conf
并在 中指定这一点来实现这/etc/neutron/dhcp_agent.ini
一点。现在的问题是,我们缺乏适当的 Puppet 知识来以“Puppet 方式”配置这些参数。
当前配置如下:
dnsmasq-neutron.conf
(1)我们使用文件资源在单个网络节点上的适当位置创建文件。这显然非常有效,我相信我们可以保持这种方式。
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) 目前,我们使用以下非常糟糕的方法将配置行注入文件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',
}
我们的第一个猜测是使用 Augeas,但它并没有按预期工作。而且我们知道一定有一种方法可以dnsmasq_config_file
以干净的 Puppet 管理方式设置属性。实际上,有一个参数class neutron::agents::dhcp
称为dnsmasq_config_file
,其默认值为未定义。
问题是:如何正确设置此参数?我们的当前网络节点的节点配置如下所示。
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',
}
}
上面提供的解决方案有效。但是,每次运行 Puppet 时,DHCP 代理/dnsmasq 都会重新启动两次。一些额外的资源(例如我们的防火墙设置)已从上面的代码中删除,因为它们只会使示例变得混乱。