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
This commit is contained in:
Mike Dorman
2015-06-15 17:05:55 -06:00
parent 273728b88d
commit 005781fe1f
2 changed files with 15 additions and 4 deletions

View File

@@ -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']],
}
}
}

View File

@@ -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