使用 Puppet 管理的 OpenStack 安装设置 dnsmasq_config_file

使用 Puppet 管理的 OpenStack 安装设置 dnsmasq_config_file

我们的 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 都会重新启动两次。一些额外的资源(例如我们的防火墙设置)已从上面的代码中删除,因为它们只会使示例变得混乱。

相关内容