Adapt synced Nova module for Fuel usage

Key moments:
    * Return implementation of type and provider for nova_floating_range
    * Make package 'bridge-utils' install optional
      commit - I744fe89e8d9dae79a5b822ac1a1ad4cee780bfc4
    * Add workaround for MySQL module
    * Fix duplication errors in openstack module
    * Revise patch for two dns servers
    * Fix lint issues
      commit: 7a4e067e9241a3fffec4b2d521f070f0bea1f50f
    * Add noop tests for new parameters

  Closes-bug: #1468230
  Closes-bug: #1469308

  Implements: blueprint upgrade-openstack-puppet-modules

Change-Id: Ie5732f4976d688f3788cc83d3b1bac7231fcd314
This commit is contained in:
iberezovskiy 2015-06-23 15:55:12 +03:00 committed by Ivan Berezovskiy
parent be8f2a9465
commit 2caf08909b
27 changed files with 485 additions and 55 deletions

View File

@ -0,0 +1,34 @@
# Master configuration file for the QEMU driver.
# All settings described here are optional - if omitted, sensible
# defaults are used.
# The user ID for QEMU processes run by the system instance.
user = "root"
# The group ID for QEMU processes run by the system instance.
group = "root"
# This is the basic set of devices allowed / required by
# all virtual machines.
#
# As well as this, any configured block backed disks,
# all sound device, and all PTY devices are allowed.
#
# This will only need setting if newer QEMU suddenly
# wants some device we don't already know about.
#
cgroup_device_acl = [
"/dev/null", "/dev/full", "/dev/zero",
"/dev/random", "/dev/urandom",
"/dev/ptmx", "/dev/kvm", "/dev/kqemu",
"/dev/rtc", "/dev/hpet", '/dev/net/tun',
]
# If clear_emulator_capabilities is enabled, libvirt will drop all
# privileged capabilities of the QEmu/KVM emulator. This is enabled by
# default.
#
# Warning: Disabling this option means that a compromised guest can
# exploit the privileges and possibly do damage to the host.
#
clear_emulator_capabilities = 0

View File

@ -0,0 +1,23 @@
Puppet::Type.type(:nova_floating).provide(:nova_manage) do
desc "Manage nova floating"
optional_commands :nova_manage => 'nova-manage'
def exists?
# Calculate num quads to grab for prefix
mask=resource[:network].sub(/.*\/([0-9][0-9]?)/, '\1').to_i
num_quads = 4 - mask / 8
prefix=resource[:network].sub(/(\.[0-9]{1,3}){#{num_quads}}(\/[0-9]{1,2})?$/, '') + "."
return nova_manage("floating", "list").match(/#{prefix}/)
end
def create
nova_manage("floating", "create", resource[:network])
end
def destroy
nova_manage("floating", "delete", resource[:network])
end
end

View File

@ -27,6 +27,7 @@ Puppet::Type.type(:nova_network).provide(:nova_manage) do
{
# this needs to be converted from a project name to an id
:project => '--project_id',
:dns1 => '--dns1',
:dns2 => '--dns2',
:gateway => '--gateway',
:bridge => '--bridge',

View File

@ -5,7 +5,7 @@ Puppet::Type.newtype(:nova_floating) do
ensurable
newparam(:network, :namevar => true) do
desc "Network (ie, 192.168.1.0/24 or 192.168.1.128/25 etc.)"
desc "Network (ie, 192.168.1.0/24 or 192.168.1.128/25 etc.)"
newvalues(/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\/[0-9]{1,2}$/)
end

View File

@ -0,0 +1,88 @@
Puppet::Type.newtype(:nova_floating_range) do
@doc = 'Manage creation/deletion of nova floating ip ranges.'
ensurable
newparam(:name, :namevar => true) do
desc 'IP range ("192.168.1.1-192.168.1.55")'
validate do |value|
raise Puppet::Error, " #{value} does not look like IP range" unless value =~ /^(\d{1,3}\.){3}\d{1,3}-(\d{1,3}\.){3}\d{1,3}$/
end
end
newparam(:pool) do
desc 'Pool ranges'
defaultto 'nova'
end
newparam(:interface) do
# I don't know how use it
desc 'Interface for floating IP'
end
newparam(:username) do
desc 'authorization user'
munge do |value|
String value
end
end
newparam(:api_key) do
desc 'authorization key'
munge do |value|
String value
end
end
newparam(:auth_method) do
desc 'authorization password'
munge do |value|
String value
end
end
newparam(:auth_url) do
desc 'URL to keystone authorization http://192.168.1.1:5000/v2.0/'
validate do |value|
raise Puppet::Error, "#{value} does not look like URL" unless value =~ /^https?:\/\/\S+:\d{1,5}\/v[\d\.]{1,5}\//
end
end
newparam(:authtenant_name) do
desc 'Tenant name'
munge do |value|
String value
end
end
newparam(:api_retries) do
desc 'number of API reconnect retries'
validate do |value|
raise Puppet::Error, "#{value} does not look like numeric" unless value.is_a?(Integer) || value =~ /^\d+$/
end
munge do |value|
Integer value
end
end
newparam(:service_type) do
desc 'Connection type :service_type parameter to "compute", "object-store", "volume" or "network" (defaults to "compute")'
defaultto 'compute'
munge do |value|
String value
end
end
end

View File

@ -34,7 +34,12 @@ Puppet::Type.newtype(:nova_network) do
newparam(:gateway) do
end
newparam(:dns1) do
desc 'first dns server'
end
newparam(:dns2) do
desc 'second dns server'
end
newparam(:vlan_start) do

View File

@ -60,6 +60,11 @@
# (optional) Whether to use Neutron for networking of VMs
# Defaults to true
#
# [*install_bridge_utils*]
# (optional) Whether to install the bridge-utils package or not.
# Applicable only for cases when Neutron was disabled
# Defaults to true
#
# [*network_device_mtu*]
# (optional) The MTU size for the interfaces managed by nova
# Defaults to undef
@ -120,6 +125,7 @@ class nova::compute (
$force_config_drive = false,
$virtio_nic = false,
$neutron_enabled = true,
$install_bridge_utils = true,
$network_device_mtu = undef,
$instance_usage_audit = false,
$instance_usage_audit_period = 'month',
@ -151,7 +157,7 @@ class nova::compute (
'DEFAULT/vnc_keymap': value => $vnc_keymap;
}
if $neutron_enabled != true {
if $neutron_enabled != true and $install_bridge_utils {
# Install bridge-utils if we use nova-network
package { 'bridge-utils':
ensure => present,

View File

@ -10,6 +10,26 @@
# This define creates a service resource with title nova-${name} and
# conditionally creates a package resource with title nova-${name}
#
# === Parameters:
#
# [*package_name*]
# (mandatory) The package name (for the generic_service)
#
# [*service_name*]
# (mandatory) The service name (for the generic_service)
#
# [*enabled*]
# (optional) Define if the service must be enabled or not
# Defaults to false.
#
# [*manage_service*]
# (optional) Manage or not the service (if a service_name is provided).
# Defaults to true.
#
# [*ensure_package*]
# (optional) Control the ensure parameter for the package ressource.
# Defaults to 'present'.
#
define nova::generic_service(
$package_name,
$service_name,

View File

@ -1,4 +1,10 @@
# Creates floating networks
#
# === Parameters:
#
# [*network*]
# (mandatory) The network name to work on
#
define nova::manage::floating ( $network ) {
File['/etc/nova/nova.conf'] -> Nova_floating[$name]

View File

@ -3,6 +3,10 @@
# [*network*]
# (required) IPv4 CIDR of network to create.
#
# [*label*]
# (optional) The label of the network.
# Defaults to 'novanetwork'.
#
# [*num_networks*]
# (optional) Number of networks to split $network into.
# Defaults to 1
@ -19,13 +23,23 @@
# (optional) Project that network should be associated with
# Defaults to undef
#
# [*dns1*]
# (optional) First DNS server
# Defaults to '8.8.8.8'
#
# [*dns2*]
# (optional) Second DNS server
# Defaults to '8.8.4.4'
#
define nova::manage::network (
$network,
$label = 'novanetwork',
$num_networks = 1,
$network_size = 255,
$vlan_start = undef,
$project = undef
$project = undef,
$dns1 = '8.8.8.8',
$dns2 = '8.8.4.4',
) {
File['/etc/nova/nova.conf'] -> Nova_network[$name]
@ -39,6 +53,8 @@ define nova::manage::network (
network_size => $network_size,
project => $project,
vlan_start => $vlan_start,
dns1 => $dns1,
dns2 => $dns2,
}
}

View File

@ -59,6 +59,10 @@
# (optional) Whether to install and enable the service
# Defaults to true
#
# [*nameservers*]
# (optional) DNS servers
# Defaults to ['8.8.8.8', '8.8.4.4']
#
class nova::network(
$private_interface = undef,
$fixed_range = '10.0.0.0/8',
@ -71,7 +75,8 @@ class nova::network(
$config_overrides = {},
$create_networks = true,
$ensure_package = 'present',
$install_service = true
$install_service = true,
$nameservers = ['8.8.8.8', '8.8.4.4'],
) {
include ::nova::params
@ -111,6 +116,8 @@ class nova::network(
num_networks => $num_networks,
network_size => $network_size,
vlan_start => $vlan_start,
dns1 => $nameservers[0],
dns2 => $nameservers[1],
}
if $floating_range {
nova::manage::floating { 'nova-vm-floating':

View File

@ -1,4 +1,14 @@
# bridge.pp
#
# === Parameters:
#
# [*ip*]
# (mandatory) IP address of the bridge interface.
#
# [*netmask*]
# (optional) Netmask of the bridge interface.
# Defaults to '255.255.255.0' (/24).
#
define nova::network::bridge (
$ip,
$netmask = '255.255.255.0'

View File

@ -85,7 +85,8 @@ class nova::params {
$compute_service_name = 'nova-compute'
$conductor_service_name = 'nova-conductor'
$consoleauth_service_name = 'nova-consoleauth'
$libvirt_service_name = 'libvirt-bin'
# Workaround for bug LP #1469308
$libvirt_service_name = 'libvirtd'
$network_service_name = 'nova-network'
$objectstore_service_name = 'nova-objectstore'
$scheduler_service_name = 'nova-scheduler'
@ -107,7 +108,9 @@ class nova::params {
default: {
$spicehtml5proxy_package_name = 'nova-spiceproxy'
$spicehtml5proxy_service_name = 'nova-spiceproxy'
$vncproxy_package_name = 'nova-novncproxy'
# Workadroung for bug LP #1468230
#$vncproxy_package_name = 'nova-novncproxy'
$vncproxy_package_name = 'nova-consoleproxy'
# some of the services need to be started form the special upstart provider
$special_service_provider = 'upstart'
$nova_log_group = 'adm'

View File

@ -123,6 +123,20 @@ describe 'nova::compute' do
end
end
context 'with install_bridge_utils set to false' do
let :params do
{ :install_bridge_utils => false }
end
it 'does not install bridge-utils package for nova-network' do
is_expected.to_not contain_package('bridge-utils').with(
:ensure => 'present',
:before => 'Nova::Generic_service[compute]'
)
end
end
context 'with vnc_enabled set to false' do
let :params do
{ :vnc_enabled => false }

View File

@ -0,0 +1,38 @@
require 'spec_helper'
describe Puppet::Type.type(:nova_floating).provider(:nova_manage) do
let(:resource) { Puppet::Type.type(:nova_floating).new(:name => '192.168.1.1' ) }
let(:provider) { resource.provider }
describe "#create_by_name" do
it "should create floating" do
provider.parse().should == ["192.168.1.1", nil]
end
end
for net in ['10.0.0.1', '10.0.0.0/16'] do
describe "#create #{net}" do
it "should create floating for #{net}" do
resource[:network]= net
provider.expects(:nova_manage).with("floating", "create", net)
provider.create()
end
end
describe "#destroy #{net}" do
it "should destroy floating for #{net}" do
resource[:network]= net
provider.expects(:nova_manage).with("floating", "delete", net)
provider.destroy()
end
end
describe "#check masklen #{net}" do
it "should returns right values for #{net}" do
resource[:network]= net
/([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})(\/([0-9]{1,2}))?/ =~ net
provider.parse().should == [Regexp.last_match(1), Regexp.last_match(3)]
end
end
end
end

View File

@ -0,0 +1,33 @@
require 'puppet'
require 'test/unit'
require 'mocha/setup'
require 'puppet/provider/nova_floating_range/nova_manage'
describe 'Puppet::Type.type(:nova_floating_range)' do
before :all do
type_class = Puppet::Type::Nova_floating_range.new(:name => '192.168.1.2-192.168.1.9')
@provider_class = Puppet::Type.type(:nova_floating_range).provider(:nova_manage).new(type_class)
# Mock for return existing ip addresses
floating_ip_info_mock = [OpenStack::Compute::FloatingIPInfo.new('address' => '192.168.1.2'),OpenStack::Compute::FloatingIPInfo.new('address' => '192.168.1.3')]
@provider_class.stubs(:connect).returns(true)
@provider_class.connect.stubs(:get_floating_ips_bulk).returns(floating_ip_info_mock)
end
it 'ip range should be correct splited' do
@provider_class.ip_range.should == ['192.168.1.2', '192.168.1.3', '192.168.1.4', '192.168.1.5', '192.168.1.6', '192.168.1.7', '192.168.1.8', '192.168.1.9']
end
it 'should correct calculate range and remove existing ips' do
@provider_class.operate_range.should == ['192.168.1.4', '192.168.1.5', '192.168.1.6', '192.168.1.7', '192.168.1.8', '192.168.1.9']
end
it 'should create cidr including first and last ip' do
@provider_class.mixed_range.should == ['192.168.1.4', '192.168.1.7', '192.168.1.8', '192.168.1.9', '192.168.1.4/30']
end
it 'should correct calculate intersection range ips' do
@provider_class.resource[:ensure] = :absent
@provider_class.operate_range.should == ['192.168.1.2', '192.168.1.3']
end
end

View File

@ -0,0 +1,27 @@
require 'puppet'
describe 'Puppet::Type.newtype(:nova_floating_range)' do
before :each do
@nova_floating_range = Puppet::Type.type(:nova_floating_range).new(:name => '10.0.0.1-10.0.0.254')
end
it 'should not expect a name without ip range' do
expect {
Puppet::Type.type(:nova_floating_range).new(:name => 'foo')
}.to raise_error(Puppet::Error, /does not look/)
end
it 'pull should be "nova" by default' do
@nova_floating_range[:pool].should == 'nova'
end
it 'auth url should be url' do
expect { @nova_floating_range[:auth_url] = 'h ttp://192.168.1.1:5000/v2.0/'
}.to raise_error(Puppet::Error, /does not look/)
end
it 'api retries should be numeric' do
expect { @nova_floating_range[:api_retries] = '3b'
}.to raise_error(Puppet::Error, /does not look/)
end
end

View File

@ -0,0 +1,26 @@
require 'puppet'
require 'puppet/type/nova_floating'
describe 'Puppet::Type.type(:nova_floating)' do
before :each do
@nova_floating = Puppet::Type.type(:nova_floating).new(:name => 'test_IP', :network => '192.168.1.2')
end
it 'should accept valid IP address' do
@nova_floating[:network] = '192.168.1.1'
@nova_floating[:network] == '192.168.1.1'
end
it 'should accept valid CIDR subnet' do
@nova_floating[:network] = '192.168.1.0/24'
@nova_floating[:network] == '192.168.1.0/24'
end
it 'should not accept masklen more 2 didits' do
expect {
@nova_floating[:network] = '192.168.1.0/245'
}.to raise_error(Puppet::Error, /Invalid value/)
end
it 'should not accept invalid ensure values' do
expect {
@nova_floating[:network] = 'qweqweqweqwe'
}.to raise_error(Puppet::Error, /Invalid value/)
end
end

View File

@ -261,18 +261,18 @@ The openstack::compute class deploys the following services:
An openstack compute class can be configured as follows:
class { 'openstack::compute':
private_interface => 'eth1',
internal_address => $ipaddress_eth0,
libvirt_type => 'kvm',
fixed_range => '10.0.0.0/24',
network_manager => 'nova.network.manager.FlatDHCPManager',
multi_host => false,
sql_connection => 'mysql://nova:nova_db_passwd@192.168.101.10/nova',
rabbit_host => '192.168.101.10',
glance_api_servers => '192.168.101.10:9292',
vncproxy_host => '192.168.101.10',
vnc_enabled => true,
manage_volumes => true,
private_interface => 'eth1',
internal_address => $ipaddress_eth0,
libvirt_type => 'kvm',
fixed_range => '10.0.0.0/24',
network_manager => 'nova.network.manager.FlatDHCPManager',
multi_host => false,
database_connection => 'mysql://nova:nova_db_passwd@192.168.101.10/nova',
rabbit_host => '192.168.101.10',
glance_api_servers => '192.168.101.10:9292',
vncproxy_host => '192.168.101.10',
vnc_enabled => true,
manage_volumes => true,
}
For more information on the parameters, check out the inline documentation in

View File

@ -61,7 +61,7 @@ class openstack::compute (
$nova_user_password,
# Network
# DB
$sql_connection = false,
$database_connection = false,
# Nova
$purge_nova_config = false,
# RPC
@ -130,6 +130,7 @@ class openstack::compute (
$libvirt_vif_driver = 'nova.virt.libvirt.vif.LibvirtGenericVIFDriver',
$storage_hash = {},
$neutron_settings = {},
$install_bridge_utils = false,
) {
#
@ -144,7 +145,6 @@ class openstack::compute (
}
}
$final_sql_connection = $sql_connection
$glance_connection = $glance_api_servers
case $::osfamily {
@ -242,7 +242,7 @@ class openstack::compute (
class { 'nova':
install_utilities => false,
ensure_package => $::openstack_version['nova'],
sql_connection => $sql_connection,
database_connection => $database_connection,
rpc_backend => $rpc_backend,
#FIXME(bogdando) we have to split amqp_hosts until all modules synced
rabbit_hosts => split($amqp_hosts, ','),
@ -259,7 +259,6 @@ class openstack::compute (
service_down_time => $nova_service_down_time,
notify_on_state_change => $notify_on_state_change,
memcached_servers => $memcached_addresses,
nova_shell => '/bin/bash',
}
if str2bool($::is_virtual) {
@ -288,6 +287,7 @@ class openstack::compute (
vncproxy_host => $vncproxy_host,
#NOTE(bogdando) default became true in 4.0.0 puppet-nova (was false)
neutron_enabled => ($network_provider == 'neutron'),
install_bridge_utils => $install_bridge_utils,
instance_usage_audit => $instance_usage_audit,
instance_usage_audit_period => $instance_usage_audit_period,
}
@ -310,23 +310,24 @@ class openstack::compute (
# when we use Ceph for ephemeral storage or for Cinder. We only need to
# modify the libvirt_disk_cachemodes in that case.
if ($storage_hash['ephemeral_ceph'] or $storage_hash['volumes_ceph']) {
$disk_cachemodes = ['"network=writeback,block=none"']
$disk_cachemodes = ['"network=writeback,block=none"']
$libvirt_inject_partition = '-2'
} else {
if $::osfamily == 'RedHat' {
nova_config { 'libvirt/inject_partition': value => '-1'; }
}
else {
nova_config { 'libvirt/inject_partition': value => '1'; }
$libvirt_inject_partition = '-1'
} else {
$libvirt_inject_partition = '1'
}
$disk_cachemodes = ['"file=directsync,block=none"']
}
# Configure libvirt for nova-compute
class { 'nova::compute::libvirt':
libvirt_virt_type => $libvirt_type,
libvirt_cpu_mode => $libvirt_cpu_mode,
libvirt_disk_cachemodes => $disk_cachemodes,
vncserver_listen => $vncserver_listen,
libvirt_virt_type => $libvirt_type,
libvirt_cpu_mode => $libvirt_cpu_mode,
libvirt_disk_cachemodes => $disk_cachemodes,
libvirt_inject_partition => $libvirt_inject_partition,
vncserver_listen => $vncserver_listen,
}
# From legacy libvirt.pp

View File

@ -267,7 +267,7 @@ class openstack::nova::controller (
quota_metadata_items => 1024,
quota_max_injected_files => 50,
quota_max_injected_file_content_bytes => 102400,
quota_max_injected_file_path_bytes => 4096,
quota_injected_file_path_length => 4096,
quota_driver => $nova_quota_driver
}
@ -314,6 +314,7 @@ class openstack::nova::controller (
neutron_metadata_proxy_shared_secret => $neutron_metadata_proxy_shared_secret,
require => Package['nova-common'],
osapi_compute_workers => min($::processorcount + 0, 50 + 0),
keystone_ec2_url => "http://${keystone_host}:5000/v2.0/ec2tokens",
}
# From legacy init.pp
@ -331,7 +332,6 @@ class openstack::nova::controller (
nova_config {
'DEFAULT/allow_resize_to_same_host': value => true;
'DEFAULT/api_paste_config': value => '/etc/nova/api-paste.ini';
'DEFAULT/keystone_ec2_url': value => "http://${keystone_host}:5000/v2.0/ec2tokens";
'keystone_authtoken/signing_dir': value => '/tmp/keystone-signing-nova';
'keystone_authtoken/signing_dirname': value => '/tmp/keystone-signing-nova';
}

View File

@ -22,13 +22,13 @@ describe 'openstack::compute' do
end
it {
should contain_class('nova').with(
:sql_connection => false,
:rabbit_host => false,
:rabbit_userid => 'nova',
:rabbit_password => 'rabbit_pw',
:image_service => 'nova.image.glance.GlanceImageService',
:glance_api_servers => false,
:verbose => false
:database_connection => false,
:rabbit_host => false,
:rabbit_userid => 'nova',
:rabbit_password => 'rabbit_pw',
:image_service => 'nova.image.glance.GlanceImageService',
:glance_api_servers => false,
:verbose => false
)
should contain_class('nova::compute').with(
:enabled => true,
@ -68,7 +68,7 @@ describe 'openstack::compute' do
:private_interface => 'eth1',
:internal_address => '127.0.0.1',
:public_interface => 'eth2',
:sql_connection => 'mysql://user:passwd@host/name',
:database_connection => 'mysql://user:passwd@host/name',
:nova_user_password => 'nova_pass',
:rabbit_host => 'my_host',
:rabbit_password => 'my_rabbit_pw',
@ -85,13 +85,13 @@ describe 'openstack::compute' do
end
it {
should contain_class('nova').with(
:sql_connection => 'mysql://user:passwd@host/name',
:rabbit_host => 'my_host',
:rabbit_userid => 'my_rabbit_user',
:rabbit_password => 'my_rabbit_pw',
:image_service => 'nova.image.glance.GlanceImageService',
:glance_api_servers => ['controller:9292'],
:verbose => true
:database_connection => 'mysql://user:passwd@host/name',
:rabbit_host => 'my_host',
:rabbit_userid => 'my_rabbit_user',
:rabbit_password => 'my_rabbit_pw',
:image_service => 'nova.image.glance.GlanceImageService',
:glance_api_servers => ['controller:9292'],
:verbose => true
)
should contain_class('nova::compute').with(
:enabled => true,

View File

@ -337,7 +337,7 @@ class { 'openstack::compute':
network_manager => hiera('network_manager', undef),
network_config => hiera('network_config', {}),
multi_host => $multi_host,
sql_connection => "mysql://nova:${nova_hash[db_password]}@${management_vip}/nova?read_timeout=60",
database_connection => "mysql://nova:${nova_hash[db_password]}@${management_vip}/nova?read_timeout=60",
queue_provider => $queue_provider,
amqp_hosts => $amqp_hosts,
amqp_user => $rabbit_hash['user'],

View File

@ -0,0 +1,32 @@
require 'spec_helper'
require 'shared-examples'
manifest = 'roles/compute.pp'
describe manifest do
shared_examples 'catalog' do
storage_hash = Noop.hiera_structure 'storage'
it 'should declare class nova::compute with install_bridge_utils set to false' do
should contain_class('nova::compute').with(
'install_bridge_utils' => false,
)
end
it 'should configure libvirt_inject_partition for compute node' do
if storage_hash['ephemeral_ceph'] || storage_hash['volumes_ceph']
libvirt_inject_partition = '-2'
elsif facts[:operatingsystem] == 'CentOS'
libvirt_inject_partition = '-1'
else
libvirt_inject_partition = '1'
end
should contain_class('nova::compute::libvirt').with(
'libvirt_inject_partition' => libvirt_inject_partition,
)
end
end # end of shared_examples
test_ubuntu_and_centos manifest
end

View File

@ -17,12 +17,13 @@ describe manifest do
'allowed_hosts' => allowed_hosts,
)
end
#TODO: uncomment in keystone module adaptation patch
# allowed_hosts.each do |host|
# it "should define openstacklib::db::mysql::host_access for #{nova_db_dbname} DB for #{host}" do
# should contain_openstacklib__db__mysql__host_access("#{nova_db_dbname}_#{host}")
# end
# end
allowed_hosts.each do |host|
it "should define openstacklib::db::mysql::host_access for #{nova_db_dbname} DB for #{host}" do
should contain_openstacklib__db__mysql__host_access("#{nova_db_dbname}_#{host}")
end
end
end # end of shared_examples
test_ubuntu_and_centos manifest
end

View File

@ -5,6 +5,13 @@ manifest = 'openstack-controller/openstack-controller.pp'
describe manifest do
shared_examples 'catalog' do
service_endpoint = Noop.hiera 'service_endpoint'
if service_endpoint
keystone_host = service_endpoint
else
keystone_host = Noop.hiera 'management_vip'
end
# TODO All this stuff should be moved to shared examples controller* tests.
# Nova config options
@ -19,6 +26,26 @@ describe manifest do
)
end
keystone_ec2_url = "http://#{keystone_host}:5000/v2.0/ec2tokens"
it 'should declare class nova::api with keystone_ec2_url' do
should contain_class('nova::api').with(
'keystone_ec2_url' => keystone_ec2_url,
)
end
it 'should configure keystone_ec2_url for nova api service' do
should contain_nova_config('DEFAULT/keystone_ec2_url').with(
'value' => keystone_ec2_url,
)
end
it 'should configure nova quota for injected file path length' do
should contain_class('nova::quota').with('quota_injected_file_path_length' => '4096')
should contain_nova_config('DEFAULT/quota_injected_file_path_length').with(
'value' => '4096',
)
end
end # end of shared_examples
test_ubuntu_and_centos manifest

View File

@ -33,6 +33,18 @@ describe manifest do
)
end
end
if !use_neutron
nameservers = Noop.hiera 'dns_nameservers'
if nameservers
it 'should declare nova::network with nameservers' do
should contain_class('nova::network').with(
'nameservers' => nameservers,
)
end
end
end
end # end of shared_examples
test_ubuntu_and_centos manifest