Merge "Modify frontend"
diff --git a/haproxy/files/haproxy-status.sh b/haproxy/files/haproxy-status.sh
new file mode 100644
index 0000000..48fba3a
--- /dev/null
+++ b/haproxy/files/haproxy-status.sh
@@ -0,0 +1,49 @@
+{%- from "haproxy/map.jinja" import proxy with context -%}
+#!/bin/sh
+
+show_stats() {
+ echo 'show stat' | socat 'UNIX-CONNECT:{{ proxy.stats_socket }}' STDIO | awk \
+ '
+ function fillstr(string, num)
+ {
+ len=length(string);
+ if (len>=num)
+ {
+ printf("%s",substr(string,1,num));
+ }
+ else
+ {
+ printf("%s",string);
+ for(i=1; i<=num-len; i++)
+ {
+ printf(" ");
+ }
+ }
+ }
+
+ BEGIN {
+ FS = ",";
+ };
+
+ {
+ if ($1 ~ /^#/) { next };
+ if ($1 == "") { next };
+
+ status=sprintf("Status: %s",$18);
+ if ($37 != "") {
+ status=status sprintf("/%s",$37);
+ }
+ sessions=sprintf("Sessions: %s",$5);
+ rate=sprintf("Rate: %s",$34);
+
+ fillstr($1,25);
+ fillstr($2,15);
+ fillstr(status,20);
+ fillstr(sessions,15);
+ fillstr(rate,10);
+ printf("\n");
+ }
+ '
+}
+
+show_stats
diff --git a/haproxy/meta/grafana.yml b/haproxy/meta/grafana.yml
index 03339cf..63ab766 100644
--- a/haproxy/meta/grafana.yml
+++ b/haproxy/meta/grafana.yml
@@ -8,6 +8,7 @@
format: json
template: haproxy/files/grafana_dashboards/haproxy_influxdb.json
main:
+ datasource: influxdb
row:
ost-middleware:
title: Middleware
diff --git a/haproxy/meta/sphinx.yml b/haproxy/meta/sphinx.yml
index 61d61d1..2416021 100644
--- a/haproxy/meta/sphinx.yml
+++ b/haproxy/meta/sphinx.yml
@@ -7,7 +7,7 @@
name: proxy
param:
version:
- value: "{{ salt['cmd.run']('haproxy -v')|replace("HA-Proxy version ", '') }}"
+ value: "{{ salt['cmd.run']('haproxy -v 2>/dev/null || echo "unknown"')|replace("HA-Proxy version ", '') }}"
endpoint:
{%- for listen_name, listen in proxy.get('listen', {}).iteritems() %}
{%- if listen.binds.0.address not in ["127.0.0.1", "localhost", "::1"] %}
diff --git a/haproxy/proxy.sls b/haproxy/proxy.sls
index 7935c62..55792c6 100644
--- a/haproxy/proxy.sls
+++ b/haproxy/proxy.sls
@@ -27,6 +27,22 @@
- require:
- pkg: haproxy_packages
+haproxy_status_packages:
+ pkg.installed:
+ - pkgs:
+ - socat
+
+haproxy_status_sh:
+ file.managed:
+ - name: /usr/bin/haproxy-status.sh
+ - user: root
+ - group: root
+ - mode: 700
+ - source: salt://haproxy/files/haproxy-status.sh
+ - template: jinja
+ - require:
+ - pkg: haproxy_status_packages
+
{%- if grains.get('virtual_subtype', None) not in ['Docker', 'LXC'] %}
net.ipv4.ip_nonlocal_bind:
diff --git a/metadata.yml b/metadata.yml
index 48c699e..4d35e66 100644
--- a/metadata.yml
+++ b/metadata.yml
@@ -1,3 +1,8 @@
name: "haproxy"
version: "0.2"
source: "https://github.com/salt-formulas/salt-formula-haproxy"
+
+# For haproxy/meta/sensu.yml
+dependencies:
+- name: linux
+ source: "https://github.com/salt-formulas/salt-formula-linux"
diff --git a/tests/pillar/single_contrail.sls b/tests/pillar/single_contrail.sls
index 5c3ca7b..0cfe8f1 100644
--- a/tests/pillar/single_contrail.sls
+++ b/tests/pillar/single_contrail.sls
@@ -49,4 +49,9 @@
- name: ams1posntw03
host: 127.0.0.1
port: 9100
- params: check inter 2000 rise 2 fall 3
\ No newline at end of file
+ params: check inter 2000 rise 2 fall 3
+
+# For haproxy/meta/sensu.yml
+linux:
+ network:
+ fqdn: linux.ci.local
diff --git a/tests/pillar/single_general_service.sls b/tests/pillar/single_general_service.sls
index 57f9a80..9887419 100644
--- a/tests/pillar/single_general_service.sls
+++ b/tests/pillar/single_general_service.sls
@@ -22,4 +22,9 @@
- name: ctl03
host: 127.0.0.1
port: 9292
- params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
\ No newline at end of file
+ params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+
+# For haproxy/meta/sensu.yml
+linux:
+ network:
+ fqdn: linux.ci.local
diff --git a/tests/pillar/single_openstack_service.sls b/tests/pillar/single_openstack_service.sls
index 362c2ce..9e2ec2f 100644
--- a/tests/pillar/single_openstack_service.sls
+++ b/tests/pillar/single_openstack_service.sls
@@ -22,4 +22,9 @@
- name: ctl03
host: 127.0.0.1
port: 8776
- params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
\ No newline at end of file
+ params: check inter 10s fastinter 2s downinter 3s rise 3 fall 3
+
+# For haproxy/meta/sensu.yml
+linux:
+ network:
+ fqdn: linux.ci.local
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
index 3f42101..29fb975 100755
--- a/tests/run_tests.sh
+++ b/tests/run_tests.sh
@@ -6,11 +6,13 @@
CURDIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
METADATA=${CURDIR}/../metadata.yml
FORMULA_NAME=$(cat $METADATA | python -c "import sys,yaml; print yaml.load(sys.stdin)['name']")
+FORMULA_META_DIR=${CURDIR}/../${FORMULA_NAME}/meta
## Overrideable parameters
PILLARDIR=${PILLARDIR:-${CURDIR}/pillar}
BUILDDIR=${BUILDDIR:-${CURDIR}/build}
VENV_DIR=${VENV_DIR:-${BUILDDIR}/virtualenv}
+MOCK_BIN_DIR=${MOCK_BIN_DIR:-${CURDIR}/mock_bin}
DEPSDIR=${BUILDDIR}/deps
SALT_FILE_DIR=${SALT_FILE_DIR:-${BUILDDIR}/file_root}
@@ -18,7 +20,7 @@
SALT_CONFIG_DIR=${SALT_CONFIG_DIR:-${BUILDDIR}/salt}
SALT_CACHE_DIR=${SALT_CACHE_DIR:-${SALT_CONFIG_DIR}/cache}
-SALT_OPTS="${SALT_OPTS} --retcode-passthrough --local -c ${SALT_CONFIG_DIR}"
+SALT_OPTS="${SALT_OPTS} --retcode-passthrough --local -c ${SALT_CONFIG_DIR} --log-file=/dev/null"
if [ "x${SALT_VERSION}" != "x" ]; then
PIP_SALT_VERSION="==${SALT_VERSION}"
@@ -40,10 +42,20 @@
pip install salt${PIP_SALT_VERSION}
}
+setup_mock_bin() {
+ # If some state requires a binary, a lightweight replacement for
+ # such binary can be put into MOCK_BIN_DIR for test purposes
+ if [ -d "${MOCK_BIN_DIR}" ]; then
+ PATH="${MOCK_BIN_DIR}:$PATH"
+ export PATH
+ fi
+}
+
setup_pillar() {
[ ! -d ${SALT_PILLAR_DIR} ] && mkdir -p ${SALT_PILLAR_DIR}
echo "base:" > ${SALT_PILLAR_DIR}/top.sls
for pillar in ${PILLARDIR}/*; do
+ grep ${FORMULA_NAME}: ${pillar} &>/dev/null || continue
state_name=$(basename ${pillar%.sls})
echo -e " ${state_name}:\n - ${state_name}" >> ${SALT_PILLAR_DIR}/top.sls
done
@@ -56,6 +68,7 @@
echo "base:" > ${SALT_FILE_DIR}/top.sls
for pillar in ${PILLARDIR}/*.sls; do
+ grep ${FORMULA_NAME}: ${pillar} &>/dev/null || continue
state_name=$(basename ${pillar%.sls})
echo -e " ${state_name}:\n - ${FORMULA_NAME}" >> ${SALT_FILE_DIR}/top.sls
done
@@ -64,6 +77,7 @@
file_client: local
cachedir: ${SALT_CACHE_DIR}
verify_env: False
+minion_id_caching: False
file_roots:
base:
@@ -118,6 +132,7 @@
[ -d ${BUILDDIR} ] && mkdir -p ${BUILDDIR}
which salt-call || setup_virtualenv
+ setup_mock_bin
setup_pillar
setup_salt
install_dependencies
@@ -125,8 +140,28 @@
run() {
for pillar in ${PILLARDIR}/*.sls; do
+ grep ${FORMULA_NAME}: ${pillar} &>/dev/null || continue
state_name=$(basename ${pillar%.sls})
+ salt_run grains.set 'noservices' False force=True
+
+ echo "Checking state ${FORMULA_NAME}.${state_name} ..."
salt_run --id=${state_name} state.show_sls ${FORMULA_NAME} || (log_err "Execution of ${FORMULA_NAME}.${state_name} failed"; exit 1)
+
+ # Check that all files in 'meta' folder can be rendered using any valid pillar
+ for meta in `find ${FORMULA_META_DIR} -type f`; do
+ meta_name=$(basename ${meta})
+ echo "Checking meta ${meta_name} ..."
+ salt_run --out=quiet --id=${state_name} cp.get_template ${meta} ${SALT_CACHE_DIR}/${meta_name} \
+ || (log_err "Failed to render meta ${meta} using pillar ${FORMULA_NAME}.${state_name}"; exit 1)
+ cat ${SALT_CACHE_DIR}/${meta_name}
+ done
+ done
+}
+
+real_run() {
+ for pillar in ${PILLARDIR}/*.sls; do
+ state_name=$(basename ${pillar%.sls})
+ salt_run --id=${state_name} state.sls ${FORMULA_NAME} || (log_err "Execution of ${FORMULA_NAME}.${state_name} failed"; exit 1)
done
}
@@ -155,6 +190,9 @@
run)
run
;;
+ real-run)
+ real_run
+ ;;
*)
prepare
run