#!/bin/bash # GENERATES Python code that will fill your Orchestra database with the existing zone files # # DEPENDS on bind9utils # sudo apt-get install bind9utils # # EXAMPLE # 1) bash bind9-domains.sh /etc/bind/master > bind9-domains.migrate.py # 2) python manage.py shell < bind9-domains9.migrate.py ZONE_PATH=${1:-/etc/bind/master/} ACCOUNT_ID=${2:-1} echo "from orchestra.apps.domains.models import Domain" echo "from orchestra.apps.accounts.models import Account" echo "account = Account.objects.get(pk=${ACCOUNT_ID})" ERRORS="" while read name; do [[ -f $name ]] && { [[ ! $(echo "$name" | grep '/' > /dev/null ) ]] && name="./${name}" ZONE_PATH=${name%/*} name=${name##*/} } ZONE=$(named-checkzone -D $name ${ZONE_PATH}/$name) if [[ $? != 0 ]]; then ERRORS="${ERRORS} $name" else for DOMAIN in $(echo "$ZONE" | awk {'print $1'} | uniq); do echo "try:" echo " domain = Domain.objects.get(name='${DOMAIN%?}')" echo "except:" echo " domain = Domain.objects.create(name='${DOMAIN%?}', account=account)" echo "" RECORDS=$(echo "$ZONE" | grep '\sIN\s' | grep "^${DOMAIN}\s") echo "$RECORDS" | while read record; do TYPE=$(echo "$record" | awk {'print $4'}) VALUE=$(echo "$record" | sed "s/.*IN\s[A-Z]*\s*//") # WARNING This is example code for exclude default records !! if [[ ! ( $TYPE == 'SOA' ) && ! ( $TYPE == 'MX' && $(echo $VALUE | grep 'pangea.org') ) && ! ( $TYPE == 'A' && $VALUE == '77.246.179.81' ) && ! ( $TYPE == 'CNAME' && $VALUE = 'web.pangea.org.' ) && ! ( $TYPE == 'NS' && $(echo $VALUE | grep 'pangea.org') ) ]]; then echo "domain.records.get_or_create(type='$TYPE', value='$VALUE')" fi done done fi done < <(ls $ZONE_PATH) [[ $ERRORS != "" ]] && echo "Not included due to errors:$ERRORS" >& 2