diff --git a/README.md b/README.md index bf3d30d7..4203bede 100644 --- a/README.md +++ b/README.md @@ -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 ========== diff --git a/attributes/default.rb b/attributes/default.rb index a402b098..efdbf0d8 100644 --- a/attributes/default.rb +++ b/attributes/default.rb @@ -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 diff --git a/metadata.rb b/metadata.rb index ceaf498e..6b1044ff 100644 --- a/metadata.rb +++ b/metadata.rb @@ -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 diff --git a/recipes/hyperv.rb b/recipes/hyperv.rb index f31ff39d..6491437e 100644 --- a/recipes/hyperv.rb +++ b/recipes/hyperv.rb @@ -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' diff --git a/spec/hyperv-redhat_spec.rb b/spec/hyperv-redhat_spec.rb new file mode 100644 index 00000000..f7613319 --- /dev/null +++ b/spec/hyperv-redhat_spec.rb @@ -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 diff --git a/spec/hyperv-suse_spec.rb b/spec/hyperv-suse_spec.rb new file mode 100644 index 00000000..23373254 --- /dev/null +++ b/spec/hyperv-suse_spec.rb @@ -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 diff --git a/spec/hyperv_spec.rb b/spec/hyperv_spec.rb new file mode 100644 index 00000000..04f0dc5c --- /dev/null +++ b/spec/hyperv_spec.rb @@ -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