Optimizes domain backend
This commit is contained in:
parent
183b503274
commit
b26982929d
9
TODO.md
9
TODO.md
|
@ -139,9 +139,16 @@ Remember that, as always with QuerySets, any subsequent chained methods which im
|
||||||
|
|
||||||
* move bill contact to bills apps
|
* move bill contact to bills apps
|
||||||
|
|
||||||
* autocreate <account>.orchestra.lan
|
|
||||||
|
|
||||||
* Backend optimization
|
* Backend optimization
|
||||||
* fields = ()
|
* fields = ()
|
||||||
* ignore_fields = ()
|
* ignore_fields = ()
|
||||||
* based on a merge set of save(update_fields)
|
* based on a merge set of save(update_fields)
|
||||||
|
|
||||||
|
|
||||||
|
textwrap.dedent( \\)
|
||||||
|
|
||||||
|
* accounts
|
||||||
|
* short name / long name
|
||||||
|
* contact inlines
|
||||||
|
* autocreate stuff (email/<account>.orchestra.lan)
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import re
|
||||||
import textwrap
|
import textwrap
|
||||||
|
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
@ -29,31 +30,29 @@ class Bind9MasterDomainBackend(ServiceController):
|
||||||
context['zone'] = ';; %(banner)s\n' % context
|
context['zone'] = ';; %(banner)s\n' % context
|
||||||
context['zone'] += domain.render_zone()
|
context['zone'] += domain.render_zone()
|
||||||
self.append(textwrap.dedent("""\
|
self.append(textwrap.dedent("""\
|
||||||
{
|
echo -e '%(zone)s' > %(zone_path)s.tmp
|
||||||
echo -e '%(zone)s' | diff -N -I'^\s*;;' %(zone_path)s -
|
diff -N -I'^\s*;;' %(zone_path)s %(zone_path)s.tmp || UPDATED=1
|
||||||
} || {
|
mv %(zone_path)s.tmp %(zone_path)s""" % context
|
||||||
echo -e '%(zone)s' > %(zone_path)s
|
|
||||||
UPDATED=1
|
|
||||||
}""" % context
|
|
||||||
))
|
))
|
||||||
self.update_conf(context)
|
self.update_conf(context)
|
||||||
|
|
||||||
def update_conf(self, context):
|
def update_conf(self, context):
|
||||||
self.append(textwrap.dedent("""\
|
self.append(textwrap.dedent("""\
|
||||||
cat -s <(sed -e 's/^};/};\\n/' %(conf_path)s) | \\
|
sed '/zone "%(name)s".*/,/^\s*};\s*$/!d' %(conf_path)s | diff -B -I"^\s*//" - <(echo '%(conf)s') || {
|
||||||
awk -v s=pangea.cat 'BEGIN { RS=""; s="zone \\""s"\\"" } $0~s{ print }' | \\
|
sed -i -e '/zone "%(name)s".*/,/^\s*};/d' \\
|
||||||
diff -B -I"^\s*//" - <(echo '%(conf)s') || {
|
-e 'N; /^\\n$/d; P; D' %(conf_path)s
|
||||||
cat -s <(sed -e 's/^};/};\\n/' %(conf_path)s) | \\
|
echo '%(conf)s' >> %(conf_path)s
|
||||||
awk -v s="%(name)s" 'BEGIN { RS=""; s="zone \\""s"\\"" } $0!~s{ print $0"\\n" }' \\
|
|
||||||
> %(conf_path)s.tmp
|
|
||||||
echo -e '%(conf)s' >> %(conf_path)s.tmp
|
|
||||||
mv %(conf_path)s.tmp %(conf_path)s
|
|
||||||
UPDATED=1
|
UPDATED=1
|
||||||
}""" % context
|
}""" % context
|
||||||
))
|
))
|
||||||
for subdomain in context['subdomains']:
|
# Delete ex-top-domains that are now subdomains
|
||||||
context['name'] = subdomain.name
|
self.append(textwrap.dedent("""\
|
||||||
self.delete(subdomain)
|
sed -i -e '/zone ".*\.%(name)s".*/,/^\s*};\s*$/d' \\
|
||||||
|
-e 'N; /^\\n$/d; P; D' %(conf_path)s""" % context
|
||||||
|
))
|
||||||
|
if 'zone_path' in context:
|
||||||
|
context['zone_subdomains_path'] = re.sub(r'^(.*/)', r'\1*.', context['zone_path'])
|
||||||
|
self.append('rm -f %(zone_subdomains_path)s' % context)
|
||||||
|
|
||||||
def delete(self, domain):
|
def delete(self, domain):
|
||||||
context = self.get_context(domain)
|
context = self.get_context(domain)
|
||||||
|
@ -65,9 +64,8 @@ class Bind9MasterDomainBackend(ServiceController):
|
||||||
# These can never be top level domains
|
# These can never be top level domains
|
||||||
return
|
return
|
||||||
self.append(textwrap.dedent("""\
|
self.append(textwrap.dedent("""\
|
||||||
cat -s <(sed -e 's/^};/};\\n/' %(conf_path)s) | \\
|
sed -e '/zone ".*\.%(name)s".*/,/^\s*};\s*$/d' \\
|
||||||
awk -v s="%(name)s" 'BEGIN { RS=""; s="zone \\""s"\\"" } $0!~s{ print $0"\\n" }' \\
|
-e 'N; /^\\n$/d; P; D' %(conf_path)s > %(conf_path)s.tmp""" % context
|
||||||
> %(conf_path)s.tmp""" % context
|
|
||||||
))
|
))
|
||||||
self.append('diff -B -I"^\s*//" %(conf_path)s.tmp %(conf_path)s || UPDATED=1' % context)
|
self.append('diff -B -I"^\s*//" %(conf_path)s.tmp %(conf_path)s || UPDATED=1' % context)
|
||||||
self.append('mv %(conf_path)s.tmp %(conf_path)s' % context)
|
self.append('mv %(conf_path)s.tmp %(conf_path)s' % context)
|
||||||
|
|
|
@ -180,7 +180,7 @@ class DomainTestMixin(object):
|
||||||
self.add(self.ns1_name, self.ns1_records)
|
self.add(self.ns1_name, self.ns1_records)
|
||||||
self.add(self.ns2_name, self.ns2_records)
|
self.add(self.ns2_name, self.ns2_records)
|
||||||
self.add(self.domain_name, self.domain_records)
|
self.add(self.domain_name, self.domain_records)
|
||||||
self.addCleanup(partial(self.delete, self.domain_name))
|
# self.addCleanup(self.delete, self.domain_name)
|
||||||
self.validate_add(self.MASTER_SERVER_ADDR, self.domain_name)
|
self.validate_add(self.MASTER_SERVER_ADDR, self.domain_name)
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
self.validate_add(self.SLAVE_SERVER_ADDR, self.domain_name)
|
self.validate_add(self.SLAVE_SERVER_ADDR, self.domain_name)
|
||||||
|
@ -198,7 +198,7 @@ class DomainTestMixin(object):
|
||||||
self.add(self.ns1_name, self.ns1_records)
|
self.add(self.ns1_name, self.ns1_records)
|
||||||
self.add(self.ns2_name, self.ns2_records)
|
self.add(self.ns2_name, self.ns2_records)
|
||||||
self.add(self.domain_name, self.domain_records)
|
self.add(self.domain_name, self.domain_records)
|
||||||
self.addCleanup(partial(self.delete, self.domain_name))
|
self.addCleanup(self.delete, self.domain_name)
|
||||||
self.update(self.domain_name, self.domain_update_records)
|
self.update(self.domain_name, self.domain_update_records)
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
self.validate_update(self.MASTER_SERVER_ADDR, self.domain_name)
|
self.validate_update(self.MASTER_SERVER_ADDR, self.domain_name)
|
||||||
|
|
|
@ -45,6 +45,7 @@ WEBSITES_OPTIONS = getattr(settings, 'WEBSITES_OPTIONS', {
|
||||||
WEBSITES_BASE_APACHE_CONF = getattr(settings, 'WEBSITES_BASE_APACHE_CONF',
|
WEBSITES_BASE_APACHE_CONF = getattr(settings, 'WEBSITES_BASE_APACHE_CONF',
|
||||||
'/etc/apache2/')
|
'/etc/apache2/')
|
||||||
|
|
||||||
|
|
||||||
WEBSITES_WEBALIZER_PATH = getattr(settings, 'WEBSITES_WEBALIZER_PATH',
|
WEBSITES_WEBALIZER_PATH = getattr(settings, 'WEBSITES_WEBALIZER_PATH',
|
||||||
'/home/httpd/webalizer/')
|
'/home/httpd/webalizer/')
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue