]> review.fuel-infra Code Review - puppet-modules/puppetlabs-apt.git/commitdiff
(#11966) Only invoke apt-get update once.
authorNan Liu <nan@puppetlabs.com>
Fri, 4 May 2012 20:35:13 +0000 (13:35 -0700)
committerNan Liu <nan@puppetlabs.com>
Fri, 4 May 2012 20:35:13 +0000 (13:35 -0700)
Move apt-get update exec to a seperate class to minimize the number of
apt-get updates invoked by configuration changes.

* remove apt_update exec resource in apt class.
* remove apt-get-${name} in defines.
* apt::source notify Exec['apt update'].
* Remove dependency to Exec['apt_update'].
* fix rspec-puppet tests.

Conflicts:

manifests/source.pp

manifests/backports.pp
manifests/builddep.pp
manifests/init.pp
manifests/source.pp
manifests/update.pp [new file with mode: 0644]
spec/classes/apt_spec.rb
spec/classes/backports_spec.rb
spec/defines/builddep_spec.rb
spec/defines/source_spec.rb

index 007a1ee3fa9c38157e2ab52dc24deda5682a3232..ecc75048e6c10ff523dbb20355a7d6ab4cbc5374 100644 (file)
@@ -41,6 +41,5 @@ class apt::backports(
     },
     key_server => 'pgp.mit.edu',
     pin        => '200',
-    notify     => Exec['apt_update'],
   }
 }
index de6191c31b2ff86701a82005e659b5d58343e934..7a9dd332f53d6468b2f740fe3be18acc69c13bbe 100644 (file)
@@ -1,16 +1,12 @@
 # builddep.pp
 
 define apt::builddep() {
+  include apt::update
 
   Class['apt'] -> Apt::Builddep[$name]
 
-  exec { "apt-update-${name}":
-    command     => '/usr/bin/apt-get update',
-    refreshonly => true,
-  }
-
   exec { "apt-builddep-${name}":
     command => "/usr/bin/apt-get -y --force-yes build-dep ${name}",
-    notify  => Exec["apt-update-${name}"],
+    notify  => Exec["apt update"],
   }
 }
index 7d243edd7b947369f0334f096a4d8f98c08b2688..ce88c3bd83814f575399972fa573463179ad1a77 100644 (file)
@@ -29,14 +29,10 @@ class apt(
 ) {
 
   include apt::params
+  include apt::update
 
   validate_bool($purge_sources_list, $purge_sources_list_d)
 
-  $refresh_only_apt_update = $always_apt_update? {
-    true  => false,
-    false => true,
-  }
-
   if ! defined(Package['python-software-properties']) {
     package { 'python-software-properties': }
   }
@@ -46,6 +42,12 @@ class apt(
     true  => "# Repos managed by puppet.\n",
   }
 
+  if $always_apt_update == true {
+    Exec <| title=='apt update' |> {
+      refreshonly => false,
+    }
+  }
+
   $root           = $apt::params::root
   $apt_conf_d     = $apt::params::apt_conf_d
   $sources_list_d = $apt::params::sources_list_d
@@ -58,6 +60,7 @@ class apt(
     group   => root,
     mode    => '0644',
     content => $sources_list_content,
+    notify  => Exec['apt update'],
   }
 
   file { 'sources.list.d':
@@ -67,12 +70,7 @@ class apt(
     group   => root,
     purge   => $purge_sources_list_d,
     recurse => $purge_sources_list_d,
-  }
-
-  exec { 'apt_update':
-    command     => "${provider} update",
-    subscribe   => [ File['sources.list'], File['sources.list.d'] ],
-    refreshonly => $refresh_only_apt_update,
+    notify  => Exec['apt update'],
   }
 
   case $disable_keys {
@@ -89,7 +87,7 @@ class apt(
         path   => "${apt_conf_d}/99unauth",
       }
     }
-    undef: { } # do nothing
+    undef:   { } # do nothing
     default: { fail('Valid values for disable_keys are true or false') }
   }
 
@@ -97,7 +95,7 @@ class apt(
     file { 'configure-apt-proxy':
       path    => "${apt_conf_d}/proxy",
       content => "Acquire::http::Proxy \"http://${proxy_host}:${proxy_port}\";",
-      notify  => Exec['apt_update'],
+      notify  => Exec['apt update'],
     }
   }
 }
index c63fc2fb2282d5bd2dc457a256442683747b6b13..e9eb654cb81552c24cbe6f1187ba7d36e321fc49 100644 (file)
@@ -16,6 +16,7 @@ define apt::source(
 ) {
 
   include apt::params
+  include apt::update
 
   $sources_list_d = $apt::params::sources_list_d
   $provider       = $apt::params::provider
@@ -31,6 +32,7 @@ define apt::source(
     group   => root,
     mode    => '0644',
     content => template("${module_name}/source.list.erb"),
+    notify  => Exec['apt update'],
   }
 
   if ($pin != false) and ($ensure == 'present') {
@@ -40,12 +42,6 @@ define apt::source(
     }
   }
 
-  exec { "${name} apt update":
-    command     => "${provider} update",
-    subscribe   => File["${name}.list"],
-    refreshonly => true,
-  }
-
   if ($required_packages != false) and ($ensure == 'present') {
     exec { "Required packages: '${required_packages}' for ${name}":
       command     => "${provider} -y install ${required_packages}",
diff --git a/manifests/update.pp b/manifests/update.pp
new file mode 100644 (file)
index 0000000..b079c1f
--- /dev/null
@@ -0,0 +1,8 @@
+class apt::update {
+  include apt::params
+
+  exec { 'apt update':
+    command     => "${apt::params::provider} update",
+    refreshonly => true,
+  }
+}
index 079bd59c5b58f8828122f0270aa671deb8b15b28..4d44bcc78c726f528c324921882e5362e186de4e 100644 (file)
@@ -72,7 +72,8 @@ describe 'apt', :type => :class do
             'owner'   => "root",
             'group'   => "root",
             'purge'   => true,
-            'recurse' => true
+            'recurse' => true,
+            'notify'  => 'Exec[apt update]'
           })
         else
           should create_file("sources.list.d").with({
@@ -81,15 +82,15 @@ describe 'apt', :type => :class do
             'owner'   => "root",
             'group'   => "root",
             'purge'   => false,
-            'recurse' => false
+            'recurse' => false,
+            'notify'  => 'Exec[apt update]'
           })
         end
       }
 
       it {
-        should contain_exec("apt_update").with({
+        should contain_exec("apt update").with({
           'command'     => "/usr/bin/apt-get update",
-          'subscribe'   => ["File[sources.list]", "File[sources.list.d]"],
           'refreshonly' => refresh_only_apt_update
         })
       }
@@ -118,7 +119,7 @@ describe 'apt', :type => :class do
             should contain_file('configure-apt-proxy').with(
               'path'    => '/etc/apt/apt.conf.d/proxy',
               'content' => "Acquire::http::Proxy \"http://#{param_hash[:proxy_host]}:#{param_hash[:proxy_port]}\";",
-              'notify'  => "Exec[apt_update]"
+              'notify'  => "Exec[apt update]"
             )
           else
             should_not contain_file('configure_apt_proxy')
index feabef1a1105e0e177bea12a70c9c5931f85a87e..efac8607553376ce57653f9ca319a429e8fef953 100644 (file)
@@ -17,7 +17,6 @@ describe 'apt::backports', :type => :class do
         'key'        => '437D05B5',
         'key_server' => 'pgp.mit.edu',
         'pin'        => '200',
-        'notify'     => 'Exec[apt_update]'
       })
     }
   end
@@ -38,7 +37,6 @@ describe 'apt::backports', :type => :class do
         'key'        => '55BE302B',
         'key_server' => 'pgp.mit.edu',
         'pin'        => '200',
-        'notify'     => 'Exec[apt_update]'
       })
     }
   end
@@ -67,7 +65,6 @@ describe 'apt::backports', :type => :class do
         'key'        => '55BE302B',
         'key_server' => 'pgp.mit.edu',
         'pin'        => '200',
-        'notify'     => 'Exec[apt_update]'
       })
     }
   end
index 52a0704a3bde7592f01c4670cb77bd2b5e3cc4c1..39ee988b6aa6f3e6354b6f0c00e179f388e7576e 100644 (file)
@@ -6,7 +6,7 @@ describe 'apt::builddep', :type => :define do
   describe "should succeed with a Class['apt']" do
     let(:pre_condition) { 'class {"apt": } ' }
 
-    it { should contain_exec("apt-update-#{title}").with({
+    it { should contain_exec("apt update").with({
         'command' => "/usr/bin/apt-get update",
         'refreshonly' => true
       })
index 02bc45fcbebd3256b0f8256b292be68611828adc..a6c5e5f3a0a3649011ed35031ef787bf9064f591 100644 (file)
@@ -97,9 +97,8 @@ describe 'apt::source', :type => :define do
       }
 
       it {
-        should contain_exec("#{title} apt update").with({
+        should contain_exec("apt update").with({
           "command"     => "/usr/bin/apt-get update",
-          "subscribe"   => "File[#{title}.list]",
           "refreshonly" => true
         })
       }