1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
# GlusterFS module by James
# Copyright (C) 2010-2013+ James Shubin
# Written by James Shubin <james@shubin.ca>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
class gluster::simple(
$path = '',
$volume = 'puppet', # NOTE: this can be a list...
$replica = 1,
$stripe = 1, # TODO: not fully implemented in puppet-gluster
$vip = '', # strongly recommended
$shorewall = true
) {
include gluster::vardir
#$vardir = $::gluster::vardir::module_vardir # with trailing slash
$vardir = regsubst($::gluster::vardir::module_vardir, '\/$', '')
if "${path}" == '' {
file { "${vardir}/data/":
ensure => directory, # make sure this is a directory
recurse => false, # don't recurse into directory
purge => false, # don't purge unmanaged files
force => false, # don't purge subdirs and links
require => File["${vardir}/"],
}
}
$chosen_path = "${path}" ? {
'' => "${vardir}/data/",
default => "${path}",
}
$valid_path = sprintf("%s/", regsubst($chosen_path, '\/$', ''))
notify { 'gluster::simple':
message => 'You are using gluster::simple !',
}
if "${vip}" == '' {
# If you don't use a VIP, things will be racy, but could mostly
# work. If you run puppet manually, then a vip isn't necessary.
# see: http://ttboj.wordpress.com/2012/08/23/how-to-avoid-cluster-race-conditions-or-how-to-implement-a-distributed-lock-manager-in-puppet/
warning('It is highly recommended to use a VIP.')
}
class { '::gluster::server':
vip => "${vip}",
#zone => 'net', # defaults to net
shorewall => $shorewall,
}
@@gluster::host { "${::fqdn}":
}
Gluster::Host <<||>>
@@gluster::brick { "${::fqdn}:${valid_path}":
areyousure => true,
}
Gluster::Brick <<||>>
gluster::volume { $volume:
replica => $replica,
stripe => $stripe,
# NOTE: with this method you do not choose the order of course!
# the gluster_fqdns fact is alphabetical, but not complete till
# at least a puppet run of each node has occured. watch out for
# partial clusters missing some of the nodes with bad ordering!
#bricks => split(inline_template("<%= gluster_fqdns.split(',').collect {|x| x+':${valid_path}' }.join(',') %>"), ','),
# the only semi-safe way is the new built in automatic collect:
bricks => true, # automatic brick collection...
start => true,
}
Gluster::Volume <<||>>
}
# vim: ts=8
|