Stop using sudoers on all servers defined
[releng.git] / prototypes / puppet-infracloud / modules / opnfv / manifests / server.pp
1 # SPDX-license-identifier: Apache-2.0
2 ##############################################################################
3 # Copyright (c) 2016 RedHat and others.
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 ##############################################################################
9 class opnfv::server (
10   $iptables_public_tcp_ports = [],
11   $iptables_public_udp_ports = [],
12   $iptables_rules4           = [],
13   $iptables_rules6           = [],
14   $sysadmins                 = [],
15   $enable_unbound            = true,
16   $purge_apt_sources         = true,
17 ) {
18   ###########################################################
19   # Classes for all hosts
20
21   include snmpd
22
23   class { 'iptables':
24     public_tcp_ports => $iptables_public_tcp_ports,
25     public_udp_ports => $all_udp,
26     rules4           => $iptables_rules4,
27     rules6           => $iptables_rules6,
28   }
29
30   class { 'timezone':
31     timezone => 'Etc/UTC',
32   }
33
34   if ($enable_unbound) {
35     class { 'unbound':
36       install_resolv_conf => $install_resolv_conf
37     }
38   }
39
40   if ($::in_chroot) {
41     notify { 'rsyslog in chroot':
42       message => 'rsyslog not refreshed, running in chroot',
43     }
44     $rsyslog_notify = []
45   } else {
46     service { 'rsyslog':
47       ensure     => running,
48       enable     => true,
49       hasrestart => true,
50       require    => Package['rsyslog'],
51     }
52     $rsyslog_notify = [ Service['rsyslog'] ]
53   }
54
55   ###########################################################
56   # System tweaks
57
58   # Increase syslog message size in order to capture
59   # python tracebacks with syslog.
60   file { '/etc/rsyslog.d/99-maxsize.conf':
61     ensure  => present,
62     # Note MaxMessageSize is not a puppet variable.
63     content => '$MaxMessageSize 6k',
64     owner   => 'root',
65     group   => 'root',
66     mode    => '0644',
67     notify  => $rsyslog_notify,
68     require => Package['rsyslog'],
69   }
70
71   # We don't like byobu
72   file { '/etc/profile.d/Z98-byobu.sh':
73     ensure => absent,
74   }
75
76   if $::osfamily == 'Debian' {
77
78     # Ubuntu installs their whoopsie package by default, but it eats through
79     # memory and we don't need it on servers
80     package { 'whoopsie':
81       ensure => absent,
82     }
83
84     package { 'popularity-contest':
85       ensure => absent,
86     }
87   }
88
89   ###########################################################
90   # Package resources for all operating systems
91
92   package { 'at':
93     ensure => present,
94   }
95
96   package { 'lvm2':
97     ensure => present,
98   }
99
100   package { 'strace':
101     ensure => present,
102   }
103
104   package { 'tcpdump':
105     ensure => present,
106   }
107
108   package { 'rsyslog':
109     ensure => present,
110   }
111
112   package { 'git':
113     ensure => present,
114   }
115
116   package { 'rsync':
117     ensure => present,
118   }
119
120   case $::osfamily {
121     'RedHat': {
122       $packages = ['parted', 'puppet', 'wget', 'iputils']
123       $user_packages = ['emacs-nox', 'vim-enhanced']
124       $update_pkg_list_cmd = ''
125     }
126     'Debian': {
127       $packages = ['parted', 'puppet', 'wget', 'iputils-ping']
128       case $::operatingsystemrelease {
129         /^(12|14)\.(04|10)$/: {
130           $user_packages = ['emacs23-nox', 'vim-nox', 'iftop',
131                             'sysstat', 'iotop']
132         }
133         default: {
134           $user_packages = ['emacs-nox', 'vim-nox']
135         }
136       }
137       $update_pkg_list_cmd = 'apt-get update >/dev/null 2>&1;'
138     }
139     default: {
140       fail("Unsupported osfamily: ${::osfamily} The 'openstack_project' module only supports osfamily Debian or RedHat (slaves only).")
141     }
142   }
143   package { $packages:
144     ensure => present
145   }
146
147   ###########################################################
148   # Package resources for specific operating systems
149
150   case $::osfamily {
151     'Debian': {
152       # Purge and augment existing /etc/apt/sources.list if requested, and make
153       # sure apt-get update is run before any packages are installed
154       class { '::apt':
155         purge => { 'sources.list' => $purge_apt_sources }
156       }
157
158       # Make sure dig is installed
159       package { 'dnsutils':
160         ensure => present,
161       }
162     }
163     'RedHat': {
164       # Make sure dig is installed
165       package { 'bind-utils':
166         ensure => present,
167       }
168     }
169   }
170
171   ###########################################################
172   # Manage  ntp
173
174   include '::ntp'
175
176   if ($::osfamily == "RedHat") {
177     # Utils in ntp-perl are included in Debian's ntp package; we
178     # add it here for consistency.  See also
179     # https://tickets.puppetlabs.com/browse/MODULES-3660
180     package { 'ntp-perl':
181       ensure => present
182     }
183     # NOTE(pabelanger): We need to ensure ntpdate service starts on boot for
184     # centos-7.  Currently, ntpd explicitly require ntpdate to be running before
185     # the sync process can happen in ntpd.  As a result, if ntpdate is not
186     # running, ntpd will start but fail to sync because of DNS is not properly
187     # setup.
188     package { 'ntpdate':
189       ensure => present,
190     }
191     service { 'ntpdate':
192       enable => true,
193       require => Package['ntpdate'],
194     }
195   }
196
197   ###########################################################
198   # Manage  python/pip
199
200   $desired_virtualenv = '13.1.0'
201   class { '::pip':
202     optional_settings => {
203       'extra-index-url' => '',
204     },
205     manage_pip_conf => true,
206   }
207
208   if (( versioncmp($::virtualenv_version, $desired_virtualenv) < 0 )) {
209     $virtualenv_ensure = $desired_virtualenv
210   } else {
211     $virtualenv_ensure = present
212   }
213   package { 'virtualenv':
214     ensure   => $virtualenv_ensure,
215     provider => openstack_pip,
216     require  => Class['pip'],
217   }
218
219   # add hosts entries
220   create_resources('host', hiera_hash('hosts'))
221 }