From 005781fe1fcfb73e70c111949f18df85c659622f Mon Sep 17 00:00:00 2001 From: Mike Dorman Date: Mon, 15 Jun 2015 17:05:55 -0600 Subject: [PATCH] Better handling of package dependencies in nova generic_service Before defining the package for the generic_service, check if it is already defined, either by $noval_title or $package_name naming. Create dependency relationship(s) with the service resource based on how the package is defined in the catalog. Otherwise, it's possible to end up with a duplicate package definition, or, more likely, the dependency from the service definition to break. This occurs most specifically with the spicehtml5proxy class on EL-based platforms. Change-Id: I215a95cac1d4b97837b67b417ff5fd7e6e9480d6 Closes-bug: 1465433 --- manifests/generic_service.pp | 12 ++++++++++-- spec/defines/nova_generic_service_spec.rb | 7 +++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/manifests/generic_service.pp b/manifests/generic_service.pp index 7ceb827be..438d5f20d 100644 --- a/manifests/generic_service.pp +++ b/manifests/generic_service.pp @@ -32,7 +32,7 @@ define nova::generic_service( # I need to mark that ths package should be # installed before nova_config if ($package_name) { - if !defined(Package[$package_name]) { + if !defined(Package[$nova_title]) and !defined(Package[$package_name]) { package { $nova_title: ensure => $ensure_package, name => $package_name, @@ -40,6 +40,14 @@ define nova::generic_service( tag => ['openstack'], } } + + if $service_name { + # Do the dependency relationship here in case the package + # has been defined elsewhere, either as Package[$nova_title] + # or Package[$package_name] + Package<| title == $nova_title |> -> Service[$nova_title] + Package<| title == $package_name |> -> Service[$nova_title] + } } if $service_name { @@ -56,7 +64,7 @@ define nova::generic_service( name => $service_name, enable => $enabled, hasstatus => true, - require => [Package['nova-common'], Package[$nova_title]], + require => [Package['nova-common']], } } } diff --git a/spec/defines/nova_generic_service_spec.rb b/spec/defines/nova_generic_service_spec.rb index b354f5f22..3b2a8a4bb 100644 --- a/spec/defines/nova_generic_service_spec.rb +++ b/spec/defines/nova_generic_service_spec.rb @@ -25,8 +25,11 @@ describe 'nova::generic_service' do it { is_expected.to contain_service('nova-foo').with( 'name' => 'food', 'ensure' => 'running', - 'enable' => true, - 'require' => ['Package[nova-common]', 'Package[nova-foo]'] + 'enable' => true + )} + + it { is_expected.to contain_service('nova-foo').that_requires( + ['Package[nova-common]', 'Package[nova-foo]'] )} end end