switch parameters to lowercase, seems to be a puppet restriction
[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::client allows you to configure different /etc/stunnel/*.conf files
16 #    to provide various stunnel configurations
17
18 # TODO: warn on cert/key issues, fail on false accept?
19
20 class stunnel {
21
22   case $operatingsystem {
23     debian: { include stunnel::debian }
24     default: { include stunnel::default }
25   }
26
27   define client ( $ensure = present, $accept = false, $capath = false,
28                   $cafile = false, $cert = false, $chroot = false,
29                   $ciphers = false, $client = false, $compress =
30                   false, $connect = false, $crlpath = false, $crlfile
31                   = false, $debuglevel = false, $delay = false, $egd =
32                   false, $engine = false, $engineCtrl = false,
33                   $enginenum = false, $exec = false, $execargs =
34                   false, $failover = false, $ident = false, $key =
35                   false, $local = false, $oscp = false, $ocspflag =
36                   false, $options = false, $output = false, $pid =
37                   false, $protocol = false, $protocolauthentication =
38                   false, $protocolhost = false, $protocolpassword =
39                   false, $protocolusername = false, $pty = false,
40                   $retry = false, $rndbytes = false, $rndfile = false,
41                   $rndoverwrite = false, $service = false, $session =
42                   false, $setuid = "stunnel4", $setgid = "stunnel4",
43                   $socket = [ "l:TCP_NODELAY=1", "r:TCP_NODELAY=1"],
44                   $sslversion = "SSLv3", $stack = false, $syslog =
45                   false, $timeoutbusy = false, $timeoutclose = false,
46                   $timeoutconnect = false, $timeoutidle = false,
47                   $transparent = false, $verify = false ) {
48
49     $real_client = $client ? { default => "yes" }
50     $real_pid = $pid ? { false => "/${name}.pid", default => $pid }
51                     
52     file { "/etc/stunnel/${name}.conf":
53       ensure => $ensure,
54       content => template('stunnel/client.conf.erb'), 
55       owner => root, group => 0, mode => 0600,
56       require => File["/etc/stunnel"],
57       notify => Service[stunnel];
58     }
59   }
60 }
61
62 class stunnel::base {
63   
64   case $stunnel_ensure_version {
65     '': { $stunnel_ensure_version = "present" }
66   }
67   
68   file { "/etc/stunnel":
69     ensure => directory;
70   }
71     
72   service { 'stunnel':
73     name => 'stunnel',
74     enable => true,
75     ensure => running,
76     hasstatus => false;
77   }
78   
79   if $use_nagios {
80     case $nagios_stunnel_procs {
81       'false': { info("We aren't doing nagios checks for stunnel on ${fqdn}" ) }
82       default: { nagios::service { "stunnel": check_command => "nagios-stat-proc!/usr/bin/stunnel4 /etc/stunnel/stunnel.conf!6!5!proc"; } }
83     }
84   }
85 }
86
87 class stunnel::linux inherits stunnel::base {
88   
89   if $stunnel_ensure_version == '' { $stunnel_ensure_version = 'installed' } 
90   package { 'stunnel':
91     ensure => $stunnel_ensure_version
92   }
93 }    
94
95
96 class stunnel::debian inherits stunnel::linux {
97   
98   Package[stunnel] {
99     name => 'stunnel4',
100   }
101   
102   Service[stunnel] {
103     name => 'stunnel4',
104     pattern => '/usr/bin/stunnel4 /etc/stunnel/stunnel.conf',
105   }
106   
107   # make the /etc/default/stunnel configurable with a variable
108   case $stunnel_startboot {
109     '': { $stunnel_startboot = '1' }
110   }
111   
112   file { '/etc/default/stunnel4':
113     content => template("stunnel/Debian/default"),
114     require => Package['stunnel4'],
115     notify => Service['stunnel4'],
116     owner => root, group => 0, mode => 0644;
117   }
118 }
119