63688a14e5
This change implements storage policies as defined by swift: http://docs.openstack.org/developer/swift/overview_policies.html There are two primary areas of change in this review - Add storage policy support to the ringbuilder and ring devices, along with associated spec tests. - Adding storage policy support and enforcing rules in swift.conf using the swift_storage_policy type and provider. Also: updated spec tests and an update to swift acceptance test to use storage policies to configure an additional 3 replica based ring. See release notes and the README update for more details/instructions. Change-Id: I2b8db751790704df3f1027a14f61e231591537f3
100 lines
3.0 KiB
Puppet
100 lines
3.0 KiB
Puppet
# Class swift::storage::policy
|
|
#
|
|
# Setting any optional parameter to undef will remove it
|
|
# from the storage policy defined in swift.conf.
|
|
#
|
|
# == Parameters
|
|
# [*ensure*]
|
|
# (optional) To ensure a storage policy exists in swift.conf
|
|
# set to 'present'. To remove a storage policy from swift.conf
|
|
# set to 'absent'.
|
|
# Defaults to 'present'
|
|
#
|
|
# [*policy_name*]
|
|
# (required) Storage policy name in swift.conf
|
|
# Names and aliases must be unique across all policies.
|
|
#
|
|
# [*default_policy*]
|
|
# (optional) Boolean to specify if this is the default storage policy
|
|
# Defaults to true
|
|
#
|
|
# [*policy_aliases*]
|
|
# (optional) A comma separated string of aliases to use for this storage
|
|
# policy. ex: 'gold, silver, taco' Names and aliases must be unique across
|
|
# all policies.
|
|
# Defaults to undef.
|
|
#
|
|
# [*policy_index*]
|
|
# (required) storage policy index. Becomes a storage policy section
|
|
# header in swift.conf.
|
|
# Defaults to '0'
|
|
#
|
|
# [*policy_type*]
|
|
# (required) Storage policy type. Can be 'replication' or 'erasure_coding'
|
|
# Defaults 'replication'.
|
|
#
|
|
# [*deprecated*]
|
|
# (optional) Any policy may be deprecated by setting deprecated = yes.
|
|
# Choices are 'yes', 'no', undef
|
|
# Defaults to undef
|
|
#
|
|
# [*ec_type*]
|
|
# (optional) Specifies the EC scheme that is to be used
|
|
# Defaults to undef
|
|
#
|
|
# [*ec_num_data_fragments*]
|
|
# (optional) The total number of fragments that will be
|
|
# comprised of data.
|
|
# Defaults to undef
|
|
#
|
|
# [*ec_num_parity_fragments*]
|
|
# (optional) The total number of fragments that will be
|
|
# comprised of parity.
|
|
# Defaults to undef
|
|
#
|
|
# [*ec_object_segment_size*]
|
|
# (optional) The amount of data that will be buffered up before
|
|
# feeding a segment into the encoder/decoder in bytes.
|
|
# Defaults to undef
|
|
#
|
|
define swift::storage::policy(
|
|
$policy_name,
|
|
$default_policy,
|
|
$ensure = 'present',
|
|
$policy_aliases = undef,
|
|
$policy_index = $name,
|
|
$policy_type = 'replication',
|
|
$deprecated = undef,
|
|
$ec_type = undef,
|
|
$ec_num_data_fragments = undef,
|
|
$ec_num_parity_fragments = undef,
|
|
$ec_object_segment_size = undef,
|
|
) {
|
|
|
|
include ::swift::deps
|
|
|
|
Swift_storage_policy<| |> ~> Service<| tag == 'swift-service' |>
|
|
|
|
if (downcase($policy_name) == 'policy-0') and ($policy_index != '0') {
|
|
fail('The name Policy-0 can only be used with policy index 0')
|
|
}
|
|
|
|
if ($default_policy == true) and ($deprecated == 'yes') {
|
|
fail('a deprecated policy may not also be declared the default')
|
|
}
|
|
|
|
swift_storage_policy { $policy_index:
|
|
ensure => $ensure,
|
|
policy_name => $policy_name,
|
|
aliases => $policy_aliases,
|
|
policy_type => $policy_type,
|
|
default => bool2str($default_policy),
|
|
deprecated => $deprecated,
|
|
ec_type => $ec_type,
|
|
ec_num_data_fragments => $ec_num_data_fragments,
|
|
ec_num_parity_fragments => $ec_num_parity_fragments,
|
|
ec_object_segment_size => $ec_object_segment_size,
|
|
}
|
|
|
|
}
|