120 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Puppet
		
	
	
	
	
	
			
		
		
	
	
			120 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Puppet
		
	
	
	
	
	
# == Class: swift::dispersion
 | 
						|
#
 | 
						|
# This class creates a configuration file for swift-dispersion-report and
 | 
						|
# and swift-dispersion-populate tools.
 | 
						|
#
 | 
						|
# These tools need access to all the storage nodes and are generally ran
 | 
						|
# on the swift proxy node.
 | 
						|
#
 | 
						|
# For more details, see :
 | 
						|
#   https://docs.openstack.org/swift/latest/admin_guide.html#cluster-health
 | 
						|
#
 | 
						|
# === Parameters
 | 
						|
#
 | 
						|
# [*auth_url*]
 | 
						|
#  String. The full URL to the authentication endpoint (eg. keystone)
 | 
						|
#  Optional. Defaults to '127.0.0.1'.
 | 
						|
#
 | 
						|
# [*auth_user*]
 | 
						|
#  String. The Swift username to use to run the tools.
 | 
						|
#  Optional. Defaults to 'dispersion'.
 | 
						|
#
 | 
						|
# [*auth_tenant*]
 | 
						|
#  String. The user's tenant/project.
 | 
						|
#  Optional. Defaults to 'services'.
 | 
						|
#
 | 
						|
# [*auth_pass*]
 | 
						|
#  String. The user's password.
 | 
						|
#  Optional. Defaults to 'dispersion_password'.
 | 
						|
#
 | 
						|
# [*auth_version*]
 | 
						|
#  String. The version to pass to the 'swift' command.
 | 
						|
#  Use '2.0' when using Keystone.
 | 
						|
#  Optional. Defaults to '2.0'
 | 
						|
#
 | 
						|
# [*endpoint_type*]
 | 
						|
#  String. The ability to choose which Swift endpoint to use.
 | 
						|
#  Optional. Defaults to 'publicURL'.
 | 
						|
#
 | 
						|
# [*swift_dir*]
 | 
						|
#  String. The path to swift configuration folder
 | 
						|
#  Optional. Defaults to '/etc/swift'.
 | 
						|
#
 | 
						|
# [*coverage*]
 | 
						|
#  Integer. The percentage of partitions to cover.
 | 
						|
#  Optional. Defaults to 1
 | 
						|
#
 | 
						|
# [*retries*]
 | 
						|
#  Integer. Number of retries.
 | 
						|
#  Optional. Defaults to 5.
 | 
						|
#
 | 
						|
# [*concurrency*]
 | 
						|
#  Integer. Process concurrency.
 | 
						|
#  Optional. Defaults to 25.
 | 
						|
#
 | 
						|
# [*dump_json*]
 | 
						|
#  'yes' or 'no'. Should 'swift-dispersion-report' dump json results ?
 | 
						|
#  Optional. Defaults to no.
 | 
						|
#
 | 
						|
# === Note
 | 
						|
#
 | 
						|
# Note: if using swift < 1.5.0, swift-dispersion-report and
 | 
						|
# swift-dispersion-populate might need to be patched with
 | 
						|
# https://github.com/openstack/swift/commit/9a423d0b78a105caf6011c6c3450f7d75d20b5a1
 | 
						|
#
 | 
						|
# === Authors
 | 
						|
#
 | 
						|
# Francois Charlier fcharlier@ploup.net
 | 
						|
#
 | 
						|
class swift::dispersion (
 | 
						|
  $auth_url      = 'http://127.0.0.1:5000/v3/',
 | 
						|
  $auth_user     = 'dispersion',
 | 
						|
  $auth_tenant   = 'services',
 | 
						|
  $auth_pass     = 'dispersion_password',
 | 
						|
  $auth_version  = '2.0',
 | 
						|
  $endpoint_type = 'publicURL',
 | 
						|
  $swift_dir     = '/etc/swift',
 | 
						|
  $coverage      = 1,
 | 
						|
  $retries       = 5,
 | 
						|
  $concurrency   = 25,
 | 
						|
  $dump_json     = 'no'
 | 
						|
) {
 | 
						|
 | 
						|
  include swift::deps
 | 
						|
  include swift::params
 | 
						|
 | 
						|
  Swift_dispersion_config<||> ~> Exec['swift-dispersion-populate']
 | 
						|
 | 
						|
  file { '/etc/swift/dispersion.conf':
 | 
						|
    ensure => file,
 | 
						|
    owner  => 'swift',
 | 
						|
    group  => 'swift',
 | 
						|
    mode   => '0640',
 | 
						|
  }
 | 
						|
 | 
						|
  swift_dispersion_config {
 | 
						|
    'dispersion/auth_url':            value => $auth_url;
 | 
						|
    'dispersion/auth_user':           value => "${auth_tenant}:${auth_user}";
 | 
						|
    'dispersion/auth_key':            value => $auth_pass;
 | 
						|
    'dispersion/auth_version':        value => $auth_version;
 | 
						|
    'dispersion/endpoint_type':       value => $endpoint_type;
 | 
						|
    'dispersion/swift_dir':           value => $swift_dir;
 | 
						|
    'dispersion/dispersion_coverage': value => $coverage;
 | 
						|
    'dispersion/retries':             value => $retries;
 | 
						|
    'dispersion/concurrency':         value => $concurrency;
 | 
						|
    'dispersion/dump_json':           value => $dump_json;
 | 
						|
  }
 | 
						|
 | 
						|
  exec { 'swift-dispersion-populate':
 | 
						|
    path      => ['/bin', '/usr/bin'],
 | 
						|
    subscribe => File['/etc/swift/dispersion.conf'],
 | 
						|
    timeout   => 0,
 | 
						|
    # lint:ignore:140chars
 | 
						|
    onlyif    => "swift -A ${auth_url} --os-username ${auth_user} --os-project-name ${auth_tenant} --os-password ${auth_pass} -V ${auth_version} stat | grep 'Account: '",
 | 
						|
    unless    => "swift -A ${auth_url} --os-username ${auth_user} --os-project-name ${auth_tenant} --os-password ${auth_pass} -V ${auth_version} list | grep dispersion_",
 | 
						|
    # lint:endignore
 | 
						|
    require   => Package['swiftclient'],
 | 
						|
  }
 | 
						|
 | 
						|
}
 |