Puppet Class: timezone

Defined in:
manifests/init.pp

Summary

This module manages timezone settings

Overview

Examples:

class { 'timezone':
  timezone => 'Europe/Berlin',
}

Parameters:

  • timezone (String) (defaults to: 'Etc/UTC')

    The name of the timezone.

  • ensure (Enum['present','absent']) (defaults to: 'present')

    Ensure if present or absent.

  • autoupgrade (Boolean) (defaults to: false)

    Upgrade package automatically, if there is a newer version.

  • package (Optional[String]) (defaults to: undef)

    Name of the package. Only set this, if your platform is not supported or you know, what you’re doing.

  • config_file

    Main configuration file. Only set this, if your platform is not supported or you know, what you’re doing.

  • zoneinfo_dir (String) (defaults to: '/usr/share/zoneinfo')

    Source directory of zoneinfo files. Only set this, if your platform is not supported or you know, what you’re doing. Default: auto-set, platform specific

  • hwutc (Optional[Boolean]) (defaults to: undef)

    Is the hardware clock set to UTC? (true or false)

  • notify_services (Optional[Array[String]]) (defaults to: [])

    List of services to notify

  • localtime_file (String) (defaults to: '/etc/localtime')
  • timezone_file (Optional[String]) (defaults to: undef)
  • timezone_file_template (Optional[String]) (defaults to: 'timezone/clock.erb')
  • timezone_file_supports_comment (Optional[Boolean]) (defaults to: undef)
  • timezone_update (Optional[String]) (defaults to: undef)


37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
# File 'manifests/init.pp', line 37

class timezone (
  String                   $timezone                       = 'Etc/UTC',
  Enum['present','absent'] $ensure                         = 'present',
  Optional[Boolean]        $hwutc                          = undef,
  Boolean                  $autoupgrade                    = false,
  Optional[Array[String]]  $notify_services                = [],
  Optional[String]         $package                        = undef,
  String                   $zoneinfo_dir                   = '/usr/share/zoneinfo',
  String                   $localtime_file                 = '/etc/localtime',
  Optional[String]         $timezone_file                  = undef,
  Optional[String]         $timezone_file_template         = 'timezone/clock.erb',
  Optional[Boolean]        $timezone_file_supports_comment = undef,
  Optional[String]         $timezone_update                = undef
) {

  case $ensure {
    /(present)/: {
      if $autoupgrade == true {
        $package_ensure = 'latest'
      } else {
        $package_ensure = 'present'
      }
      $localtime_ensure = 'link'
      $timezone_ensure = 'file'
    }
    /(absent)/: {
      # Leave package installed, as it is a system dependency
      $package_ensure = 'present'
      $localtime_ensure = 'absent'
      $timezone_ensure = 'absent'
    }
    default: {
      fail('ensure parameter must be present or absent')
    }
  }

  if $package {
    $use_debconf = lookup('timezone::use_debconf', Boolean, 'first', false)
    if $use_debconf and $timezone_ensure != 'absent' {
      $_tz = split($timezone, '/')
      $area = $_tz[0]
      $zone = $_tz[1]

      debconf {
        'tzdata/Areas':
          package => 'tzdata',
          item    => 'tzdata/Areas',
          type    => 'select',
          value   => $area;
        "tzdata/Zones/${area}":
          package => 'tzdata',
          item    => "tzdata/Zones/${area}",
          type    => 'select',
          value   => $zone;
      }
      -> Package[$package]
    }

    package { $package:
      ensure => $package_ensure,
      before => File[$localtime_file],
    }
  }

  $notify = $notify_services.map |$svc| { Service[$svc] }

  file { $localtime_file:
    ensure => $localtime_ensure,
    target => "${zoneinfo_dir}/${timezone}",
    force  => true,
    notify => $notify,
  }

  if $timezone_file {
    file { $timezone_file:
      ensure  => $timezone_ensure,
      content => template($timezone_file_template),
      notify  => $notify,
    }

    if $ensure == 'present' and $timezone_update {
      exec { 'update_timezone':
        command     => sprintf($timezone_update, $timezone),
        subscribe   => File[$timezone_file],
        refreshonly => true,
        path        => '/usr/bin:/usr/sbin:/bin:/sbin',
        require     => File[$localtime_file],
      }
    }
  } else {
    if $ensure == 'present' and $timezone_update {
      $unless_cmd = lookup('timezone::timezone_update_check_cmd', String, 'first')
      exec { 'update_timezone':
        command => sprintf($timezone_update, $timezone),
        unless  => sprintf($unless_cmd, $timezone),
        path    => '/usr/bin:/usr/sbin:/bin:/sbin',
        require => File[$localtime_file],
      }
    }
  }

  if $ensure == 'present' and $hwutc != undef {
    $hwclock_cmd = lookup('timezone::hwclock_cmd', Optional[String], 'first', undef)
    $hwclock_check_enabled_cmd = lookup('timezone::check_hwclock_enabled_cmd', Optional[String], 'first', undef)
    $hwclock_check_disabled_cmd = lookup('timezone::check_hwclock_disabled_cmd', Optional[String], 'first', undef)

    if $hwclock_cmd != '' and $hwclock_cmd != undef {
      if ! $hwutc {
        $hwclock_unless = $hwclock_check_enabled_cmd
      } else {
        $hwclock_unless = $hwclock_check_disabled_cmd
      }
      exec { 'set_hwclock':
        command => sprintf($hwclock_cmd, (! $hwutc)),
        unless  => $hwclock_unless,
        path    => '/usr/bin:/usr/sbin:/bin:/sbin',
      }
    }
  }

}