puppet-swift/manifests/storage/policy.pp
Adam Vinsh 63688a14e5 Add support for swift storage policies
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
2016-11-22 16:17:52 +00:00

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,
}
}