Add maxconn parameter to MySQL / HAProxy
authorMike Bayer <mbayer@redhat.com>
Tue, 18 Apr 2017 21:35:19 +0000 (17:35 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 20 Jun 2017 14:48:43 +0000 (10:48 -0400)
Allows configurability of maxconn as applies to
the MySQL section of the HAProxy config, both
for clustercheck and single node.

Also adds a new test for the haproxy class
overall to exercise options.

Change-Id: I023682dd5e85cc78d6dd3e5214a53863acc4f303

manifests/haproxy.pp
releasenotes/notes/add-mysql_maxconn-to-haproxy-84a5ad07d8d14ddd.yaml [new file with mode: 0644]
spec/classes/tripleo_haproxy_spec.rb [new file with mode: 0644]
spec/fixtures/hieradata/default.yaml

index 6da6dcf..436e81a 100644 (file)
 #  (optional) Enable check via clustercheck for mysql
 #  Defaults to false
 #
+# [*mysql_max_conn*]
+#  (optional) Set the maxconn parameter for mysql
+#  Defaults to undef
+#
 # [*mysql_member_options*]
 #  The options to use for the mysql HAProxy balancer members.
 #  If this parameter is undefined, the actual value configured will depend
@@ -602,6 +606,7 @@ class tripleo::haproxy (
   $ironic_inspector            = hiera('ironic_inspector_enabled', false),
   $mysql                       = hiera('mysql_enabled', false),
   $mysql_clustercheck          = false,
+  $mysql_max_conn              = undef,
   $mysql_member_options        = undef,
   $rabbitmq                    = false,
   $etcd                        = hiera('etcd_enabled', false),
@@ -1314,6 +1319,7 @@ class tripleo::haproxy (
       'timeout server' => '90m',
       'stick-table'    => 'type ip size 1000',
       'stick'          => 'on dst',
+      'maxconn'        => $mysql_max_conn
     }
     if $mysql_member_options {
         $mysql_member_options_real = $mysql_member_options
@@ -1324,6 +1330,7 @@ class tripleo::haproxy (
     $mysql_listen_options = {
       'timeout client' => '90m',
       'timeout server' => '90m',
+      'maxconn'        => $mysql_max_conn
     }
     if $mysql_member_options {
         $mysql_member_options_real = $mysql_member_options
diff --git a/releasenotes/notes/add-mysql_maxconn-to-haproxy-84a5ad07d8d14ddd.yaml b/releasenotes/notes/add-mysql_maxconn-to-haproxy-84a5ad07d8d14ddd.yaml
new file mode 100644 (file)
index 0000000..8359456
--- /dev/null
@@ -0,0 +1,5 @@
+---
+features:
+  - |
+    Added new parameter mysql_maxconn to the tripleo::haproxy class,
+    allowing haproxy maxconn to be configured for the MySQL server.
diff --git a/spec/classes/tripleo_haproxy_spec.rb b/spec/classes/tripleo_haproxy_spec.rb
new file mode 100644 (file)
index 0000000..966729a
--- /dev/null
@@ -0,0 +1,115 @@
+# Copyright 2016 Red Hat, Inc.
+# All Rights Reserved.
+#
+# 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::haproxy' do
+
+  shared_examples_for 'tripleo::haproxy' do
+    let :params do {
+      :controller_virtual_ip     => '10.1.0.1',
+      :public_virtual_ip         => '192.168.0.1'
+    }
+    end
+
+    describe "default settings" do
+      it 'should configure haproxy' do
+        is_expected.to contain_haproxy__listen('mysql').with(
+          :options => {
+            'timeout client' => "90m",
+            'timeout server' => "90m",
+            'maxconn'        => :undef
+          }
+        )
+      end
+    end
+
+    describe "set clustercheck" do
+      before :each do
+        params.merge!({
+          :mysql_clustercheck => true,
+        })
+      end
+
+      it 'should configure haproxy with clustercheck' do
+        is_expected.to contain_haproxy__listen('mysql').with(
+          :options => {
+            'timeout client' => "90m",
+            'timeout server' => "90m",
+            'option'         => ["tcpka", "httpchk"],
+            'timeout client' => "90m",
+            'timeout server' => "90m",
+            'stick-table'    => "type ip size 1000",
+            'stick'          => "on dst",
+            'maxconn'        => :undef
+          }
+        )
+      end
+    end
+
+    describe "override maxconn with clustercheck" do
+      before :each do
+        params.merge!({
+          :mysql_clustercheck  => true,
+          :mysql_max_conn      => 6500,
+        })
+      end
+
+      it 'should configure haproxy' do
+        is_expected.to contain_haproxy__listen('mysql').with(
+          :options => {
+            'option'         => ["tcpka", "httpchk"],
+            'timeout client' => "90m",
+            'timeout server' => "90m",
+            'stick-table'    => "type ip size 1000",
+            'stick'          => "on dst",
+            'maxconn'        => 6500
+          }
+        )
+      end
+    end
+
+    describe "override maxconn without clustercheck" do
+      before :each do
+        params.merge!({
+          :mysql_max_conn => 6500,
+        })
+      end
+
+      it 'should configure haproxy' do
+        is_expected.to contain_haproxy__listen('mysql').with(
+          :options => {
+            'timeout client' => "90m",
+            'timeout server' => "90m",
+            'maxconn'        => 6500
+          }
+        )
+      end
+    end
+
+  end
+
+  on_supported_os.each do |os, facts|
+    context "on #{os}" do
+      let(:facts) do
+        facts.merge({ })
+      end
+
+      it_behaves_like 'tripleo::haproxy'
+    end
+  end
+
+end
\ No newline at end of file
index 5d978cc..a0f4efc 100644 (file)
@@ -33,6 +33,9 @@ cinder::keystone::authtoken::password: 'password'
 gnocchi::keystone::authtoken::password: 'password'
 gnocchi::storage::ceph::ceph_username: 'gnocchi'
 gnocchi::storage::ceph::ceph_secret: 'password'
+# haproxy related items
+mysql_enabled: true
+controller_node_ips: '10.1.0.1,10.1.0.2'
 # nova related items
 nova::rabbit_password: 'password'
 nova::keystone::authtoken::password: 'password'