From e7cb55d97b41c35800e08257a826164ca5a1c7de Mon Sep 17 00:00:00 2001 From: Christian Schwede Date: Thu, 30 Jul 2020 18:33:02 +0200 Subject: [PATCH] Use correct memcached IPs for Swift object-expirer The memcached IP 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. Closes-Bug: 1889663 Change-Id: I70ac9fcd3f74975c96c715ecbc818e6606ff4517 --- manifests/profile/base/swift.pp | 46 +++++++++++++++++++ manifests/profile/base/swift/proxy.pp | 6 +-- ...ct-expirer-memcached-3c1e7037683ee89a.yaml | 8 ++++ manifests/profile/base/swift/storage.pp | 1 + .../tripleo_profile_base_swift_proxy_spec.rb | 29 +++++------- 5 files changed, 67 insertions(+), 23 deletions(-) create mode 100644 manifests/profile/base/swift.pp create mode 100644 manifests/profile/base/swift/releasenotes/notes/swift-object-expirer-memcached-3c1e7037683ee89a.yaml 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({