initial check-in of stunnel module, based on stunnel4
[puppet_stunnel.git] / manifests / init.pp
1 #
2 # stunnel puppet module
3 #
4 # Copyright 2009, Riseup Networks <micah@riseup.net>
5 #
6 #
7 # This program is free software; you can redistribute 
8 # it and/or modify it under the terms of the GNU 
9 # General Public License version 3 as published by 
10 # the Free Software Foundation.
11 #
12 # 1. include stunnel: this will automatically include stunnel::debian,
13 #    which automatically includes stunnel::linux, which automatically
14 #    includes stunnel::base
15 # 2. stunnel::config allows you to configure the general stunnel configuration
16 #    e.g. stunnel::config { configdir => '/etc/stunnel4', enable => false }
17 # 3. stunnel::client allows you to configure different /etc/stunnel/*.conf files
18 #    to provide various stunnel configurations
19
20 # TODO: warn on cert/key issues, fail on false accept?
21
22 class stunnel {
23
24   case $operatingsystem {
25     debian: { include stunnel::debian }
26     default: { include stunnel::default }
27   }
28
29   define client ( $ensure = present, $accept = false, $CApath = false, $CAfile = false,
30                   $cert = false, $ciphers = false, $client = false, $connect = false,
31                   $CRLpath = false, $CRLfile = false, $delay = false, $engineNum = false,
32                   $exec = false, $execargs = false, $failover = false, $ident = false,
33                   $key = false, $local = false, $OSCP = false, $OCSPflag = false,
34                   $options = false, $pid = false, $protocol = false,
35                   $protocolAuthentication = false, $protocolHost = false,
36                   $protocolPassword = false, $protocolUsername = false, $pty = false,
37                   $retry = false, $session = false, $sslVersion = "SSLv3",
38                   $stack = false, $TIMEOUTbusy = false, $TIMEOUTclose = false,
39                   $TIMEOUTconnect = false, $TIMEOUTidle = false, $transparent = false,
40                   $verify = false ) {
41
42     real_client = $client ? { default => "yes" }
43     real_pid = $pid ? { false => "/${name}.pid", default => $pid }
44                     
45     file { "/etc/stunnel/${name}.conf":
46       ensure => $ensure,
47       content => template('stunnel/client.conf.erb'), 
48       owner => root, group => 0, mode => 0600,
49       require => File["/etc/stunnel"],
50       notify => Service[stunnel];
51     }
52   }
53 }
54
55 class stunnel::config {
56   
57   $chroot = $chroot_override ? {
58     '' => "/var/lib/stunnel4",
59     default => $chroot_override
60   }
61   
62   $compression = $compression_override ? {
63     '' => false,
64     default => $compression_override
65   }
66   
67   $debuglevel = $debuglevel_override ? {
68     '' => false,
69     default => $debuglevel_override
70   }
71   
72   $EGD = $EGD_override ? {
73     '' => false,
74     default => $EGD_override
75   }
76   
77   $engine = $engine_override ? {
78     '' => false,
79     default => $engine_override
80   }
81   
82   $engineCtrl = $engineCtrl_override ? {
83     '' => false,
84     default => $engineCtrl_override
85   }
86   
87   $output = $output_override ? {
88     '' => false,
89     default => $output_override
90   }
91   
92   $RNDbytes = $RNDbytes_override ? {
93     '' => false,
94     default => $RNDbytes_override
95   }
96   
97   $RNDfile = $RNDfile_override ? {
98     '' => false,
99     default => $RNDfile_override
100   }
101   
102   $RNDoverwrite = $RNDoverwrite_override ? {
103     '' => false,
104     default => $RNDoverwrite_override
105   }
106   
107   $service = $service_override ? {
108     '' => false,
109     default => $service_override
110   }
111   
112   $setuid = $setuid_override ? {
113     '' => "stunnel4",
114     default => $setuid_override
115   }
116   
117   $setgid = $setgid_override ? {
118     '' => "stunnel4",
119     default => $setgid_override
120   }
121   
122   $socket = $socket_override ? {
123     '' => [ "l:TCP_NODELAY=1", "r:TCP_NODELAY=1" ],
124     default => $socket_override
125   }
126   
127   $syslog = $syslog_override ? {
128     '' => false,
129     default => $syslog_override
130   }
131 }
132
133 class stunnel::base inherits stunnel::config {
134   
135   case $stunnel_ensure_version {
136     '': { $stunnel_ensure_version = "present" }
137   }
138   
139   file { "/etc/stunnel":
140     ensure => directory;
141   }
142     
143   service { 'stunnel':
144     name => 'stunnel',
145     enable => true,
146     ensure => running,
147     hasstatus => false,
148     require => File["/etc/stunnel/stunnel.conf"];
149   }
150   
151   if $use_nagios {
152     case $nagios_stunnel_procs {
153       'false': { info("We aren't doing nagios checks for stunnel on ${fqdn}" ) }
154       default: { nagios::service { "stunnel": check_command => "nagios-stat-proc!/usr/bin/stunnel4 /etc/stunnel/stunnel.conf!6!5!proc"; } }
155     }
156   }
157 }
158
159 class stunnel::linux inherits stunnel::base {
160   
161   if $stunnel_ensure_version == '' { $stunnel_ensure_version = 'installed' } 
162   package { 'stunnel':
163     ensure => $stunnel_ensure_version
164   }
165   File[stunnel_config]{
166     require => Package[stunnel]
167   }
168 }    
169
170
171 class stunnel::debian inherits stunnel::linux {
172   
173   Package[stunnel] {
174     name => 'stunnel4',
175   }
176   
177   Service[stunnel] {
178     name => 'stunnel4',
179     pattern => '/usr/bin/stunnel4 /etc/stunnel/stunnel.conf',
180   }
181   
182   # make the /etc/default/stunnel configurable with a variable
183   case $stunnel_startboot {
184     '': { $stunnel_startboot = '1' }
185   }
186   
187   file { '/etc/default/stunnel4':
188     content => template("stunnel/Debian/default"),
189     require => Package['stunnel4'],
190     notify => Service['stunnel4'],
191     owner => root, group => 0, mode => 0644;
192   }
193 }
194