summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSilvio Rhatto <rhatto@riseup.net>2014-03-27 20:50:40 -0300
committerSilvio Rhatto <rhatto@riseup.net>2014-03-27 20:50:40 -0300
commite6ef6691be06c885f1f17fbe295d782d718b0a13 (patch)
treefc6482b159661af68c9461461f7d3adbbd0b5c98
parent7ff1ed0eedd7788f2c31a6b9b923e2a45be08db6 (diff)
downloadhydra-e6ef6691be06c885f1f17fbe295d782d718b0a13.tar.gz
hydra-e6ef6691be06c885f1f17fbe295d782d718b0a13.tar.bz2
Adding whereis action
-rw-r--r--TODO.md1
-rwxr-xr-xshare/hydra/whereis96
2 files changed, 96 insertions, 1 deletions
diff --git a/TODO.md b/TODO.md
index 2e634db..36b3632 100644
--- a/TODO.md
+++ b/TODO.md
@@ -5,7 +5,6 @@ Hydra
-----
- bootless: properly support `$subdevice` in parted or always use first partition (like `/dev/sdb1`).
- - whereis: show where's a website, service or node might be (DNS repo, DNS lookup and node definition).
- newkeys:
- split SSH/OpenPGP check: just generate OpenPGP key if absent.
- add 'all-ssh' and 'all-pgp' options to generate either all SSH or all OpenPGP keys.
diff --git a/share/hydra/whereis b/share/hydra/whereis
new file mode 100755
index 0000000..5539b7c
--- /dev/null
+++ b/share/hydra/whereis
@@ -0,0 +1,96 @@
+#!/bin/bash
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero 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 Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public
+# License along with this program. If not, see
+# <http://www.gnu.org/licenses/>.
+
+# Load.
+source $APP_BASE/lib/hydra/functions || exit 1
+hydra_config_load
+
+# Parameters
+BASENAME="`basename $0`"
+LAYER="$1"
+DOMAIN="`hydra $HYDRA config domain`"
+
+# Checks
+if [ -z "$LAYER" ]; then
+ echo "usage: $BASENAME <subdomain>"
+ exit 1
+elif [ -z "$DOMAIN" ]; then
+ echo "Please set 'domain' at $HYDRA hydra config."
+ exit 1
+fi
+
+# Puppet config
+echo "----------------------------------------------------------------------------------"
+echo "Puppet config at $PUPPET"
+echo "----------------------------------------------------------------------------------"
+echo ""
+
+# Is it a node?
+if [ -e "$PUPPET/manifests/nodes/$LAYER.pp" ]; then
+ echo "Defined as a node at $PUPPET/manifests/nodes/$LAYER.pp"
+
+ if [ -e "$PUPPET/hiera/production/domain/$DOMAIN/node/$LAYER.$DOMAIN.yaml" ]; then
+ echo "Configuration:"
+ echo ""
+ grep "nodo::role:" $PUPPET/hiera/production/domain/$DOMAIN/node/$LAYER.$DOMAIN.yaml
+ grep "nodo::location:" $PUPPET/hiera/production/domain/$DOMAIN/node/$LAYER.$DOMAIN.yaml
+ fi
+fi
+
+# Is it a website?
+if [ -e "$PUPPET/manifests/classes/websites.pp" ] && \
+ grep -e "apache::site" "$PUPPET/manifests/classes/websites.pp" | grep -q "$LAYER" ; then
+ echo "Defined as a website on $PUPPET/manifests/classes/websites.pp:"
+ echo ""
+ sed -n -e "/apache::site { \"$LAYER\":/,/ }/ p" $PUPPET/manifests/classes/websites.pp
+fi
+
+# DNS config
+if [ -e "$HYDRA_FOLDER/dns/$DOMAIN.conf" ]; then
+ echo ""
+ echo "----------------------------------------------------------------------------------"
+ echo "DNS configuration at $HYDRA_FOLDER/dns/$DOMAIN.conf"
+ echo "----------------------------------------------------------------------------------"
+ echo ""
+
+ RESPONSE="`grep -e "^$LAYER " $HYDRA_FOLDER/dns/$DOMAIN.conf`"
+
+ # Turn off pathname expansion so expansion can work properly
+ set -f
+ if [ -z "$REPONSE" ]; then
+ RESPONSE="`grep -e '^* ' $HYDRA_FOLDER/dns/$DOMAIN.conf`"
+ fi
+
+ echo $RESPONSE
+fi
+
+# DNS
+echo ""
+echo "----------------------------------------------------------------------------------"
+echo "DNS response"
+echo "----------------------------------------------------------------------------------"
+echo ""
+dig +noauthority +nocomments +nocmd +nostats +noadditional $LAYER.$DOMAIN
+
+# GeoIP
+if which geoiplookup &> /dev/null; then
+ echo ""
+ echo "----------------------------------------------------------------------------------"
+ echo "GeoIP response"
+ echo "----------------------------------------------------------------------------------"
+ echo ""
+ geoiplookup $LAYER.$DOMAIN
+fi