| Index: modules/base/manifests/init.pp |
| =================================================================== |
| --- a/modules/base/manifests/init.pp |
| +++ b/modules/base/manifests/init.pp |
| @@ -1,4 +1,49 @@ |
| class base ($zone='adblockplus.org') { |
| + stage {'pre': before => Stage['main']} |
| + stage {'post': require => Stage['main']} |
| + |
| + class {'users': |
| + stage => 'pre', |
| + } |
| + |
| + if !defined(Class['apt']) { |
| + class {'apt': |
| + always_apt_update => true |
| + } |
| + } |
| + |
| + # Note that APT dependencies are excluded here! |
| + Exec['apt_update'] -> Package <|title != 'python-software-properties'|> |
| + |
| + include postfix, ssh |
| + |
| + package {['mercurial', 'vim', 'emacs', 'debian-goodies', 'htop']: |
| + ensure => present, |
| + } |
| + |
| + file {'/etc/timezone': |
| + ensure => file, |
| + owner => root, |
| + group => root, |
| + mode => 0644, |
| + content => 'UTC', |
| + notify => Service['cron'] |
| + } |
| + |
| + file {'/etc/localtime': |
| + ensure => link, |
| + target => '/usr/share/zoneinfo/UTC', |
| + notify => Service['cron'] |
| + } |
| + |
| + service {'cron': |
| + ensure => running, |
| + enable => true, |
| + } |
| + |
| + class {'logrotate': |
| + stage => 'post' |
| + } |
| $servers = hiera('servers') |
| create_resources(base::explicit_host_record, $servers) |
| @@ -11,34 +56,59 @@ |
| $groups = undef, |
| ) { |
| - $fqdn = $dns ? { |
| - undef => "$name.${base::zone}", |
| - default => $dns, |
| + if is_array($ip) { |
| + $internal_ip = $ip[0] |
| + } else { |
| + $internal_ip = $ip |
| } |
| - $ips = is_array($ip) ? { |
| - true => $ip, |
| - default => [$ip], |
| + $fqdn_name = join([$name, $base::zone], '.') |
| + |
| + host{$name: |
| + ensure => present, |
| + ip => $internal_ip, |
| + name => $fqdn_name, |
| + host_aliases => $dns ? { |
| + undef => [], |
| + default => $dns, |
| + } |
| } |
| - $public_key = $ssh_public_key ? { |
| - undef => undef, |
| - default => "ssh-rsa $ssh_public_key $fqdn", |
| + if $ssh_public_key != undef { |
| + |
| + $name_key = $dns ? { |
| + undef => $fqdn_name, |
| + default => $dns, |
| + } |
| + |
| + @sshkey {$name: |
| + name => $name_key, |
| + key => $ssh_public_key, |
| + type => ssh-rsa, |
| + host_aliases => $ip, |
| + tag => 'base::explicit_host_record', |
| + } |
| } |
| + } |
| - adblockplus::host {$title: |
| - fqdn => $fqdn, |
| - groups => $groups, |
| - ips => $ips, |
| - name => $name, |
| - role => $role, |
| - public_key => $public_key, |
| + # Work around https://projects.puppetlabs.com/issues/4145 |
| + Sshkey<| |> -> |
| + file {'/etc/ssh/ssh_known_hosts': |
| + ensure => 'present', |
| + mode => 0644, |
| + } |
| + |
| + # Work around https://issues.adblockplus.org/ticket/3479 |
| + if $::environment == 'development' { |
| + |
| + file { |
| + '/etc/ssh/ssh_host_rsa_key': |
| + source => 'puppet:///modules/base/development_host_rsa_key', |
| + mode => 600, |
| + notify => Service['ssh']; |
| + '/etc/ssh/ssh_host_rsa_key.pub': |
| + source => 'puppet:///modules/base/development_host_rsa_key.pub', |
| + mode => 644; |
| } |
| - |
| - # Implicit realization behavior has been introduced by accident in a |
| - # previous version, hence it should be kept until class base is obsolete |
| - # and the obsolete records have been removed |
| - realize(Host[$title]) |
| - realize(Sshkey[$title]) |
| } |
| } |