Skip to content

Commit ae16b8e

Browse files
committed
initial spike, works, needs specs
1 parent ecf11e5 commit ae16b8e

File tree

8 files changed

+208
-140
lines changed

8 files changed

+208
-140
lines changed

manifests/config.pp

+51-12
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,52 @@
1-
# Internal: Configure postgresql.
2-
#
3-
# Examples
4-
#
5-
# include postgresql::config
6-
class postgresql::config {
7-
require boxen::config
8-
9-
$executable = "${boxen::config::home}/homebrew/bin/postgres"
10-
$datadir = "${boxen::config::datadir}/postgresql"
11-
$logdir = "${boxen::config::logdir}/postgresql"
12-
$port = 15432
1+
# Internal: Manage configuration files for postgresql
2+
class postgresql::config(
3+
$ensure = $postgresql::params::ensure,
4+
5+
$executable = $postgresql::params::executable,
6+
7+
$host = $postgresql::params::host,
8+
$port = $postgresql::params::port,
9+
$datadir = $postgresql::params::datadir,
10+
$logdir = $postgresql::params::logdir,
11+
) inherits postgresql::params {
12+
13+
include sysctl
14+
15+
$dir_ensure = $ensure ? {
16+
present => directory,
17+
default => absent,
18+
}
19+
20+
file {
21+
[
22+
$datadir,
23+
$logdir
24+
]:
25+
ensure => $dir_ensure;
26+
27+
'/Library/LaunchDaemons/dev.postgresql.plist':
28+
content => template('postgresql/dev.postgresql.plist.erb'),
29+
group => 'wheel',
30+
owner => 'root' ;
31+
}
32+
33+
sysctl::set {
34+
'kern.sysv.shmmax':
35+
value => 1610612736 ;
36+
'kern.sysv.shmall':
37+
value => 393216
38+
}
39+
40+
if $::operatingsystem == 'Darwin' {
41+
include boxen::config
42+
43+
boxen::env_script { 'postgresql':
44+
content => template('postgresql/env.sh.erb'),
45+
priority => 'lower',
46+
}
47+
48+
file { "${boxen::config::envdir}/postgresql.sh":
49+
ensure => absent,
50+
}
51+
}
1352
}

manifests/init.pp

+33-55
Original file line numberDiff line numberDiff line change
@@ -3,74 +3,52 @@
33
# Examples
44
#
55
# include postgresql
6-
class postgresql {
7-
include postgresql::config
8-
include homebrew
9-
include sysctl
6+
class postgresql(
7+
$ensure = $postgresql::params::ensure,
108

11-
file { [
12-
$postgresql::config::datadir,
13-
$postgresql::config::logdir,
14-
]:
15-
ensure => directory
16-
}
9+
$executable = $postgresql::params::executable,
1710

18-
file { '/Library/LaunchDaemons/dev.postgresql.plist':
19-
content => template('postgresql/dev.postgresql.plist.erb'),
20-
group => 'wheel',
21-
notify => Service['dev.postgresql'],
22-
owner => 'root'
23-
}
11+
$host = $postgresql::params::host,
12+
$port = $postgresql::params::port,
13+
$datadir = $postgresql::params::datadir,
14+
$logdir = $postgresql::params::logdir,
2415

25-
sysctl::set { 'kern.sysv.shmmax':
26-
value => 1610612736
27-
}
16+
$package = $postgresql::params::package,
17+
$version = $postgresql::params::version,
2818

29-
sysctl::set { 'kern.sysv.shmall':
30-
value => 393216
31-
}
19+
$service = $postgresql::params::service,
20+
$enable = $postgresql::params::enable,
21+
) inherits postgresql::params {
3222

33-
homebrew::formula { 'postgresql':
34-
before => Package['boxen/brews/postgresql'],
35-
}
23+
class { 'postgresql::config':
24+
ensure => $ensure,
3625

37-
package { 'boxen/brews/postgresql':
38-
ensure => '9.2.4-boxen2',
39-
notify => Service['dev.postgresql']
40-
}
26+
executable => $executable,
4127

42-
exec { 'init-postgresql-db':
43-
command => "initdb -E UTF-8 ${postgresql::config::datadir}",
44-
creates => "${postgresql::config::datadir}/PG_VERSION",
45-
require => Package['boxen/brews/postgresql']
28+
host => $host,
29+
port => $port,
30+
datadir => $datadir,
31+
logdir => $logdir,
4632
}
4733

48-
service { 'dev.postgresql':
49-
ensure => running,
50-
require => Exec['init-postgresql-db']
51-
}
34+
~>
35+
class { 'postgresql::package':
36+
ensure => $ensure,
5237

53-
service { 'com.boxen.postgresql': # replaced by dev.postgresql
54-
before => Service['dev.postgresql'],
55-
enable => false
38+
package => $package,
39+
version => $version,
5640
}
5741

58-
boxen::env_script { 'postgresql':
59-
content => template('postgresql/env.sh.erb'),
60-
priority => 'lower',
61-
}
42+
~>
43+
class { 'postgresql::service':
44+
ensure => $ensure,
6245

63-
file { "${boxen::config::envdir}/postgresql.sh":
64-
ensure => absent,
65-
}
46+
service => $service,
47+
enable => $enable,
6648

67-
$nc = "nc -z localhost ${postgresql::config::port}"
68-
69-
exec { 'wait-for-postgresql':
70-
command => "while ! ${nc}; do sleep 1; done",
71-
provider => shell,
72-
timeout => 30,
73-
unless => $nc,
74-
require => Service['dev.postgresql']
49+
datadir => $datadir,
50+
host => $host,
51+
port => $port,
7552
}
53+
7654
}

manifests/package.pp

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Internal: install the pg packages
2+
class postgresql::package(
3+
$ensure = $postgresql::params::ensure,
4+
5+
$package = $postgresql::params::package,
6+
$version = $postgresql::params::version,
7+
) inherits postgresql::params {
8+
9+
$package_ensure = $ensure ? {
10+
present => $version,
11+
default => absent,
12+
}
13+
14+
if $::operatingsystem == 'Darwin' {
15+
homebrew::formula { 'postgresql': }
16+
}
17+
18+
package { $package:
19+
ensure => $package_ensure
20+
}
21+
22+
}

manifests/params.pp

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Internal: defaults
2+
class postgresql::params {
3+
4+
case $::operatingsystem {
5+
Darwin: {
6+
include boxen::config
7+
8+
$executable = "${boxen::config::home}/homebrew/bin/postgres"
9+
$datadir = "${boxen::config::datadir}/postgresql"
10+
$logdir = "${boxen::config::logdir}/postgresql"
11+
$port = 15432
12+
13+
$package = 'boxen/brews/postgresql'
14+
$version = '9.2.4-boxen2'
15+
16+
$service = 'dev.postgresql'
17+
}
18+
19+
Ubuntu: {
20+
$executable = undef # only used on Darwin
21+
$datadir = '/var/lib/postgresql'
22+
$logdir = '/var/log/postgresql'
23+
$port = 5432
24+
25+
$package = 'postgresql-server-9.1'
26+
$version = installed
27+
28+
$service = 'postgresql-9.1'
29+
}
30+
31+
default: {
32+
fail('Unsupported operating system!')
33+
}
34+
}
35+
36+
$ensure = present
37+
$host = $::ipaddress_lo0
38+
$enable = true
39+
40+
}

manifests/service.pp

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Internal: manages postgresql service
2+
class postgresql::service(
3+
$ensure = postgresql::params::ensure,
4+
5+
$service = $postgresql::params::service,
6+
$enable = $postgresql::params::enable,
7+
8+
$datadir = $postgresql::params::datadir,
9+
$host = $postgresql::params::host,
10+
$port = $postgresql::params::port,
11+
) inherits postgresql::params {
12+
13+
$svc_ensure = $ensure ? {
14+
present => running,
15+
default => stopped,
16+
}
17+
18+
$nc = "nc -z ${host} ${port}"
19+
20+
if $::operatingsystem == 'Darwin' {
21+
service { 'com.boxen.postgresql':
22+
ensure => stopped,
23+
before => Service[$service],
24+
enable => false
25+
}
26+
}
27+
28+
exec { 'init-postgresql-db':
29+
command => "initdb -E UTF-8 ${datadir}",
30+
creates => "${datadir}/PG_VERSION",
31+
}
32+
33+
->
34+
service { $service:
35+
ensure => $svc_ensure,
36+
enable => $enable,
37+
}
38+
39+
->
40+
exec { 'wait-for-postgresql':
41+
command => "while ! ${nc}; do sleep 1; done",
42+
provider => shell,
43+
timeout => 30,
44+
unless => $nc,
45+
}
46+
47+
}

spec/classes/postgresql_spec.rb

-59
Original file line numberDiff line numberDiff line change
@@ -4,65 +4,6 @@
44
let(:facts) { default_test_facts }
55

66
it do
7-
should include_class('postgresql::config')
8-
should include_class('homebrew')
9-
should include_class('sysctl')
107

11-
['data', 'log'].each do |dir|
12-
should contain_file("/test/boxen/#{dir}/postgresql").with({
13-
:ensure => 'directory',
14-
})
15-
end
16-
17-
should contain_file('/Library/LaunchDaemons/dev.postgresql.plist').with({
18-
:content => File.read('spec/fixtures/dev.postgresql.plist'),
19-
:group => 'wheel',
20-
:notify => 'Service[dev.postgresql]',
21-
:owner => 'root',
22-
})
23-
24-
should contain_sysctl__set('kern.sysv.shmmax').with({
25-
:value => 1610612736
26-
})
27-
28-
should contain_sysctl__set('kern.sysv.shmall').with({
29-
:value => 393216
30-
})
31-
32-
should contain_homebrew__formula('postgresql').
33-
with_before('Package[boxen/brews/postgresql]')
34-
35-
should contain_package('boxen/brews/postgresql').with({
36-
:ensure => '9.2.4-boxen2',
37-
:notify => 'Service[dev.postgresql]'
38-
})
39-
40-
should contain_exec('init-postgresql-db').with({
41-
:command => 'initdb -E UTF-8 /test/boxen/data/postgresql',
42-
:creates => '/test/boxen/data/postgresql/PG_VERSION',
43-
:require => 'Package[boxen/brews/postgresql]'
44-
})
45-
46-
should contain_service('dev.postgresql').with({
47-
:ensure => 'running',
48-
:require => 'Exec[init-postgresql-db]'
49-
})
50-
51-
should contain_service('com.boxen.postgresql').with({
52-
:ensure => nil,
53-
:before => 'Service[dev.postgresql]'
54-
})
55-
56-
should contain_file('/test/boxen/env.d/postgresql.sh').with({
57-
:ensure => :absent,
58-
})
59-
60-
should contain_exec('wait-for-postgresql').with({
61-
:command => 'while ! nc -z localhost 15432; do sleep 1; done',
62-
:provider => 'shell',
63-
:timeout => 30,
64-
:unless => 'nc -z localhost 15432',
65-
:require => 'Service[dev.postgresql]'
66-
})
678
end
689
end

templates/dev.postgresql.plist.erb

+11-8
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,22 @@
1010
<key>Description</key>
1111
<string>A tolerably okay relational database.</string>
1212

13+
<key>Host</key>
14+
<string><%= @host %></string>
15+
1316
<key>Port</key>
14-
<integer><%= scope.lookupvar "postgresql::config::port" %></integer>
17+
<integer><%= @port %></integer>
1518
</dict>
1619

1720
<key>ProgramArguments</key>
1821
<array>
19-
<string><%= scope.lookupvar "postgresql::config::executable" %></string>
22+
<string><%= @executable %></string>
2023
<string>-p</string>
21-
<string><%= scope.lookupvar "postgresql::config::port" %></string>
24+
<string><%= @port %></string>
2225
<string>-D</string>
23-
<string><%= scope.lookupvar "postgresql::config::datadir" %></string>
26+
<string><%= @datadir %></string>
2427
<string>-r</string>
25-
<string><%= scope.lookupvar "postgresql::config::logdir" %>/server.log</string>
28+
<string><%= @logdir %>/server.log</string>
2629
</array>
2730

2831
<key>RunAtLoad</key>
@@ -35,12 +38,12 @@
3538
<string><%= scope.lookupvar "::boxen_user" %></string>
3639

3740
<key>WorkingDirectory</key>
38-
<string><%= scope.lookupvar "postgresql::config::datadir" %></string>
41+
<string><%= @datadir %></string>
3942

4043
<key>StandardErrorPath</key>
41-
<string><%= scope.lookupvar "postgresql::config::logdir" %>/console.log</string>
44+
<string><%= @logdir %>/console.log</string>
4245

4346
<key>StandardOutPath</key>
44-
<string><%= scope.lookupvar "postgresql::config::logdir" %>/console.log</string>
47+
<string><%= @logdir %>/console.log</string>
4548
</dict>
4649
</plist>

0 commit comments

Comments
 (0)