summaryrefslogtreecommitdiffstats
path: root/bin/ceph-dns
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2017-10-17 14:11:56 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2017-10-17 14:12:17 +0000
commit92b39ca3217a0d3643e87553cd72bceac1158066 (patch)
tree876bce85a5db2540ba41e9f04cc5e605a1d1f6f4 /bin/ceph-dns
parentReleasing debian version 20170410-1. (diff)
downloadopen-infrastructure-storage-tools-92b39ca3217a0d3643e87553cd72bceac1158066.tar.xz
open-infrastructure-storage-tools-92b39ca3217a0d3643e87553cd72bceac1158066.zip
Merging upstream version 20171017.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'bin/ceph-dns')
-rwxr-xr-xbin/ceph-dns272
1 files changed, 272 insertions, 0 deletions
diff --git a/bin/ceph-dns b/bin/ceph-dns
new file mode 100755
index 0000000..4bf7a8f
--- /dev/null
+++ b/bin/ceph-dns
@@ -0,0 +1,272 @@
+#!/bin/sh
+
+# storage-tools - Additional utilities to manage storage related tasks
+# Copyright (C) 2014-2017 Daniel Baumann <daniel.baumann@open-infrastructure.net>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+PROGRAM="$(basename ${0})"
+
+Parameters ()
+{
+ GETOPT_LONGOPTIONS="number:,release:,zone:,with-reverse,with-round-robin,master:,mds:,mgr:,mon:,osd:,rgw:,"
+ GETOPT_OPTIONS="n:,r:,z:,f:,"
+
+ PARAMETERS="$(getopt --longoptions ${GETOPT_LONGOPTIONS} --name=${PROGRAM} --options ${GETOPT_OPTIONS} --shell sh -- ${@})"
+
+ if [ "${?}" != "0" ]
+ then
+ echo "'${PROGRAM}': getopt exit" >&2
+ exit 1
+ fi
+
+ eval set -- "${PARAMETERS}"
+
+ while true
+ do
+ case "${1}" in
+ -n|--number)
+ NUMBER="${2}"
+ shift 2
+ ;;
+
+ -r|--release)
+ RELEASE="${2}"
+ shift 2
+ ;;
+
+ -z|--zone)
+ ZONE="${2}"
+ shift 2
+ ;;
+
+ --with-reverse)
+ WITH_REVERSE="true"
+ shift 1
+ ;;
+
+ --with-round-robin)
+ WITH_ROUND_ROBIN="true"
+ shift 1
+ ;;
+
+ --master)
+ MASTER="${2}"
+ shift 2
+ ;;
+
+ --mds)
+ MDS="${2}"
+ shift 2
+ ;;
+
+ --mgr)
+ MGR="${2}"
+ shift 2
+ ;;
+
+ --mon)
+ MON="${2}"
+ shift 2
+ ;;
+
+ --osd)
+ OSD="${2}"
+ shift 2
+ ;;
+
+ --rgw)
+ RGW="${2}"
+ shift 2
+ ;;
+
+ --)
+ shift 1
+ break
+ ;;
+
+ *)
+ echo "'${PROGRAM}': getopt error" >&2
+ exit 1
+ ;;
+ esac
+ done
+}
+
+Usage ()
+{
+ echo "Usage: ${PROGRAM} {create|check} [-n|--number NUMBER] [-r|--release RELEASE] [-z|--zone ZONE] [--with-reverse] [--with-round-robin] [--master MASTER_NUMBER] [--mds MDS_NUMBER] [--mgr MGR_NUMBER] [--mon MON_NUMBER] [--osd OSD_NUMBER] [--rgw RGW_NUMBER]" >&2
+ exit 1
+}
+
+case "${1}" in
+ check)
+ ACTION="check"
+ ;;
+
+ create)
+ ACTION="create"
+ ;;
+
+ *)
+ Usage
+ ;;
+esac
+
+shift 1
+
+Parameters "${@}"
+
+NUMBER="${NUMBER:-3}"
+RELEASE="${RELEASE:-luminous}"
+ZONE="${ZONE:-ceph.example.net}"
+
+MASTER="${MASTER:-1}"
+MDS="${MDS:-${NUMBER}}"
+MGR="${MGR:-${NUMBER}}"
+MON="${MON:-${NUMBER}}"
+OSD="${OSD:-${NUMBER}}"
+RGW="${RGW:-${NUMBER}}"
+
+RED="$(tput setaf 1)$(tput bold)"
+GREEN="$(tput setaf 2)$(tput bold)"
+WHITE="$(tput setaf 7)$(tput bold)"
+NORMAL="$(tput sgr0)"
+
+STATUS_GOOD="${GREEN}✔${NORMAL}"
+STATUS_BAD="${RED}✘${NORMAL}"
+STATUS_UGLY="${WHITE}○${NORMAL}"
+
+cat << EOF
+; Ceph DNS: Forward Entries for ${ZONE}
+EOF
+
+# Run forward zone
+for SERVICE in master mds mgr mon osd rgw
+do
+ NUMBERS="$(eval "echo \$$(echo "${SERVICE}" | tr [a-z] [A-Z])")"
+
+ for NUMBER in $(seq 1 ${NUMBERS})
+ do
+ case "${SERVICE}" in
+ master)
+ CONTAINER="master"
+ ;;
+
+ *)
+ CONTAINER="${SERVICE}${NUMBER}"
+ ;;
+ esac
+
+ case "${CHECK}" in
+ true)
+ IP_ADDRESS="$(dig +short ${CONTAINER}.${RELEASE}.${ZONE} | tail -n1)"
+
+ if [ -n "${IP_ADDRESS}" ]
+ then
+ IP_ADDRESS="${IP_ADDRESS} ${STATUS_GOOD}"
+ else
+ IP_ADDRESS="${STATUS_BAD}"
+ fi
+ ;;
+
+ *)
+ IP_ADDRESS="FIXME"
+ ;;
+ esac
+
+cat << EOF
+
+${CONTAINER}.${RELEASE}.${ZONE} IN A ${IP_ADDRESS}
+${CONTAINER}.${ZONE} IN CNAME ${CONTAINER}.${RELEASE}.${ZONE}.
+EOF
+
+ case "${SERVICE}" in
+ master)
+ ;;
+
+ *)
+ if [ "${WITH_ROUND_ROBIN}" = "true" ]
+ then
+
+cat << EOF
+${SERVICE}.${RELEASE}.${ZONE} IN A ${IP_ADDRESS}
+${SERVICE}.${ZONE} IN A ${IP_ADDRESS}
+EOF
+
+ fi
+ ;;
+ esac
+ done
+done
+
+case "${WITH_REVERSE}" in
+ true)
+
+cat << EOF
+
+; Ceph DNS: Reverse Entries for ${ZONE}
+
+EOF
+
+ # Run reverse zone
+ for SERVICE in master mds mgr mon osd rgw
+ do
+ NUMBERS="$(eval "echo \$$(echo "${SERVICE}" | tr [a-z] [A-Z])")"
+
+ for NUMBER in $(seq 1 ${NUMBERS})
+ do
+ case "${SERVICE}" in
+ master)
+ CONTAINER="master"
+ ;;
+
+ *)
+ CONTAINER="${SERVICE}${NUMBER}"
+ ;;
+ esac
+
+ case "${CHECK}" in
+ true)
+ IP_ADDRESS="$(dig +short ${CONTAINER}.${RELEASE}.${ZONE} | tail -n1)"
+
+ if [ -n "${IP_ADDRESS}" ]
+ then
+ HOST="$(dig +short -x ${IP_ADDRESS} | tail -n1)"
+ if [ -n "${HOST}" ]
+ then
+ STATUS="${STATUS_GOOD}"
+ else
+ STATUS="${STATUS_BAD}"
+ fi
+ else
+ STATUS="${STATUS_BAD}"
+ IP_ADDRESS="Nil"
+ fi
+ ;;
+ *)
+ IP_ADDRESS="FIXME"
+ ;;
+ esac
+
+cat << EOF
+${IP_ADDRESS} IN PTR ${CONTAINER}.${RELEASE}.${ZONE}. ${STATUS}
+EOF
+
+ done
+ done
+ ;;
+esac