Merge pull request #1017 from root-expert/safe-facts
[puppet-modules/puppetlabs-apt.git] / manifests / init.pp
index d2aead96112f26cf31a8d11bb51c8d207317d367..2f82b7d8fdb40f374552f1a15b57006f9f8cb49f 100644 (file)
 # @param config_files
 #   A hash made up of the various configuration files used by Apt.
 #
+# @param sources_list_force
+#   Specifies whether to perform force purge or delete. Default false.
+#
 class apt (
   Hash $update_defaults         = $apt::params::update_defaults,
   Hash $purge_defaults          = $apt::params::purge_defaults,
@@ -150,11 +153,19 @@ class apt (
   String $preferences_d         = $apt::params::preferences_d,
   String $apt_conf_d            = $apt::params::apt_conf_d,
   Hash $config_files            = $apt::params::config_files,
-  Hash $source_key_defaults     = $apt::params::source_key_defaults,
+  Boolean $sources_list_force   = $apt::params::sources_list_force,
+
+  Hash $source_key_defaults = {
+    'server'  => $keyserver,
+    'options' => undef,
+    'content' => undef,
+    'source'  => undef,
+  }
+
 ) inherits apt::params {
 
-  if $facts['osfamily'] != 'Debian' {
-    fail(translate('This module only works on Debian or derivatives like Ubuntu'))
+  if $facts['os']['family'] != 'Debian' {
+    fail('This module only works on Debian or derivatives like Ubuntu')
   }
 
   if $update['frequency'] {
@@ -185,12 +196,37 @@ class apt (
   if $purge['preferences.d'] {
     assert_type(Boolean, $purge['preferences.d'])
   }
+  if $sources_list_force {
+    assert_type(Boolean, $sources_list_force)
+  }
   if $purge['apt.conf.d'] {
     assert_type(Boolean, $purge['apt.conf.d'])
   }
 
   $_purge = merge($::apt::purge_defaults, $purge)
-  $_proxy = merge($apt::proxy_defaults, $proxy)
+
+  if $proxy['perhost'] {
+    $_perhost = $proxy['perhost'].map |$item| {
+      $_item = merge($apt::proxy_defaults, $item)
+      $_scheme = $_item['https'] ? {
+        true    => 'https',
+        default => 'http' }
+      $_port = $_item['port'] ? {
+        Integer => ":${_item['port']}",
+        default => ''
+      }
+      $_target = $_item['direct'] ? {
+        true    => 'DIRECT',
+        default => "${_scheme}://${_item['host']}${_port}/" }
+      merge($item, {
+        'scheme' => $_scheme,
+        'target' => $_target })
+    }
+  } else {
+    $_perhost = {}
+  }
+
+  $_proxy = merge($apt::proxy_defaults, $proxy, { 'perhost' => $_perhost } )
 
   $confheadertmp = epp('apt/_conf_header.epp')
   $proxytmp = epp('apt/proxy.epp', {'proxies' => $_proxy})
@@ -204,33 +240,45 @@ class apt (
     }
   }
 
-  $sources_list_ensure = $_purge['sources.list'] ? {
-    true    => absent,
-    default => file,
+  if $sources_list_force {
+    $sources_list_ensure = $_purge['sources.list'] ? {
+      true    => absent,
+      default  => file,
+    }
+    $sources_list_content = $_purge['sources.list'] ? {
+      true    => nil,
+      default => undef,
+    }
   }
+  else
+    {
+    $sources_list_ensure = $_purge['sources.list'] ? {
+      true    => file,
+      default => file,
+    }
+    $sources_list_content = $_purge['sources.list'] ? {
+      true    => "# Repos managed by puppet.\n",
+      default => undef,
+    }
+    }
 
   $preferences_ensure = $_purge['preferences'] ? {
     true    => absent,
     default => file,
   }
 
-  if $_update['frequency'] == 'always' {
-    Exec <| title=='apt_update' |> {
-      refreshonly => false,
-    }
-  }
-
   apt::setting { 'conf-update-stamp':
     priority => 15,
     content  => "${confheadertmp}${updatestamptmp}",
   }
 
   file { 'sources.list':
-    ensure => $sources_list_ensure,
-    path   => $::apt::sources_list,
-    owner  => root,
-    group  => root,
-    notify => Class['apt::update'],
+    ensure  => $sources_list_ensure,
+    path    => $::apt::sources_list,
+    owner   => root,
+    group   => root,
+    content => $sources_list_content,
+    notify  => Class['apt::update'],
   }
 
   file { 'sources.list.d':
@@ -304,7 +352,7 @@ class apt (
       owner   => $auth_conf_owner,
       group   => 'root',
       mode    => '0600',
-      content => "${confheadertmp}${auth_conf_tmp}",
+      content => Sensitive("${confheadertmp}${auth_conf_tmp}"),
       notify  => Class['apt::update'],
     }
   }