Files
puppet-swift/spec/acceptance/10_basic_swift_spec.rb
Takashi Kajinami f3276488e8 Rename acceptance spec files to explain order
The acceptance tests for config resources should be executed AFTER
deployment scenario tests, otherwise the deployment scenario tests can
fail because of incomplete file contents left.

This change ensures that ordering by adding the prefix. Currently this
does not cause any change but allows us to avoid undesired swap which
is likely to cause test failure.

Change-Id: Ic1fd985f7f9f0552e0a5073ba01b0e9c8595648a
2022-07-10 13:26:44 +09:00

263 lines
8.6 KiB
Ruby

require 'spec_helper_acceptance'
describe 'basic swift' do
context 'default parameters' do
it 'should work with no errors' do
pp= <<-EOS
include openstack_integration
include openstack_integration::repos
include openstack_integration::apache
include openstack_integration::rabbitmq
include openstack_integration::mysql
include openstack_integration::keystone
exec { 'setenforce 0':
path => '/bin:/sbin:/usr/bin:/usr/sbin',
onlyif => 'which setenforce && getenforce | grep Enforcing',
before => Class['::swift'],
}
package { 'curl': ensure => present }
class { 'memcached':
listen_ip => '127.0.0.1',
}
# Swift resources
class { 'swift':
# not sure how I want to deal with this shared secret
swift_hash_path_suffix => 'secrete',
package_ensure => latest,
}
class { 'swift::keystone::auth':
password => 'a_big_secret',
}
# === Configure Storage
class { 'swift::storage':
storage_local_net_ip => '127.0.0.1',
}
# create xfs partitions on a loopback device and mounts them
swift::storage::loopback { ['2','3','4']:
seek => '200000',
require => Class['swift'],
}
# Create storage policy 0 in swift.conf
swift::storage::policy { '0':
policy_name => 'Policy-0',
policy_aliases => 'basic, single, A',
default_policy => true,
policy_type => 'replication'
}
# Create storage policy 1 in swift.conf
swift::storage::policy { '1':
policy_name => '3-Replica-Policy',
policy_aliases => 'extra, triple, B',
default_policy => false,
deprecated => 'No',
}
# sets up storage nodes which is composed of a single
# device that contains an endpoint for an object, account, and container
swift::storage::node { '2':
mnt_base_dir => '/srv/node',
weight => 1,
zone => '2',
storage_local_net_ip => '127.0.0.1',
policy_index => 0,
require => Swift::Storage::Loopback['2','3','4'] ,
}
# ring_object_devices for a storage policy start with the policy id.
# Create 3 ring_object_device starting with "1:" to be
# added to an object-1 ring for storage policy 1.
ring_object_device { "1:127.0.0.1:6000/2":
zone => 2,
weight => 1,
require => Swift::Storage::Loopback['2'],
}
ring_object_device { "1:127.0.0.1:6000/3":
zone => 2,
weight => 1,
require => Swift::Storage::Loopback['3'] ,
}
ring_object_device { "1:127.0.0.1:6000/4":
zone => 2,
weight => 1,
require => Swift::Storage::Loopback['4'] ,
}
class { 'swift::ringbuilder':
part_power => '18',
replicas => '1',
min_part_hours => 1,
}
swift::ringbuilder::policy_ring { '1':
part_power => '18',
replicas => '3',
min_part_hours => 1,
}
class { 'swift::proxy':
proxy_local_net_ip => '127.0.0.1',
pipeline => ['healthcheck', 'proxy-logging', 'cache', 'authtoken', 'keystone', 'dlo', 'proxy-server'],
account_autocreate => true,
}
class { 'swift::proxy::authtoken':
password => 'a_big_secret',
}
class { 'swift::keystone::dispersion': } -> class { 'swift::dispersion': }
class {'::swift::objectexpirer':
interval => 600,
}
class {
[ '::swift::proxy::healthcheck', '::swift::proxy::proxy_logging', '::swift::proxy::cache',
'::swift::proxy::keystone', '::swift::proxy::dlo' ]:
}
EOS
# Need to be run 2 times because we have an exported when creating the ring.
apply_manifest(pp, :catch_failures => false)
apply_manifest(pp, :catch_failures => true)
# The third run tests idempotency
apply_manifest(pp, :catch_changes => true)
end
describe port(8080) do
it { is_expected.to be_listening.with('tcp') }
end
end
context 'Using swiftinit service provider' do
it 'should work with no errors' do
swiftinit_pp= <<-EOS
include openstack_integration
include openstack_integration::repos
include openstack_integration::apache
include openstack_integration::rabbitmq
include openstack_integration::mysql
include openstack_integration::keystone
exec { 'setenforce 0':
path => '/bin:/sbin:/usr/bin:/usr/sbin',
onlyif => 'which setenforce && getenforce | grep Enforcing',
before => Class['::swift'],
}
package { 'curl': ensure => present }
class { 'memcached':
listen_ip => '127.0.0.1',
}
# Swift resources
class { 'swift':
# not sure how I want to deal with this shared secret
swift_hash_path_suffix => 'secrete',
package_ensure => latest,
}
class { 'swift::keystone::auth':
password => 'a_big_secret',
}
# === Configure Storage
class { 'swift::storage':
storage_local_net_ip => '127.0.0.1',
}
# create xfs partitions on a loopback device and mounts them
swift::storage::loopback { ['2','3','4']:
seek => '200000',
require => Class['swift'],
}
# Create storage policy 0 in swift.conf
swift::storage::policy { '0':
policy_name => 'Policy-0',
policy_aliases => 'basic, single, A',
default_policy => true,
policy_type => 'replication'
}
# Create storage policy 1 in swift.conf
swift::storage::policy { '1':
policy_name => '3-Replica-Policy',
policy_aliases => 'extra, triple, B',
default_policy => false,
deprecated => 'No',
}
# sets up storage nodes which is composed of a single
# device that contains an endpoint for an object, account, and container
swift::storage::node { '2':
mnt_base_dir => '/srv/node',
weight => 1,
zone => '2',
storage_local_net_ip => '127.0.0.1',
policy_index => 0,
require => Swift::Storage::Loopback['2','3','4'] ,
}
# ring_object_devices for a storage policy start with the policy id.
# Create 3 ring_object_device starting with "1:" to be
# added to an object-1 ring for storage policy 1.
ring_object_device { "1:127.0.0.1:6000/2":
zone => 2,
weight => 1,
require => Swift::Storage::Loopback['2'],
}
ring_object_device { "1:127.0.0.1:6000/3":
zone => 2,
weight => 1,
require => Swift::Storage::Loopback['3'] ,
}
ring_object_device { "1:127.0.0.1:6000/4":
zone => 2,
weight => 1,
require => Swift::Storage::Loopback['4'] ,
}
class { 'swift::storage::account':
service_provider => 'swiftinit',
}
class { 'swift::storage::container':
service_provider => 'swiftinit',
}
class { 'swift::storage::object':
service_provider => 'swiftinit',
}
class { 'swift::ringbuilder':
part_power => '18',
replicas => '1',
min_part_hours => 1,
}
swift::ringbuilder::policy_ring { '1':
part_power => '18',
replicas => '3',
min_part_hours => 1,
}
class { 'swift::proxy':
proxy_local_net_ip => '127.0.0.1',
pipeline => ['healthcheck', 'proxy-logging', 'cache', 'authtoken', 'keystone', 'dlo', 'proxy-server'],
account_autocreate => true,
service_provider => 'swiftinit',
}
class { 'swift::proxy::authtoken':
password => 'a_big_secret',
}
class { 'swift::keystone::dispersion': } -> class { 'swift::dispersion': }
class {'::swift::objectexpirer':
interval => 600,
service_provider => 'swiftinit',
}
class {
[ '::swift::proxy::healthcheck', '::swift::proxy::proxy_logging', '::swift::proxy::cache',
'::swift::proxy::keystone', '::swift::proxy::dlo' ]:
}
EOS
# Run one time to catch any errors upgrading to swiftinit service provider
apply_manifest(swiftinit_pp, :catch_failures => true)
# The second run tests idempotency
apply_manifest(swiftinit_pp, :catch_changes => true)
end
describe port(8080) do
it { is_expected.to be_listening.with('tcp') }
end
end
end