Merge pull request #31 from fcharlier/dispersion
Add swift-dispersion configuration
This commit is contained in:
commit
7c1cf9b14f
89
manifests/dispersion.pp
Normal file
89
manifests/dispersion.pp
Normal file
@ -0,0 +1,89 @@
|
||||
# == 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 :
|
||||
# http://swift.openstack.org/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'
|
||||
# [*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
|
||||
#
|
||||
# François Charlier fcharlier@ploup.net
|
||||
#
|
||||
|
||||
class swift::dispersion (
|
||||
$auth_url = 'http://127.0.0.1:5000/v2.0/',
|
||||
$auth_user = 'dispersion',
|
||||
$auth_tenant = 'services',
|
||||
$auth_pass = 'dispersion_password',
|
||||
$auth_version = '2.0',
|
||||
$swift_dir = '/etc/swift',
|
||||
$coverage = 1,
|
||||
$retries = 5,
|
||||
$concurrency = 25,
|
||||
$dump_json = 'no'
|
||||
) {
|
||||
|
||||
include swift::params
|
||||
|
||||
file { '/etc/swift/dispersion.conf':
|
||||
ensure => present,
|
||||
content => template('swift/dispersion.conf.erb'),
|
||||
owner => 'swift',
|
||||
group => 'swift',
|
||||
mode => '0660',
|
||||
require => Package['swift'],
|
||||
}
|
||||
|
||||
exec { 'swift-dispersion-populate':
|
||||
path => ['/bin', '/usr/bin'],
|
||||
subscribe => File['/etc/swift/dispersion.conf'],
|
||||
timeout => 0,
|
||||
onlyif => "swift -A ${auth_url} -U ${auth_tenant}:${auth_user} -K ${auth_pass} -V ${auth_version} stat | grep 'Account: '",
|
||||
unless => "swift -A ${auth_url} -U ${auth_tenant}:${auth_user} -K ${auth_pass} -V ${auth_version} list | grep dispersion_",
|
||||
}
|
||||
|
||||
}
|
40
manifests/keystone/dispersion.pp
Normal file
40
manifests/keystone/dispersion.pp
Normal file
@ -0,0 +1,40 @@
|
||||
# == Class: swift::keystone::dispersion
|
||||
#
|
||||
# This class creates a user in Keystone for the swift-dispersion-report
|
||||
# and swift-dispersion-populate tools.
|
||||
#
|
||||
# The user is given the admin role in the services tenant.
|
||||
#
|
||||
# Use the class swift::dispersion to create the matching config file.
|
||||
#
|
||||
# === Parameters
|
||||
#
|
||||
# [*auth_user*]
|
||||
# String. The name of the user.
|
||||
# Optional. Defaults to 'dispersion'.
|
||||
#
|
||||
# [*auth_pass*]
|
||||
# String. The user's password.
|
||||
# Optional. Defaults to 'dispersion_password'.
|
||||
#
|
||||
# === Authors
|
||||
#
|
||||
# François Charlier fcharlier@ploup.net
|
||||
#
|
||||
|
||||
class swift::keystone::dispersion(
|
||||
$auth_user = 'dispersion',
|
||||
$auth_pass = 'dispersion_password'
|
||||
) {
|
||||
|
||||
keystone_user { $auth_user:
|
||||
ensure => present,
|
||||
password => $auth_pass,
|
||||
}
|
||||
|
||||
keystone_user_role { "${auth_user}@services":
|
||||
ensure => present,
|
||||
roles => 'admin',
|
||||
require => Keystone_user[$auth_user]
|
||||
}
|
||||
}
|
108
spec/classes/swift_dispersion_spec.rb
Normal file
108
spec/classes/swift_dispersion_spec.rb
Normal file
@ -0,0 +1,108 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'swift::dispersion' do
|
||||
|
||||
let :facts do
|
||||
{ :osfamily => 'Debian' }
|
||||
end
|
||||
|
||||
it { should contain_file('/etc/swift/dispersion.conf').with(
|
||||
:ensure => 'present',
|
||||
:owner => 'swift',
|
||||
:group => 'swift',
|
||||
:mode => '0660',
|
||||
:require => 'Package[swift]')
|
||||
}
|
||||
|
||||
describe 'with default parameters' do
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^\[dispersion\]$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^auth_url = http:\/\/127.0.0.1:5000\/v2.0\/$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^auth_version = 2.0$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^auth_user = services:dispersion$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^auth_key = dispersion_password$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^swift_dir = \/etc\/swift$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^dispersion_coverage = 1$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^retries = 5$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^concurrency = 25$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^dump_json = no$/)
|
||||
}
|
||||
it { should contain_exec('swift-dispersion-populate').with(
|
||||
:path => ['/bin', '/usr/bin'],
|
||||
:subscribe => 'File[/etc/swift/dispersion.conf]',
|
||||
:onlyif => "swift -A http://127.0.0.1:5000/v2.0/ -U services:dispersion -K dispersion_password -V 2.0 stat | grep 'Account: '",
|
||||
:unless => "swift -A http://127.0.0.1:5000/v2.0/ -U services:dispersion -K dispersion_password -V 2.0 list | grep dispersion_"
|
||||
)}
|
||||
end
|
||||
|
||||
describe 'when parameters are overriden' do
|
||||
let :params do
|
||||
{
|
||||
:auth_url => 'https://169.254.0.1:7000/auth/v8.0/',
|
||||
:auth_user => 'foo',
|
||||
:auth_tenant => 'bar',
|
||||
:auth_pass => 'dummy',
|
||||
:auth_version => '1.0',
|
||||
:swift_dir => '/usr/local/etc/swift',
|
||||
:coverage => 42,
|
||||
:retries => 51,
|
||||
:concurrency => 4682,
|
||||
:dump_json => 'yes'
|
||||
}
|
||||
end
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^\[dispersion\]$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^auth_url = https:\/\/169.254.0.1:7000\/auth\/v8.0\/$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^auth_version = 1.0$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^auth_user = bar:foo$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^auth_key = dummy$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^swift_dir = \/usr\/local\/etc\/swift$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^dispersion_coverage = 42$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^retries = 51$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^concurrency = 4682$/)
|
||||
}
|
||||
it { should contain_file('/etc/swift/dispersion.conf') \
|
||||
.with_content(/^dump_json = yes$/)
|
||||
}
|
||||
it { should contain_exec('swift-dispersion-populate').with(
|
||||
:path => ['/bin', '/usr/bin'],
|
||||
:subscribe => 'File[/etc/swift/dispersion.conf]',
|
||||
:onlyif => "swift -A https://169.254.0.1:7000/auth/v8.0/ -U bar:foo -K dummy -V 1.0 stat | grep 'Account: '",
|
||||
:unless => "swift -A https://169.254.0.1:7000/auth/v8.0/ -U bar:foo -K dummy -V 1.0 list | grep dispersion_"
|
||||
)}
|
||||
end
|
||||
end
|
48
spec/classes/swift_keystone_dispersion_spec.rb
Normal file
48
spec/classes/swift_keystone_dispersion_spec.rb
Normal file
@ -0,0 +1,48 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'swift::keystone::dispersion' do
|
||||
|
||||
describe 'with default class parameters' do
|
||||
|
||||
it { should contain_keystone_user('dispersion').with(
|
||||
:ensure => 'present',
|
||||
:password => 'dispersion_password'
|
||||
) }
|
||||
|
||||
it { should contain_keystone_user_role('dispersion@services').with(
|
||||
:ensure => 'present',
|
||||
:roles => 'admin',
|
||||
:require => 'Keystone_user[dispersion]'
|
||||
) }
|
||||
end
|
||||
|
||||
describe 'when overriding password' do
|
||||
|
||||
let :params do
|
||||
{
|
||||
:auth_pass => 'foo'
|
||||
}
|
||||
end
|
||||
|
||||
it { should contain_keystone_user('dispersion').with(
|
||||
:ensure => 'present',
|
||||
:password => 'foo'
|
||||
) }
|
||||
|
||||
end
|
||||
|
||||
describe 'when overriding auth user' do
|
||||
|
||||
let :params do
|
||||
{
|
||||
:auth_user => 'bar'
|
||||
}
|
||||
end
|
||||
|
||||
it { should contain_keystone_user('bar') }
|
||||
|
||||
it { should contain_keystone_user_role('bar@services') }
|
||||
|
||||
end
|
||||
|
||||
end
|
11
templates/dispersion.conf.erb
Normal file
11
templates/dispersion.conf.erb
Normal file
@ -0,0 +1,11 @@
|
||||
[dispersion]
|
||||
auth_url = <%= auth_url %>
|
||||
auth_version = <%= auth_version %>
|
||||
auth_user = <%= auth_tenant %>:<%= auth_user %>
|
||||
auth_key = <%= auth_pass %>
|
||||
swift_dir = <%= swift_dir %>
|
||||
dispersion_coverage = <%= coverage %>
|
||||
retries = <%= retries %>
|
||||
concurrency = <%= concurrency %>
|
||||
dump_json = <%= dump_json %>
|
||||
|
Loading…
Reference in New Issue
Block a user