diff options
Diffstat (limited to 'manifests')
-rw-r--r-- | manifests/volume/property/group.pp | 35 | ||||
-rw-r--r-- | manifests/volume/property/group/data.pp | 40 |
2 files changed, 63 insertions, 12 deletions
diff --git a/manifests/volume/property/group.pp b/manifests/volume/property/group.pp index 8901553..97c03b7 100644 --- a/manifests/volume/property/group.pp +++ b/manifests/volume/property/group.pp @@ -27,6 +27,7 @@ define gluster::volume::property::group( include gluster::xml include gluster::vardir include gluster::volume::property + include gluster::volume::property::group::data #$vardir = $::gluster::vardir::module_vardir # with trailing slash $vardir = regsubst($::gluster::vardir::module_vardir, '\/$', '') @@ -42,19 +43,29 @@ define gluster::volume::property::group( $groups = split($gluster_property_groups, ',') # fact if ! ("${group}" in $groups) { - fail("The group named '${group}' is not available.") - } - # read the fact that comes from the data in: /var/lib/glusterd/groups/* - $group_data_string = getvar("gluster_property_group_${name}") # fact! - # each element in this list is a key=value string - $group_data_list = split("${group_data_string}", ',') - # split into the correct hash to create all the properties - $group_data_yaml = inline_template("<%= @group_data_list.inject(Hash.new) { |h,i| { '${volume}#'+((i.split('=').length == 2) ? i.split('=')[0] : '') => {'value' => ((i.split('=').length == 2) ? i.split('=')[1] : '')} }.merge(h) }.to_yaml %>") - # build into a hash - $group_data_hash = parseyaml($group_data_yaml) - # create the properties - create_resources('gluster::volume::property', $group_data_hash) + # check a fact to see if the directory is built yet... this + # prevents weird corner cases where this module is added to + # a new machine which is already built, except doesn't have + # the custom group data installed yet. if we fail, we won't + # be able to install it, so we don't fail, we warn instead! + if "${gluster_property_groups_ready}" == 'true' { + warning("The group named '${group}' is not available.") + } else { + notice("The group '${group}' might not be built yet.") + } + } else { + # read the fact that comes from the data in: /var/lib/glusterd/groups/* + $group_data_string = getvar("gluster_property_group_${group}") # fact! + # each element in this list is a key=value string + $group_data_list = split("${group_data_string}", ',') + # split into the correct hash to create all the properties + $group_data_yaml = inline_template("<%= @group_data_list.inject(Hash.new) { |h,i| { '${volume}#'+((i.split('=').length == 2) ? i.split('=')[0] : '') => {'value' => ((i.split('=').length == 2) ? i.split('=')[1] : '')} }.merge(h) }.to_yaml %>") + # build into a hash + $group_data_hash = parseyaml($group_data_yaml) + # create the properties + create_resources('gluster::volume::property', $group_data_hash) + } } # vim: ts=8 diff --git a/manifests/volume/property/group/data.pp b/manifests/volume/property/group/data.pp new file mode 100644 index 0000000..c731266 --- /dev/null +++ b/manifests/volume/property/group/data.pp @@ -0,0 +1,40 @@ +# GlusterFS module by James +# Copyright (C) 2012-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/>. + +# NOTE: this provides an internal repository of volume parameter set groups and +# can be useful if the version of glusterfs does not have set group support, or +# if this module wants to distribute some custom groups which are not upstream. + +class gluster::volume::property::group::data() { + + include gluster::vardir + + #$vardir = $::gluster::vardir::module_vardir # with trailing slash + $vardir = regsubst($::gluster::vardir::module_vardir, '\/$', '') + + file { "${vardir}/groups/": + source => 'puppet:///modules/gluster/groups/', + owner => root, + group => nobody, + mode => 644, # u=rwx + backup => false, # don't backup to filebucket + ensure => present, + require => File["${vardir}/"], + } +} + +# vim: ts=8 |