Example #1
0
class AppBackend(App):

    class Meta:
        proxy = True

    def __init__(self, *args, **kwargs):
        super(AppBackend, self).__init__(*args, **kwargs)
        self.script = Script(self.core_server)
        self.proxy = ProxyObject(self)

    def get_user(self):
        return "app_%.5d" % self.id

    def get_group(self):
        return "app_%.5d" % self.id

    def get_home(self):
        home = os.path.join(settings.APPS_HOME, self.get_user())
        if home != settings.APPS_HOME:
            return home
        raise AppException("Wrong home directory")

    def get_parmameters(self):
        parms = {}
        if self.parameters:
            parms.update(self.parameters)
        parms.update(
            {
                "user": self.get_user(),
                "group": self.get_group(),
                "home": self.get_home(),
                "main_domain": self.main_domain,
                "misc_domains": " ".join(self.misc_domains_list),
                "domains": " ".join(self.domains_list)
            }
        )
        return parms

    def install(self):
        parms = self.get_parmameters()
        self.script.add_cmd("/usr/sbin/groupadd %(group)s" % parms)
        self.script.add_cmd("/usr/sbin/useradd -m -d %(home)s -g %(group)s %(user)s -s /bin/bash" % parms)
        self.script.add_cmd("/usr/sbin/usermod -G %(group)s -a www-data" % parms)
        self.script.add_cmd("mkdir -p %(home)s/logs" % parms, user=self.get_user())
        self.script.add_cmd("mkdir -p %(home)s/app" % parms, user=self.get_user())
        self.script.add_cmd("mkdir -p %(home)s/.ssh" % parms, user=self.get_user())
        self.script.add_cmd("chmod 770 %(home)s/logs" % parms)
        self.script.add_cmd("chmod 750 %(home)s" % parms)
        self.installed = True
        self.save()
        self.proxy.setup()

    def commit(self, no_thread=False):
        self.script.commit(no_thread)

    def disable(self):
        parms = self.get_parmameters()
        self.script.add_cmd("chmod 000 %(home)s" % parms, user=self.get_user())
        self.proxy.setdown()

    def enable(self):
        parms = self.get_parmameters()
        self.script.add_cmd("chmod 750 %(home)s" % parms, user=self.get_user())
        self.proxy.setup()

    def uninstall(self):
        parms = self.get_parmameters()
        self.script.add_cmd("/usr/sbin/userdel %(user)s" % parms)
        self.script.add_cmd("/usr/sbin/groupdel %(group)s" % parms)
        self.script.add_cmd("rm -rf %(home)s" % parms)
        self.script.add_cmd("rm /etc/security/limits.d/%(user)s.conf" % parms)
        self.proxy.setdown()

    def update(self):
        parms = self.get_parmameters()
        limits = "%(user)s         hard    nproc           64\n"
        limits += "%(user)s         hard    as          393216\n"
        self.script.add_file("/etc/security/limits.d/%(user)s.conf" % parms, limits)
        self.proxy.setup()

    def get_logs(self):
        parms = self.get_parmameters()
        logfiles = []
        for logfile in self.script.run("ls \"%(home)s/logs/\"" % parms)["stdout"].split():
            if re.match(".*\.log$", logfile):
                path = os.path.join("%(home)s/logs/" % parms, logfile.strip())
                logfiles.append((path, self.script.run("tail -n 60 %s" % path)["stdout"]))
        return logfiles

    def get_directories(self):
        parms = self.get_parmameters()
        return [x.strip()[len(parms.get("home"))+1:] for x in self.script.run("find -L %s -maxdepth %d -type d" % (parms.get("home"), 3))["stdout"].split("\n")]

    def get_uid(self):
        return int(self.script.run("id -u %s" % self.get_user())["stdout"].strip())

    def get_gid(self):
        return int(self.script.run("id -g %s" % self.get_user())["stdout"].strip())

    def passwd(self, password):
        self.script.add_cmd("/usr/sbin/chpasswd", stdin="%s:%s" % (self.get_user(), password))
Example #2
0
class DomainObject(object):
    class Meta:
        proxy = True

    def __init__(self, *args, **kwargs):
        super(DomainObject, self).__init__(*args, **kwargs)
        self.script_master = Script(get_primary_ns_server())
        self.scripts_slaves = []
        for ns in get_secondary_ns_servers():
            self.scripts_slaves.append(Script(ns))

    def commit(self):
        self.script_master.commit()
        for slave in self.scripts_slaves:
            slave.commit()

    def reload(self):
        self.script_master.add_cmd("/etc/init.d/bind9 reload")
        for slave in self.scripts_slaves:
            slave.add_cmd("/etc/init.d/bind9 reload")

    def update(self, domain=None):
        if domain:
            self.script_master.add_file("%s/%s.zone" % (config.bind_master_zones_dir, domain.name), self.gen_zone(domain))
        self.script_master.add_file(config.bind_master_config_file, self.gen_master_config())
        for slave in self.scripts_slaves:
            slave.add_file(config.bind_slave_config_file, self.gen_slave_config())

    def uninstall(self, domain):
        self.script_master.add_cmd("rm %s/%s.zone" % (config.bind_master_zones_dir, domain.name))
        for slave in self.scripts_slaves:
            slave.add_cmd("rm %s/%s.zone" % (config.bind_slave_zones_dir, domain.name))

    def gen_zone(self, domain):
        domain.new_serial()
        records = []
        for ns in [get_primary_ns_server().domain] + [x.domain for x in get_secondary_ns_servers()]:
            records.append({"name": "@", "TTL": domain.ttl if domain.ttl else 86400, "type": "NS", "prio": "", "value": "%s." % ns})
        for record in domain.record_set.order_by("order_num"):
            records.append({
                "name": record.name,
                "TTL": record.ttl if record.ttl else 86400,
                "type": record.record_type,
                "prio": record.prio if record.prio else "",
                "value": record.value,
            })
        return render_to_string("dns/zone.txt", {
            "records": records,
            "TTL": domain.ttl if domain.ttl else 86400,
            "ns1": get_primary_ns_server().domain,
            "rname": domain.rname.replace("@", "."),
            "serial": domain.serial,
            "refresh": config.dns_refresh,
            "retry": config.dns_retry,
            "expire": config.dns_expire,
            "minimum": config.dns_minimum,
        })

    def gen_master_config(self):
        domains = []
        for domain in Domain.objects.all():
            domains.append(render_to_string("dns/master_config.txt", {
                "domain": domain.name,
                "slaves_ips": ";".join([x.ip for x in get_secondary_ns_servers()]),
            }))
        return "\n".join(domains)

    def gen_slave_config(self):
        domains = []
        for domain in Domain.objects.all():
            domains.append(render_to_string("dns/slave_config.txt", {
                "domain": domain.name,
                "msters_ips": get_primary_ns_server().ip,
            }))
        return "\n".join(domains)
Example #3
0
class DomainObject(object):
    class Meta:
        proxy = True

    def __init__(self, *args, **kwargs):
        super(DomainObject, self).__init__(*args, **kwargs)
        self.script_master = Script(get_primary_ns_server())
        self.scripts_slaves = []
        for ns in get_secondary_ns_servers():
            self.scripts_slaves.append(Script(ns))

    def commit(self):
        self.script_master.commit()
        for slave in self.scripts_slaves:
            slave.commit()

    def reload(self):
        self.script_master.add_cmd("/etc/init.d/bind9 reload")
        for slave in self.scripts_slaves:
            slave.add_cmd("/etc/init.d/bind9 reload")

    def update(self, domain=None):
        if domain:
            self.script_master.add_file(
                "%s/%s.zone" % (config.bind_master_zones_dir, domain.name),
                self.gen_zone(domain))
        self.script_master.add_file(config.bind_master_config_file,
                                    self.gen_master_config())
        for slave in self.scripts_slaves:
            slave.add_file(config.bind_slave_config_file,
                           self.gen_slave_config())

    def uninstall(self, domain):
        self.script_master.add_cmd("rm %s/%s.zone" %
                                   (config.bind_master_zones_dir, domain.name))
        for slave in self.scripts_slaves:
            slave.add_cmd("rm %s/%s.zone" %
                          (config.bind_slave_zones_dir, domain.name))

    def gen_zone(self, domain):
        domain.new_serial()
        records = []
        for ns in [get_primary_ns_server().domain
                   ] + [x.domain for x in get_secondary_ns_servers()]:
            records.append({
                "name": "@",
                "TTL": domain.ttl if domain.ttl else 86400,
                "type": "NS",
                "prio": "",
                "value": "%s." % ns
            })
        for record in domain.record_set.order_by("order_num"):
            records.append({
                "name": record.name,
                "TTL": record.ttl if record.ttl else 86400,
                "type": record.record_type,
                "prio": record.prio if record.prio else "",
                "value": record.value,
            })
        return render_to_string(
            "dns/zone.txt", {
                "records": records,
                "TTL": domain.ttl if domain.ttl else 86400,
                "ns1": get_primary_ns_server().domain,
                "rname": domain.rname.replace("@", "."),
                "serial": domain.serial,
                "refresh": config.dns_refresh,
                "retry": config.dns_retry,
                "expire": config.dns_expire,
                "minimum": config.dns_minimum,
            })

    def gen_master_config(self):
        domains = []
        for domain in Domain.objects.all():
            domains.append(
                render_to_string(
                    "dns/master_config.txt", {
                        "domain":
                        domain.name,
                        "slaves_ips":
                        ";".join([x.ip for x in get_secondary_ns_servers()]),
                    }))
        return "\n".join(domains)

    def gen_slave_config(self):
        domains = []
        for domain in Domain.objects.all():
            domains.append(
                render_to_string(
                    "dns/slave_config.txt", {
                        "domain": domain.name,
                        "msters_ips": get_primary_ns_server().ip,
                    }))
        return "\n".join(domains)