aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmilien Macchi <emilien@redhat.com>2016-10-14 10:15:01 -0400
committerEmilien Macchi <emilien@redhat.com>2016-10-14 18:17:30 -0400
commit45783d1c643b7a47454207b3a90575f1ed8ab46d (patch)
treea07a43436587228af019dae3ba015c917fb264f6
parent33be802c705c857ce94a80252bc22b2e01e27fa8 (diff)
packages: run upgrade at 'setup' stage
Instead of using an operator to make sure we upgrade package before any service, which causes dependency cycles with iptables puppet module, let's do another approach where we upgrade rpms in the 'setup' stage, which is a stage that runs before configure and running services. In that way, we'll remove dependency cycles and make sure packages are upgrades before configure and running TripleO services. Change-Id: I1be83f88be1959885c980ab4f428477d412751f7
-rw-r--r--manifests/packages.pp36
-rw-r--r--manifests/packages/upgrades.pp43
-rw-r--r--spec/classes/tripleo_packages_spec.rb5
3 files changed, 54 insertions, 30 deletions
diff --git a/manifests/packages.pp b/manifests/packages.pp
index 5e111fa..ec2635a 100644
--- a/manifests/packages.pp
+++ b/manifests/packages.pp
@@ -32,6 +32,9 @@ class tripleo::packages (
$enable_upgrade = false,
) {
+ # required for stages
+ include ::stdlib
+
if !$enable_install and !$enable_upgrade {
case $::osfamily {
'RedHat': {
@@ -45,33 +48,12 @@ class tripleo::packages (
if $enable_upgrade {
Package <| |> { ensure => 'latest' }
-
- case $::osfamily {
- 'RedHat': {
- $pkg_upgrade_cmd = 'yum -y update'
- }
- default: {
- warning('Please specify a package upgrade command for distribution.')
- }
- }
-
- exec { 'package-upgrade':
- command => $pkg_upgrade_cmd,
- path => '/usr/bin',
- timeout => 0,
- }
- # A resource chain to ensure the upgrade ordering we want:
- # 1) Upgrade all packages via exec.
- # Note: The Package Puppet resources can be managed after or before package-upgrade,
- # it does not matter. what we need to make sure is that they'll notify their
- # respective services (if they have ~> in their manifests or here with the ->)
- # for the other packages, they'll be upgraded before any Service notify.
- # This approach prevents from Puppet dependencies cycle.
- # 2) This upgrade will be run before any Service notified & managed by Puppet.
- # Note: For example, during the Puppet catalog, configuration will change for most of
- # the services so the Services will be likely restarted after the package upgrade.
- Exec['package-upgrade'] -> Service <| |>
-
+ # Running the package upgrade before managing Services in the main stage.
+ # So we're sure that services will be able to restart with the new version
+ # of the package.
+ ensure_resource('class', 'tripleo::packages::upgrades', {
+ 'stage' => 'setup',
+ })
}
}
diff --git a/manifests/packages/upgrades.pp b/manifests/packages/upgrades.pp
new file mode 100644
index 0000000..a6ca1c8
--- /dev/null
+++ b/manifests/packages/upgrades.pp
@@ -0,0 +1,43 @@
+# Copyright 2016 Red Hat, Inc.
+# All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+# == Class: tripleo::packages::upgrades
+#
+# Upgrade packages using yum.
+#
+class tripleo::packages::upgrades {
+
+ # required for stages
+ include ::stdlib
+
+ case $::osfamily {
+ 'RedHat': {
+ $pkg_upgrade_cmd = 'yum -y update'
+ }
+ default: {
+ fail('Please specify a package upgrade command for distribution.')
+ }
+ }
+
+ # Running the package upgrade before managing Services in the main stage.
+ # So we're sure that services will be able to restart with the new version
+ # of the package.
+ ensure_resource('exec', 'package-upgrade', {
+ 'command' => $pkg_upgrade_cmd,
+ 'path' => '/usr/bin',
+ 'timeout' => 0,
+ })
+
+}
diff --git a/spec/classes/tripleo_packages_spec.rb b/spec/classes/tripleo_packages_spec.rb
index 076d9cd..8db238a 100644
--- a/spec/classes/tripleo_packages_spec.rb
+++ b/spec/classes/tripleo_packages_spec.rb
@@ -29,9 +29,8 @@ describe 'tripleo::packages' do
}
end
- it 'should contain correct upgrade ordering' do
- is_expected.to contain_exec('package-upgrade').that_comes_before('Service[nova-compute]')
- is_expected.to contain_exec('package-upgrade').with(:command => 'yum -y update')
+ it 'should contain upgrade exec' do
+ is_expected.to contain_exec('package-upgrade').with(:command => 'yum -y update')
end
end