swift: normalize memcache servers IP addresses
authorEmilien Macchi <emilien@redhat.com>
Mon, 19 Sep 2016 19:43:46 +0000 (15:43 -0400)
committerEmilien Macchi <emilien@redhat.com>
Tue, 20 Sep 2016 15:21:47 +0000 (15:21 +0000)
In the case of memcache servers are IPv6, make sure brackets set in the
way we construct the list of memcache server + memcache port parameter.

Also add unit-tests to test that the output is what we want in the
configuration.

Depends-On: I8d361ce9cfcfe6a3f8592b2b7991971a3c748c75
Closes-Bug: 1625335
Change-Id: I9fb8168d8fb56c9d8465d58a45fd8c6edfee6fdd

.fixtures.yml
manifests/profile/base/swift/proxy.pp
spec/classes/tripleo_profile_base_swift_proxy_spec.rb [new file with mode: 0644]

index 9e8eb3b..fae4a8c 100644 (file)
@@ -4,6 +4,9 @@ fixtures:
     'stdlib': 'git://github.com/puppetlabs/puppetlabs-stdlib.git'
     'haproxy': 'git://github.com/puppetlabs/puppetlabs-haproxy.git'
     'concat': 'git://github.com/puppetlabs/puppetlabs-concat.git'
+    'openstacklib': 'git://github.com/openstack/puppet-openstacklib.git'
+    'swift': 'git://github.com/openstack/puppet-swift.git'
+    'memcached': 'git://github.com/saz/puppet-memcached.git'
     'midonet':
       repo: 'git://github.com/midonet/puppet-midonet.git'
       ref: 'v2015.06.7'
index a95d05f..9d50462 100644 (file)
@@ -37,7 +37,7 @@ class tripleo::profile::base::swift::proxy (
   $memcache_port = 11211,
 ) {
   if $step >= 4 {
-    $swift_memcache_servers = suffix($memcache_servers, ":${memcache_port}")
+    $swift_memcache_servers = suffix(any2array(normalize_ip_for_uri($memcache_servers)), ":${memcache_port}")
     include ::swift::proxy
     include ::swift::proxy::proxy_logging
     include ::swift::proxy::healthcheck
diff --git a/spec/classes/tripleo_profile_base_swift_proxy_spec.rb b/spec/classes/tripleo_profile_base_swift_proxy_spec.rb
new file mode 100644 (file)
index 0000000..da80950
--- /dev/null
@@ -0,0 +1,89 @@
+#
+# Copyright (C) 2016 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.
+
+require 'spec_helper'
+
+describe 'tripleo::profile::base::swift::proxy' do
+
+  let :params do
+    { }
+  end
+
+  shared_examples_for 'tripleo swift proxy base profile' do
+
+    let :pre_condition do
+      "class { '::swift':
+         swift_hash_path_prefix => 'foo',
+       }
+       include ::memcached
+       class { '::swift::proxy':
+         proxy_local_net_ip => '127.0.0.1',
+       }"
+    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
+
+      it 'configure swift proxy cache with ipv4 ips' do
+        is_expected.to contain_class('swift::proxy::cache').with({
+          :memcache_servers => ['192.168.0.1:11211', '192.168.0.2:11211']
+        })
+      end
+    end
+
+    context 'with ipv6 memcache servers' do
+      before :each do
+        params.merge!(
+          :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({
+          :memcache_servers => ['[::1]:11211', '[::2]:11211']
+        })
+      end
+    end
+
+  end
+
+  context 'on Debian platforms' do
+    let :facts do
+      { :osfamily       => 'Debian',
+        :processorcount => 1 }
+    end
+
+    it_configures 'tripleo swift proxy base profile'
+  end
+
+  context 'on RedHat platforms' do
+    let :facts do
+      {
+        :osfamily               => 'RedHat',
+        :operatingsystemrelease => '7.1',
+        :processorcount         => 1,
+      }
+    end
+
+    it_configures 'tripleo swift proxy base profile'
+  end
+
+end