ansible-infra/resources/chaosknoten/auth-dns/zones/Makefile

93 lines
2.5 KiB
Makefile

CHANGED = $(shell git diff --name-only --relative -- '*.zone' )
export GIT_AUTHOR_NAME = "Bind Makefile"
#export GIT_AUTHOR_EMAIL = "$(shell whoami)@$(shell hostname -f)"
#export GIT_COMMITTER_NAME = $(GIT_AUTHOR_NAME)
#export GIT_COMMITTER_EMAIL = $(GIT_AUTHOR_EMAIL)
all: rollover
install: rollover
rollover: autoserial diff check reload eof
diff:
@echo "Diff Zones... "
@git diff -U0 -- $(CHANGED) \
| grep -a -v -E '^(diff |index |---|@@)' \
| sed -e 's/^[+]* .\/\([^ ]*\).*/=> \1/'
autoserial:
@for file in $(CHANGED); do \
perl -p -i -e 'if ($$p =~ /[\t\s]+IN[\t\s]+SOA[\t\s]+/) { $$stamp = sprintf("%4.4d%02.2d%02.2d", (localtime)[5]+1900, (localtime)[4]+1, (localtime)[3]); $$count = (/$$stamp([0-9]{2})/)? $$1 + 1: 1; s/[0-9]+/sprintf("%s%02.2d", $$stamp, $$count)/e; } $$p = $$_;' $$file; \
done
check:
@echo "Checking Configs... "
@if ! named-checkconf /etc/bind/named.conf; then \
echo "FIX THE ERROR AND TRY AGAIN"; \
exit 1 ; \
fi
@echo "Checking Zones... "
@named-checkconf -j -p /etc/bind/named.conf \
| perl -e 'my $$zone = ""; while (<>) { if (/^\s+zone\s+\"(.*)\"/) { $$zone = $$1; } elsif (($$zone ne "") && /^\s+file\s+\"(.*?)\"/) { print "$$zone $$1\n"; $$zone = ""; } }' \
| sort \
| uniq \
| while read zone file; do \
echo "FOO: zone: $$zone file: $$file"; \
if [ -z "$$file" -o "$$zone" = "key" ] ; then \
continue ; \
fi ; \
if echo -n "$$zone" | grep -q -E '(sc-eur.com|db.root|named.dump|named.stats)'; then \
continue; \
fi; \
if ! named-checkzone -q -i "full" $$zone $$file; then \
named-checkzone -i "full" $$zone $$file; \
echo "FIX THE ERROR AND TRY AGAIN"; \
exit 1 ; \
fi; \
done
#@echo "Checking CNAMEs and PTRs... "
#@grep -l -E '.*(PTR|CNAME).*[^.]*[.][^.]*[^.]$$' *.* \
#| grep -v '\.sh$$' \
#| while read file; do \
# echo "$$file: DO NOT FORGET THE LAST DOT"; \
# grep -E '.*(PTR|CNAME).*[^.]*[.][^.]*[^.]$$' $$file; \
# exit 1 ; \
#done
reload:
@while [ "$$answer" = "" ]; do \
echo -n "Do you want to reload all zones ? [yes] "; \
read answer; \
case $$answer in \
[Yy]|[Yy][Ee][Ss]) \
answer="yes"; \
break; \
;; \
[Nn]|[Nn][Oo]) \
answer="no"; \
break; \
;; \
"") \
answer="yes"; \
break; \
;; \
*) \
answer=""; \
;; \
esac; \
done; \
if [ "$$answer" = "yes" ]; then \
etckeeper commit "Changed DNS Zones: $(CHANGED)" ; \
rndc reload; \
else \
echo "Server reload aborted"; \
exit 1 ; \
fi
eof:
@echo "DONE -- That's all folks!"