compass-adapters/chef/cookbooks/lvm/libraries/resource_lvm_volume_group.rb
SamSu 46169eefe0 Update cookbooks and roles
Change-Id: I832c3edd2114c6346c8f6f319b9c522662e0d158
2014-02-21 20:33:52 -08:00

117 lines
3.4 KiB
Ruby

#
# Cookbook Name:: lvm
# Library:: resource_lvm_volume_group
#
# Copyright 2009-2013, Opscode, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
require 'chef/resource'
class Chef
class Resource
# The lvm_volume_group resource
#
class LvmVolumeGroup < Chef::Resource
include Chef::DSL::Recipe
# Logical volumes to be created in the volume group
attr_reader :logical_volumes
# Initializes the lvm_volume_group resource
#
# @param name [String] name of the resource
# @param run_context [Chef::RunContext] the run context of chef run
#
# @return [Chef::Resource::LvmVolumeGroup] the lvm_volume_group resource
#
def initialize(name, run_context = nil)
super
@resource_name = :lvm_volume_group
@action = :create
@allowed_actions.push :create
@logical_volumes = []
@provider = Chef::Provider::LvmVolumeGroup
end
# Attribute: name - name of the volume group
#
# @param arg [String] the name of the volume group
#
# @return [String] the name of the volume group
#
def name(arg = nil)
set_or_return(
:name,
arg,
:kind_of => String,
:name_attribute => true,
:regex => /[\w+.-]+/,
:required => true,
:callbacks => {
"cannot be '.' or '..'" => proc do |value|
!(value == '.' || value == '..')
end
}
)
end
# Attribute: physical_volumes - list of physical devices this volume group should be restricted to
#
# @param arg [Array, String] list of physical devices
#
# @return [String] list of physical devices
#
def physical_volumes(arg = nil)
set_or_return(
:physical_volumes,
arg,
:kind_of => [Array, String],
:required => true
)
end
# Attribute: physical_extent_size - the physical_extent_size
#
# @param arg [String] the physical extent size
#
# @return [String] the physical extent size
#
def physical_extent_size(arg = nil)
set_or_return(
:physical_extent_size,
arg,
:kind_of => String,
:regex => /\d+[bBsSkKmMgGtTpPeE]?/
)
end
# A shortcut for creating a logical volume when creating the volume group
#
# @param name [String] the name of the logical volume
# @param block [Proc] the block defining the lvm_logical_volume resource
#
# @return [Chef::Resource::LvmLogicalVolume] the lvm_logical_volume resource
#
def logical_volume(name, &block)
Chef::Log.debug "Creating logical volume #{name}"
volume = lvm_logical_volume(name, &block)
volume.action :nothing
@logical_volumes << volume
volume
end
end
end
end