From 2caf08909bae9a5e5f21d4ecfa5c94d1ac6364ce Mon Sep 17 00:00:00 2001 From: iberezovskiy Date: Tue, 23 Jun 2015 15:55:12 +0300 Subject: [PATCH] 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 --- .../puppet/nova/files/libvirt_qemu.conf | 34 +++++++ .../nova_floating_range/nova_manage.rb | 23 +++++ .../provider/nova_network/nova_manage.rb | 1 + .../nova/lib/puppet/type/nova_floating.rb | 2 +- .../lib/puppet/type/nova_floating_range.rb | 88 +++++++++++++++++++ .../nova/lib/puppet/type/nova_network.rb | 5 ++ deployment/puppet/nova/manifests/compute.pp | 8 +- .../puppet/nova/manifests/generic_service.pp | 20 +++++ .../puppet/nova/manifests/manage/floating.pp | 6 ++ .../puppet/nova/manifests/manage/network.pp | 18 +++- deployment/puppet/nova/manifests/network.pp | 9 +- .../puppet/nova/manifests/network/bridge.pp | 10 +++ deployment/puppet/nova/manifests/params.pp | 7 +- .../nova/spec/classes/nova_compute_spec.rb | 14 +++ .../nova_floating/nova_floating_spec.rb | 38 ++++++++ .../nova_floating_range_spec.rb | 33 +++++++ .../unit/type/nova_floating_range_spec.rb | 27 ++++++ .../nova/spec/unit/type/nova_floating_spec.rb | 26 ++++++ deployment/puppet/openstack/README.md | 24 ++--- .../puppet/openstack/manifests/compute.pp | 27 +++--- .../openstack/manifests/nova/controller.pp | 4 +- .../spec/classes/openstack_compute_spec.rb | 30 +++---- .../osnailyfacter/modular/roles/compute.pp | 2 +- .../openstack-compute_spec.rb | 32 +++++++ .../openstack-controller/nova_db_spec.rb | 13 +-- .../openstack-controller_spec.rb | 27 ++++++ .../openstack-network-controller_spec.rb | 12 +++ 27 files changed, 485 insertions(+), 55 deletions(-) create mode 100644 deployment/puppet/nova/files/libvirt_qemu.conf create mode 100644 deployment/puppet/nova/lib/puppet/provider/nova_floating_range/nova_manage.rb create mode 100644 deployment/puppet/nova/lib/puppet/type/nova_floating_range.rb create mode 100644 deployment/puppet/nova/spec/unit/provider/nova_floating/nova_floating_spec.rb create mode 100644 deployment/puppet/nova/spec/unit/provider/nova_floating_range/nova_floating_range_spec.rb create mode 100644 deployment/puppet/nova/spec/unit/type/nova_floating_range_spec.rb create mode 100644 deployment/puppet/nova/spec/unit/type/nova_floating_spec.rb create mode 100644 tests/noop/spec/hosts/openstack-compute/openstack-compute_spec.rb diff --git a/deployment/puppet/nova/files/libvirt_qemu.conf b/deployment/puppet/nova/files/libvirt_qemu.conf new file mode 100644 index 0000000000..a1ab0a3162 --- /dev/null +++ b/deployment/puppet/nova/files/libvirt_qemu.conf @@ -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 diff --git a/deployment/puppet/nova/lib/puppet/provider/nova_floating_range/nova_manage.rb b/deployment/puppet/nova/lib/puppet/provider/nova_floating_range/nova_manage.rb new file mode 100644 index 0000000000..d21c7e4e60 --- /dev/null +++ b/deployment/puppet/nova/lib/puppet/provider/nova_floating_range/nova_manage.rb @@ -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 diff --git a/deployment/puppet/nova/lib/puppet/provider/nova_network/nova_manage.rb b/deployment/puppet/nova/lib/puppet/provider/nova_network/nova_manage.rb index 6da03a39dc..e5215005ef 100644 --- a/deployment/puppet/nova/lib/puppet/provider/nova_network/nova_manage.rb +++ b/deployment/puppet/nova/lib/puppet/provider/nova_network/nova_manage.rb @@ -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', diff --git a/deployment/puppet/nova/lib/puppet/type/nova_floating.rb b/deployment/puppet/nova/lib/puppet/type/nova_floating.rb index 6da29eccef..331ba62314 100644 --- a/deployment/puppet/nova/lib/puppet/type/nova_floating.rb +++ b/deployment/puppet/nova/lib/puppet/type/nova_floating.rb @@ -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 diff --git a/deployment/puppet/nova/lib/puppet/type/nova_floating_range.rb b/deployment/puppet/nova/lib/puppet/type/nova_floating_range.rb new file mode 100644 index 0000000000..ed7b97cd13 --- /dev/null +++ b/deployment/puppet/nova/lib/puppet/type/nova_floating_range.rb @@ -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 diff --git a/deployment/puppet/nova/lib/puppet/type/nova_network.rb b/deployment/puppet/nova/lib/puppet/type/nova_network.rb index 3a750e02eb..9193b093bd 100644 --- a/deployment/puppet/nova/lib/puppet/type/nova_network.rb +++ b/deployment/puppet/nova/lib/puppet/type/nova_network.rb @@ -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 diff --git a/deployment/puppet/nova/manifests/compute.pp b/deployment/puppet/nova/manifests/compute.pp index 53b0f2d863..be56c4af86 100644 --- a/deployment/puppet/nova/manifests/compute.pp +++ b/deployment/puppet/nova/manifests/compute.pp @@ -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, diff --git a/deployment/puppet/nova/manifests/generic_service.pp b/deployment/puppet/nova/manifests/generic_service.pp index 438d5f20d8..e4a0ea8249 100644 --- a/deployment/puppet/nova/manifests/generic_service.pp +++ b/deployment/puppet/nova/manifests/generic_service.pp @@ -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, diff --git a/deployment/puppet/nova/manifests/manage/floating.pp b/deployment/puppet/nova/manifests/manage/floating.pp index 6c6a14df43..5268430cdd 100644 --- a/deployment/puppet/nova/manifests/manage/floating.pp +++ b/deployment/puppet/nova/manifests/manage/floating.pp @@ -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] diff --git a/deployment/puppet/nova/manifests/manage/network.pp b/deployment/puppet/nova/manifests/manage/network.pp index 8a8312d322..992b743e09 100644 --- a/deployment/puppet/nova/manifests/manage/network.pp +++ b/deployment/puppet/nova/manifests/manage/network.pp @@ -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, } } diff --git a/deployment/puppet/nova/manifests/network.pp b/deployment/puppet/nova/manifests/network.pp index 94c01c139d..d27e53cc00 100644 --- a/deployment/puppet/nova/manifests/network.pp +++ b/deployment/puppet/nova/manifests/network.pp @@ -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': diff --git a/deployment/puppet/nova/manifests/network/bridge.pp b/deployment/puppet/nova/manifests/network/bridge.pp index 2286e0b412..885ee1b939 100644 --- a/deployment/puppet/nova/manifests/network/bridge.pp +++ b/deployment/puppet/nova/manifests/network/bridge.pp @@ -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' diff --git a/deployment/puppet/nova/manifests/params.pp b/deployment/puppet/nova/manifests/params.pp index 5e491f4efe..2ad21a49ed 100644 --- a/deployment/puppet/nova/manifests/params.pp +++ b/deployment/puppet/nova/manifests/params.pp @@ -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' diff --git a/deployment/puppet/nova/spec/classes/nova_compute_spec.rb b/deployment/puppet/nova/spec/classes/nova_compute_spec.rb index 59adff736b..2e03b30f12 100644 --- a/deployment/puppet/nova/spec/classes/nova_compute_spec.rb +++ b/deployment/puppet/nova/spec/classes/nova_compute_spec.rb @@ -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 } diff --git a/deployment/puppet/nova/spec/unit/provider/nova_floating/nova_floating_spec.rb b/deployment/puppet/nova/spec/unit/provider/nova_floating/nova_floating_spec.rb new file mode 100644 index 0000000000..f681851fa9 --- /dev/null +++ b/deployment/puppet/nova/spec/unit/provider/nova_floating/nova_floating_spec.rb @@ -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 diff --git a/deployment/puppet/nova/spec/unit/provider/nova_floating_range/nova_floating_range_spec.rb b/deployment/puppet/nova/spec/unit/provider/nova_floating_range/nova_floating_range_spec.rb new file mode 100644 index 0000000000..276e44749e --- /dev/null +++ b/deployment/puppet/nova/spec/unit/provider/nova_floating_range/nova_floating_range_spec.rb @@ -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 diff --git a/deployment/puppet/nova/spec/unit/type/nova_floating_range_spec.rb b/deployment/puppet/nova/spec/unit/type/nova_floating_range_spec.rb new file mode 100644 index 0000000000..9bde1ac9a0 --- /dev/null +++ b/deployment/puppet/nova/spec/unit/type/nova_floating_range_spec.rb @@ -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 diff --git a/deployment/puppet/nova/spec/unit/type/nova_floating_spec.rb b/deployment/puppet/nova/spec/unit/type/nova_floating_spec.rb new file mode 100644 index 0000000000..dab7afaa29 --- /dev/null +++ b/deployment/puppet/nova/spec/unit/type/nova_floating_spec.rb @@ -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 diff --git a/deployment/puppet/openstack/README.md b/deployment/puppet/openstack/README.md index 5304329274..3a20be46c2 100644 --- a/deployment/puppet/openstack/README.md +++ b/deployment/puppet/openstack/README.md @@ -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 diff --git a/deployment/puppet/openstack/manifests/compute.pp b/deployment/puppet/openstack/manifests/compute.pp index 261a57b3ee..d504503a52 100644 --- a/deployment/puppet/openstack/manifests/compute.pp +++ b/deployment/puppet/openstack/manifests/compute.pp @@ -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 diff --git a/deployment/puppet/openstack/manifests/nova/controller.pp b/deployment/puppet/openstack/manifests/nova/controller.pp index e29934668f..8f6d61ff7d 100644 --- a/deployment/puppet/openstack/manifests/nova/controller.pp +++ b/deployment/puppet/openstack/manifests/nova/controller.pp @@ -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'; } diff --git a/deployment/puppet/openstack/spec/classes/openstack_compute_spec.rb b/deployment/puppet/openstack/spec/classes/openstack_compute_spec.rb index 1d3ecb2924..adaef77337 100644 --- a/deployment/puppet/openstack/spec/classes/openstack_compute_spec.rb +++ b/deployment/puppet/openstack/spec/classes/openstack_compute_spec.rb @@ -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, diff --git a/deployment/puppet/osnailyfacter/modular/roles/compute.pp b/deployment/puppet/osnailyfacter/modular/roles/compute.pp index 0fed063917..37a149c028 100644 --- a/deployment/puppet/osnailyfacter/modular/roles/compute.pp +++ b/deployment/puppet/osnailyfacter/modular/roles/compute.pp @@ -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'], diff --git a/tests/noop/spec/hosts/openstack-compute/openstack-compute_spec.rb b/tests/noop/spec/hosts/openstack-compute/openstack-compute_spec.rb new file mode 100644 index 0000000000..4bee3698e1 --- /dev/null +++ b/tests/noop/spec/hosts/openstack-compute/openstack-compute_spec.rb @@ -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 diff --git a/tests/noop/spec/hosts/openstack-controller/nova_db_spec.rb b/tests/noop/spec/hosts/openstack-controller/nova_db_spec.rb index e2e0855e6e..5f9cc508d4 100644 --- a/tests/noop/spec/hosts/openstack-controller/nova_db_spec.rb +++ b/tests/noop/spec/hosts/openstack-controller/nova_db_spec.rb @@ -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 diff --git a/tests/noop/spec/hosts/openstack-controller/openstack-controller_spec.rb b/tests/noop/spec/hosts/openstack-controller/openstack-controller_spec.rb index bc19db9571..0318e2f5d2 100644 --- a/tests/noop/spec/hosts/openstack-controller/openstack-controller_spec.rb +++ b/tests/noop/spec/hosts/openstack-controller/openstack-controller_spec.rb @@ -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 diff --git a/tests/noop/spec/hosts/openstack-network/openstack-network-controller_spec.rb b/tests/noop/spec/hosts/openstack-network/openstack-network-controller_spec.rb index a7b613d310..1a4651f120 100644 --- a/tests/noop/spec/hosts/openstack-network/openstack-network-controller_spec.rb +++ b/tests/noop/spec/hosts/openstack-network/openstack-network-controller_spec.rb @@ -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