aboutsummaryrefslogtreecommitdiff
path: root/kolla/docker/letsencrypt/letsencrypt-lego/sync-and-update-certificate.sh
diff options
context:
space:
mode:
Diffstat (limited to 'kolla/docker/letsencrypt/letsencrypt-lego/sync-and-update-certificate.sh')
-rw-r--r--kolla/docker/letsencrypt/letsencrypt-lego/sync-and-update-certificate.sh93
1 files changed, 93 insertions, 0 deletions
diff --git a/kolla/docker/letsencrypt/letsencrypt-lego/sync-and-update-certificate.sh b/kolla/docker/letsencrypt/letsencrypt-lego/sync-and-update-certificate.sh
new file mode 100644
index 000000000..e1e421c46
--- /dev/null
+++ b/kolla/docker/letsencrypt/letsencrypt-lego/sync-and-update-certificate.sh
@@ -0,0 +1,93 @@
+#!/bin/bash
+
+function log_info {
+ local message="${1}"
+
+ echo "$(date '+%Y/%m/%d %H:%M:%S') [INFO] ${message}"
+}
+
+function log_error {
+ local message="${1}"
+
+ echo "$(date '+%Y/%m/%d %H:%M:%S') [ERROR] ${message}"
+}
+
+
+# Parser
+
+INTERNAL_SET="false"
+EXTERNAL_SET="false"
+LOG_FILE="/var/log/kolla/letsencrypt/lesencrypt-lego.log"
+
+
+VALID_ARGS=$(getopt -o ief:l: --long internal,external,fqdn:,haproxies-ssh: -- "$@")
+if [[ $? -ne 0 ]]; then
+ exit 1;
+fi
+
+eval set -- "$VALID_ARGS"
+while [ : ]; do
+ case "$1" in
+ -i | --internal)
+ CERT_TYPE="internal"
+ INTERNAL_SET="true"
+ shift
+ ;;
+ -e | --external)
+ CERT_TYPE="external"
+ EXTERNAL_SET="true"
+ shift
+ ;;
+ -f | --fqdn)
+ FQDN="${2}"
+ shift 2
+ ;;
+ -l | --haproxies-ssh)
+ HAPROXIES_SSH_HOSTS_PORT="${2}"
+ shift 2
+ ;;
+ --) shift;
+ break
+ ;;
+ esac
+done
+
+if [ "${INTERNAL_SET}" = "true" ] || [ "${EXTERNAL_SET}" = "true" ]; then
+ if [ "${INTERNAL_SET}" = "${EXTERNAL_SET}" ]; then
+ log_error "[${FQDN} - hook] Only --internal or --external parameter is allowed at a time"
+ exit 1
+ fi
+
+ HAPROXIES_SSH_HOSTS_PORT=$(echo ${HAPROXIES_SSH_HOSTS_PORT} | sed -e 's/,/ /g')
+
+ for i in ${HAPROXIES_SSH_HOSTS_PORT}; do
+
+ server=$(echo $i | awk -F ':' '{print $1}')
+ port=$(echo $i | awk -F ':' '{print $2}')
+
+ if ! /usr/sbin/ip a | grep -q "${server}"; then
+
+ log_info "[${FQDN} - hook] Rsync lego data /etc/letsencrypt/lego/ to server ${server} and port ${port}"
+ rsync -a -e "ssh -p ${port} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o IdentityFile=/var/lib/letsencrypt/.ssh/id_rsa" /etc/letsencrypt/lego/ haproxy@${server}:/etc/letsencrypt/lego/ --delete >/dev/null 2>&1
+ if [ "$?" -eq 0 ]; then
+ log_info "[${FQDN} - hook] Rsync Successful."
+ fi
+
+ else
+ log_info "[${FQDN} - hook] Rsync lego data /etc/letsencrypt/lego/ to server ${server} and port ${port} not needed."
+ fi
+
+ if [ "${INTERNAL_SET}" = "true" ]; then
+ internal_cert_path=$(find /etc/letsencrypt/lego/internal/ -name '*.pem')
+ sed -i '/^$/d' ${internal_cert_path}
+ rsync -av -e "ssh -p ${port} -o StrictHostKeyChecking=no -o IdentityFile=/var/lib/letsencrypt/.ssh/id_rsa" ${internal_cert_path} haproxy@${server}:/var/lib/haproxy/haproxy-internal.pem --delete >/dev/null 2>&1
+ ssh -p ${port} -i /var/lib/letsencrypt/.ssh/id_rsa -o StrictHostKeyChecking=no haproxy@${server} "/usr/bin/update-loadbalancer-cert --internal"
+ else
+ external_cert_path=$(find /etc/letsencrypt/lego/external/ -name '*.pem')
+ sed -i '/^$/d' ${external_cert_path}
+ rsync -av -e "ssh -p ${port} -o StrictHostKeyChecking=no -o IdentityFile=/var/lib/letsencrypt/.ssh/id_rsa" ${external_cert_path} haproxy@${server}:/var/lib/haproxy/haproxy.pem --delete >/dev/null 2>&1
+ ssh -p ${port} -i /var/lib/letsencrypt/.ssh/id_rsa -o StrictHostKeyChecking=no haproxy@${server} "/usr/bin/update-loadbalancer-cert --external"
+ fi
+
+ done
+fi