Support installing hyperv mech_driver in Neutron cookbook

Hyperv mech_driver has been moved out of neutron core code, and it
became a stand alone package. Current network cookbook did not
install the hyperv mech_driver, so add the logic in hyperv recipe
to intall the hyperv mech_driver when the hyperv is configured in
mechanism_drivers of environment.

Currently there is no package for hyperv mech_driver in all linux
distribution, as the hyperv mech_driver code has been moved out of
neutron code. So here names the package networking-hyperv by
default, overwrite the package name when other users generate the
packages themselves.

Change-Id: I0d27f41e2dc068fc0dd2a67fef5999a006f685dd
Closes-Bug: 1475151
This commit is contained in:
Song Li 2015-07-19 08:54:48 -04:00
parent b49df0cb25
commit 08bd03d011
7 changed files with 96 additions and 0 deletions

View File

@ -59,6 +59,13 @@ Identity-registration
- Registers the OpenStack Network API endpoint and service user with Keystone
hyperv
------
- Install the drivers for hyperv needed by OpenStack network.
- The networking-hyperv has not been included by linux distributions, it needs been created by users.
- The source code of networking-hyperv maintains in https://github.com/stackforge/networking-hyperv.
Attributes
==========

View File

@ -1110,6 +1110,8 @@ when 'fedora', 'rhel' # :pragma-foodcritic: ~FC024 - won't fix this
'neutron_openvswitch_agent_service' => 'neutron-openvswitch-agent',
'neutron_linuxbridge_agent_service' => 'neutron-linuxbridge-agent',
'neutron_server_service' => 'neutron-server',
# TODO: networking-hperv has not been included in Fedora or RHEL distribution, need be created by users.
'neutron_hyperv_packages' => ['networking-hyperv'],
'package_overrides' => ''
}
when 'suse'
@ -1143,6 +1145,8 @@ when 'suse'
'neutron_openvswitch_agent_service' => 'openstack-neutron-openvswitch-agent',
'neutron_linuxbridge_agent_service' => 'openstack-neutron-linuxbridge-agent',
'neutron_server_service' => 'openstack-neutron',
# TODO: networking-hperv has not been included in SUSE distribution, need be created by users.
'neutron_hyperv_packages' => ['networking-hyperv'],
'package_overrides' => ''
}
when 'debian'
@ -1175,6 +1179,8 @@ when 'debian'
'neutron_openvswitch_agent_service' => 'neutron-plugin-openvswitch-agent',
'neutron_linuxbridge_agent_service' => 'neutron-plugin-linuxbridge-agent',
'neutron_server_service' => 'neutron-server',
# TODO: networking-hperv has not been included in DEBIAN distribution, need be created by users.
'neutron_hyperv_packages' => ['networking-hyperv'],
'package_overrides' => "-o Dpkg::Options::='--force-confold' -o Dpkg::Options::='--force-confdef'"
}
end

View File

@ -12,6 +12,7 @@ recipe 'openstack-network::openvswitch', 'Installs packages required for OVS'
recipe 'openstack-network::metadata_agent', 'Installs packages required for a OpenStack Network Metadata Agent'
recipe 'openstack-network::identity_registration', 'Registers OpenStack Network endpoints and service user with Keystone'
recipe 'openstack-network::vpn_agent', 'Installs packages required for Network VPN Agent'
recipe 'openstack-network::hyperv', 'Installs packages required for OpenStack Network Hyperv drivers'
%w(ubuntu fedora redhat centos suse).each do |os|
supports os

View File

@ -19,5 +19,15 @@
#
['quantum', 'neutron'].include?(node['openstack']['compute']['network']['service_type']) || return
node['openstack']['network']['ml2']['mechanism_drivers'].downcase.include?('hyperv') || return
platform_options = node['openstack']['network']['platform']
platform_options['neutron_hyperv_packages'].each do |pkg|
package pkg do
options platform_options['package_overrides']
action :upgrade
end
end
include_recipe 'openstack-network'

View File

@ -0,0 +1,24 @@
# Encoding: utf-8
require_relative 'spec_helper'
describe 'openstack-network::hyperv' do
describe 'redhat' do
let(:runner) { ChefSpec::SoloRunner.new(REDHAT_OPTS) }
let(:node) { runner.node }
let(:chef_run) do
node.set['openstack']['compute']['network']['service_type'] = 'neutron'
runner.converge(described_recipe)
end
include_context 'neutron-stubs'
it 'does not install neutron hyperv package when hyperv mech_driver is not included' do
expect(chef_run).not_to upgrade_package('networking-hyperv')
end
it 'install neutron hyperv package when hyperv mech_driver is included' do
node.set['openstack']['network']['ml2']['mechanism_drivers'] = 'hyperv'
expect(chef_run).to upgrade_package('networking-hyperv')
end
end
end

24
spec/hyperv-suse_spec.rb Normal file
View File

@ -0,0 +1,24 @@
# Encoding: utf-8
require_relative 'spec_helper'
describe 'openstack-network::hyperv' do
describe 'suse' do
let(:runner) { ChefSpec::SoloRunner.new(SUSE_OPTS) }
let(:node) { runner.node }
let(:chef_run) do
node.set['openstack']['compute']['network']['service_type'] = 'neutron'
runner.converge(described_recipe)
end
include_context 'neutron-stubs'
it 'does not install neutron hyperv package when hyperv mech_driver is not included' do
expect(chef_run).not_to upgrade_package('networking-hyperv')
end
it 'install neutron hyperv package when hyperv mech_driver is included' do
node.set['openstack']['network']['ml2']['mechanism_drivers'] = 'hyperv'
expect(chef_run).to upgrade_package('networking-hyperv')
end
end
end

24
spec/hyperv_spec.rb Normal file
View File

@ -0,0 +1,24 @@
# Encoding: utf-8
require_relative 'spec_helper'
describe 'openstack-network::hyperv' do
describe 'ubuntu' do
let(:runner) { ChefSpec::SoloRunner.new(UBUNTU_OPTS) }
let(:node) { runner.node }
let(:chef_run) do
node.set['openstack']['compute']['network']['service_type'] = 'neutron'
runner.converge(described_recipe)
end
include_context 'neutron-stubs'
it 'does not install neutron hyperv package when hyperv mech_driver is not included' do
expect(chef_run).not_to upgrade_package('networking-hyperv')
end
it 'install neutron hyperv package when hyperv mech_driver is included' do
node.set['openstack']['network']['ml2']['mechanism_drivers'] = 'hyperv'
expect(chef_run).to upgrade_package('networking-hyperv')
end
end
end