Upgrade all packages after puppet managed ones
authorDan Prince <dprince@redhat.com>
Wed, 23 Dec 2015 15:20:44 +0000 (10:20 -0500)
committerDan Prince <dprince@redhat.com>
Wed, 23 Dec 2015 21:18:17 +0000 (16:18 -0500)
This updates tripleo::packages so that when enable_upgrade
is used it will:

 1) upgrade puppet managed packages (will trigger puppet dependencies)
 2) then upgrade all packages via exec
 3) then restart services

NOTE: the intention here is that the Exec['update-packages'] will
always execute if enable_upgrade is set. It is not idempotent
in this regard because I think we always want to execute it
if enable_upgrade is set.

Change-Id: I02f7cf07792765359f19fdf357024d9e48690e42
Related-bug: #1522943

manifests/packages.pp
spec/classes/tripleo_packages_spec.rb [new file with mode: 0644]

index ac11efd..c0971e9 100644 (file)
@@ -45,7 +45,26 @@ 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',
+    }
+    # A resource chain to ensure the upgrade ordering we want:
+    # 1) upgrade puppet managed packages (will trigger puppet dependencies)
+    # 2) then upgrade all packages via exec
+    # 3) then restart services
+    Package <| |> -> Exec['package-upgrade'] -> Service <| |>
+
   }
 
 }
-
diff --git a/spec/classes/tripleo_packages_spec.rb b/spec/classes/tripleo_packages_spec.rb
new file mode 100644 (file)
index 0000000..55a135b
--- /dev/null
@@ -0,0 +1,52 @@
+#
+# Copyright (C) 2015 Red Hat Inc.
+#
+# 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.
+
+require 'spec_helper'
+
+describe 'tripleo::packages' do
+
+  shared_examples_for 'Red Hat distributions' do
+
+    let :pre_condition do
+      "
+      package{'nova-compute': ensure => present}
+      service{'nova-compute': ensure => 'running'}
+      "
+    end
+
+    let :facts do
+      {
+        :osfamily                  => 'RedHat',
+        :operatingsystemmajrelease => 7,
+      }
+    end
+
+    let :params do
+      {
+        :enable_upgrade => true
+      }
+    end
+
+    it 'should contain correct upgrade ordering' do
+        is_expected.to contain_package('nova-compute').that_comes_before('Exec[package-upgrade]')
+        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')
+    end
+
+  end
+
+  it_configures 'Red Hat distributions'
+
+end