diff --git a/manifests/profile/base/swift.pp b/manifests/profile/base/swift.pp new file mode 100644 index 000000000..a0ea8aa42 --- /dev/null +++ b/manifests/profile/base/swift.pp @@ -0,0 +1,46 @@ +# Copyright 2020 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +# == Class: tripleo::profile::base::swift +# +# Swift common profile for tripleo +# +# === Parameters +# +# [*step*] +# (Optional) The current step in deployment. See tripleo-heat-templates +# for more details. +# Defaults to hiera('step') +# +# [*memcache_port*] +# (Optional) memcache port +# Defaults to 11211 +# +# [*memcache_servers*] +# (Optional) List of memcache servers +# Defaults to hiera('memcached_node_ips', []) +# +class tripleo::profile::base::swift ( + $step = Integer(hiera('step')), + $memcache_port = 11211, + $memcache_servers = hiera('memcached_node_ips', []), +) { + if $step >= 4 { + $swift_memcache_servers = suffix(any2array(normalize_ip_for_uri($memcache_servers)), ":${memcache_port}") + class { 'swift::objectexpirer': + pipeline => ['catch_errors', 'cache', 'proxy-server'], + memcache_servers => $swift_memcache_servers + } + } +} diff --git a/manifests/profile/base/swift/proxy.pp b/manifests/profile/base/swift/proxy.pp index d32a79222..8de904f96 100644 --- a/manifests/profile/base/swift/proxy.pp +++ b/manifests/profile/base/swift/proxy.pp @@ -142,6 +142,7 @@ class tripleo::profile::base::swift::proxy ( include tripleo::profile::base::apache } } + include tripleo::profile::base::swift if $step >= 4 { $swift_memcache_servers = suffix(any2array(normalize_ip_for_uri($memcache_servers)), ":${memcache_port}") include swift @@ -184,10 +185,5 @@ class tripleo::profile::base::swift::proxy ( include swift::keymaster include swift::proxy::s3api include swift::proxy::s3token - - class { 'swift::objectexpirer': - pipeline => ['catch_errors', 'cache', 'proxy-server'], - memcache_servers => $swift_memcache_servers - } } } diff --git a/manifests/profile/base/swift/releasenotes/notes/swift-object-expirer-memcached-3c1e7037683ee89a.yaml b/manifests/profile/base/swift/releasenotes/notes/swift-object-expirer-memcached-3c1e7037683ee89a.yaml new file mode 100644 index 000000000..50d503734 --- /dev/null +++ b/manifests/profile/base/swift/releasenotes/notes/swift-object-expirer-memcached-3c1e7037683ee89a.yaml @@ -0,0 +1,8 @@ +--- +fixes: + - | + The memcached IP for the Swift object expirer is not properly set in case + of separate storage nodes. Until now, these were only set if the Swift + proxy node was also configured on the same node; however, this is not the + case with separate storage nodes. The service would still run, but was not + able to use any cache and logging errors therefore. diff --git a/manifests/profile/base/swift/storage.pp b/manifests/profile/base/swift/storage.pp index 04b6ba11c..f0376f4e3 100644 --- a/manifests/profile/base/swift/storage.pp +++ b/manifests/profile/base/swift/storage.pp @@ -42,6 +42,7 @@ class tripleo::profile::base::swift::storage ( $use_local_dir = true, $local_dir = '/srv/node/d1', ) { + include tripleo::profile::base::swift if $step >= 4 { if $enable_swift_storage { include swift diff --git a/spec/classes/tripleo_profile_base_swift_proxy_spec.rb b/spec/classes/tripleo_profile_base_swift_proxy_spec.rb index 53efb242d..4f2997f74 100644 --- a/spec/classes/tripleo_profile_base_swift_proxy_spec.rb +++ b/spec/classes/tripleo_profile_base_swift_proxy_spec.rb @@ -17,11 +17,10 @@ require 'spec_helper' describe 'tripleo::profile::base::swift::proxy' do - let :params do - { } - end - shared_examples_for 'tripleo::profile::base::swift::proxy' do + before :each do + facts.merge!({ :step => params[:step] }) + end let :pre_condition do "class { 'swift': @@ -36,12 +35,10 @@ describe 'tripleo::profile::base::swift::proxy' do end context 'with ipv4 memcache servers' do - before :each do - params.merge!( - :step => 4, - :memcache_servers => ['192.168.0.1', '192.168.0.2'], - ) - end + let(:params) { { + :step => 4, + :memcache_servers => ['192.168.0.1', '192.168.0.2'], + } } it 'configure swift proxy cache with ipv4 ips' do is_expected.to contain_class('swift::proxy::cache').with({ @@ -51,12 +48,10 @@ describe 'tripleo::profile::base::swift::proxy' do end context 'with ipv6 memcache servers' do - before :each do - params.merge!( + let(:params) { { :step => 4, :memcache_servers => ['::1', '::2'], - ) - end + } } it 'configure swift proxy cache with ipv6 ips' do is_expected.to contain_class('swift::proxy::cache').with({ @@ -66,12 +61,10 @@ describe 'tripleo::profile::base::swift::proxy' do end context 'with ipv4, ipv6 and fqdn memcache servers' do - before :each do - params.merge!( + let(:params) { { :step => 4, :memcache_servers => ['192.168.0.1', '::2', 'myserver.com'], - ) - end + } } it 'configure swift proxy cache with ips and fqdn' do is_expected.to contain_class('swift::proxy::cache').with({