示例#1
0
 def do_delete_record(self, line):
     '''
     delete DNS record
     
     type    record type, currently supported: A
     name    domain name
     data    i.e.: 1.2.3.4
     '''
     # check and set defaults
     retcode, retmsg = self.kvargcheck({
         'name': 'type',
         'required': True
     }, {
         'name': 'name',
         'required': True
     }, {
         'name': 'data',
         'required': True
     })
     if not retcode:  # something bad happened
         self.r(1, retmsg, ERROR)
         return False
     self.r(0, retmsg, INFO)  # everything's ok
     # additional checks
     if self.kvarg['type'] != 'A' and self.kvarg['type'] != 'MX':
         cmd_out = "type not supported"
         self.r(1, retmsg, ERROR)
         return False
     if not is_ipv4(self.kvarg['data']):
         cmd_out = '\'%s\' is not a valid IP v4 address' % self.kvarg['data']
         self.r(1, cmd_out, ERROR)
         return False
     try:
         dns = pyrax.cloud_dns
         (del_rec_data, domain_name) = name.split('.', 1)
         dom = dns.find(name=domain_name)
         try:
             for r in dom.list_records():
                 if (r.name == self.kvarg['name']
                         and r.type == self.kvarg['type']
                         and r.data == self.kvarg['data']):
                     r.delete()
             cmd_out = ("delete '%s' in domain '%s'" %
                        (del_rec_data, domain_name))
             self.r(0, cmd_out, INFO)
         except:
             cmd_out = "cannot delete dns record '%s'" % name
             self.r(1, cmd_out, ERROR)
     except exc.NotFound:
         cmd_out = "domain '%s' not found" % name
         self.r(1, cmd_out, ERROR)
示例#2
0
 def do_delete_record(self, line):
     '''
     delete DNS record
     
     type    record type, currently supported: A
     name    domain name
     data    i.e.: 1.2.3.4
     '''
     dns = pyrax.cloud_dns
     logging.debug("line: %s" % line)
     d_kv = kvstring_to_dict(line)
     logging.debug("kvs: %s" % d_kv)
     # default values
     (_type, name, data) = (None, None, None)
     # parsing parameters
     if 'type' in d_kv.keys():
         _type = d_kv['type']
         if _type != 'A' and _type != 'MX':
             logging.warn("type not supported")
             return False
     else:
         logging.warn("type missing")
         return False
     if 'name' in d_kv.keys():
         name = d_kv['name']
     else:
         logging.warn("name missnameing")
         return False
     if 'data' in d_kv.keys():
         data = d_kv['data']
         if not is_ipv4(data):
             logging.error('\'%s\' is not a valid IP v4 address' % data)
             return False
     else:
         logging.warn("data missing")
         return False
     try:
         (del_rec_data, domain_name) = name.split('.', 1)
         logging.debug("delete '%s' in domain '%s'" %
                       (del_rec_data, domain_name))
         dom = dns.find(name=domain_name)
         try:
             for r in dom.list_records():
                 if r.name == name and r.type == _type and r.data == data:
                     r.delete()
         except:
             logging.error("cannot delete dns record '%s'" % name)
     except exc.NotFound:
         logging.error("domain '%s' not found" % name)
示例#3
0
 def do_delete_record(self, line):
     '''
     delete DNS record
     
     type    record type, currently supported: A
     name    domain name
     data    i.e.: 1.2.3.4
     '''
     # check and set defaults
     retcode, retmsg = self.kvargcheck(
         {'name':'type', 'required':True},
         {'name':'name', 'required':True},
         {'name':'data', 'required':True}
     )
     if not retcode:             # something bad happened
         self.r(1, retmsg, ERROR)
         return False
     self.r(0, retmsg, INFO)     # everything's ok
     # additional checks
     if self.kvarg['type'] != 'A' and self.kvarg['type'] != 'MX':
         cmd_out = "type not supported"
         self.r(1, retmsg, ERROR)
         return False        
     if not is_ipv4(self.kvarg['data']):
         cmd_out = '\'%s\' is not a valid IP v4 address' % self.kvarg['data']
         self.r(1, cmd_out, ERROR)
         return False
     try:
         dns = pyrax.cloud_dns
         (del_rec_data, domain_name) = name.split('.', 1)
         dom = dns.find(name=domain_name)
         try:
             for r in dom.list_records():
                 if (r.name == self.kvarg['name'] and
                     r.type == self.kvarg['type'] and
                     r.data == self.kvarg['data']):
                     r.delete()
             cmd_out = ("delete '%s' in domain '%s'" % (del_rec_data,
                                                        domain_name))
             self.r(0, cmd_out, INFO)
         except:
             cmd_out = "cannot delete dns record '%s'" % name
             self.r(1, cmd_out, ERROR)
     except exc.NotFound:
         cmd_out = "domain '%s' not found" % name
         self.r(1, cmd_out, ERROR)
示例#4
0
    def do_add_record(self, line):
        '''
        add DNS record
        
        type    record type, currently supported: A
        name    domain name
        data    i.e.: 1.2.3.4name
        ttl     TTL (optional, default:900)
        '''
        # check and set defaults
        retcode, retmsg = self.kvargcheck({
            'name': 'type',
            'required': True
        }, {
            'name': 'name',
            'required': True
        }, {
            'name': 'data',
            'required': True
        }, {
            'name': 'ttl',
            'default': 900
        })
        if not retcode:  # something bad happened
            self.r(1, retmsg, ERROR)
            return False
        self.r(0, retmsg, INFO)  # everything's ok
        # additional checks
        if not is_ipv4(self.kvarg['data']):
            cmd_out = '\'%s\' is not a valid IP v4 address' % self.kvarg['data']
            self.r(1, cmd_out, WARN)
            return False

        dns = pyrax.cloud_dns

        rec = {
            "type": self.kvarg['type'],
            "name": self.kvarg['name'],
            "data": self.kvarg['data'],
            "ttl": self.kvarg['ttl']
        }
        # create missing subdomains
        domains = self.libplugin.list_domain_names()
        nearest_domain = self.libplugin.nearest_domain(name, domains)
        if nearest_domain == None:
            cmd_out = 'no matching domain found'
            self.r(1, cmd_out, ERROR)
            return False
        logging.debug('nearest_domain:%s' % nearest_domain)
        missing_subdomains = self.libplugin.missing_subdomains(
            name, nearest_domain)
        logging.info("creating missing domains: ", missing_subdomains)
        nearest_domain_obj = self.libplugin.get_domain_by_name(nearest_domain)
        for subdomain in missing_subdomains:
            self.libplugin.create_domain(
                subdomain,
                nearest_domain_obj.emailAddress,
                nearest_domain_obj.ttl,
                ''  # comment
            )
        try:
            (new_rec_data, domain_name) = name.split('.', 1)
            logging.debug("add '%s' in domain '%s'" %
                          (new_rec_data, domain_name))
            dom = dns.find(name=domain_name)
            try:
                dom.add_record(rec)
                cmd_out = (
                    "adding dns record name:%s, type:%s, data:%s, ttl:%s" %
                    (self.kvarg['name'], self.kvarg['type'],
                     self.kvarg['data'], self.kvarg['ttl']))
                self.r(0, cmd_out, INFO)
            except pyrax.exceptions.DomainRecordAdditionFailed:
                cmd_out = "duplicate dns record '%s'" % name
                self.r(1, cmd_out, ERROR)
        except exc.NotFound:
            cmd_out = "domain '%s' not found" % name
            self.r(1, cmd_out, ERROR)
示例#5
0
    def do_add_record(self, line):
        '''
        add DNS record
        
        type    record type, currently supported: A
        name    domain name
        data    i.e.: 1.2.3.4name
        ttl     TTL (optional, default:900)
        '''
        dns = pyrax.cloud_dns
        logging.debug("line: %s" % line)
        d_kv = kvstring_to_dict(line)
        logging.debug("kvs: %s" % d_kv)
        # default values
        (_type, name, data, ttl) = (None, None, None, 900)
        # parsing parameters
        if 'type' in d_kv.keys():
            _type = d_kv['type']
            if _type != 'A':
                logging.warn("type not supported")
                return False
        else:
            logging.warn("type missing")
            return False
        if 'name' in d_kv.keys():
            name = d_kv['name']
        else:
            logging.warn("name missing")
            return False
        if 'data' in d_kv.keys():
            data = d_kv['data']
            if not is_ipv4(data):
                logging.error('\'%s\' is not a valid IP v4 address' % data)
                return False
        else:
            logging.warn("data missing")
            return False
        if 'ttl' in d_kv.keys():
            ttl = d_kv['ttl']
        else:
            logging.warn("ttl missing")
        rec = { "type": _type,
                "name": name,
                "data": data,
                "ttl": ttl}
        # create missing subdomains
        domains = self.libplugin.list_domain_names()
        nearest_domain = self.libplugin.nearest_domain(name, domains)
        if nearest_domain == None:
            logging.warning('no matching domain found')
            return False
        logging.debug('nearest_domain:%s' % nearest_domain)
        missing_subdomains = self.libplugin.missing_subdomains(name, nearest_domain)
        print "create: ", missing_subdomains
        nearest_domain_obj = self.libplugin.get_domain_by_name(nearest_domain)
        for subdomain in missing_subdomains:
            self.libplugin.create_domain(subdomain,
                                         nearest_domain_obj.emailAddress,
                                         nearest_domain_obj.ttl,
                                         ''     # comment
                                         )
#         return False # DEBUG
        try:
            (new_rec_data, domain_name) = name.split('.', 1)
            logging.debug("add '%s' in domain '%s'" %
                          (new_rec_data, domain_name))
            dom = dns.find(name=domain_name)
            try:
                logging.info("adding dns record name:%s, type:%s, data:%s, ttl:%s" %
                             (name, _type, data, ttl))
                dom.add_record(rec)
            except pyrax.exceptions.DomainRecordAdditionFailed:
                logging.error("duplicate dns record '%s'" % name)
        except exc.NotFound:
            logging.error("domain '%s' not found" % name)
示例#6
0
 def do_add_record(self, line):
     '''
     add DNS record
     
     type    record type, currently supported: A
     name    domain name
     data    i.e.: 1.2.3.4name
     ttl     TTL (optional, default:900)
     '''
     # check and set defaults
     retcode, retmsg = self.kvargcheck(
         {'name':'type', 'required':True},
         {'name':'name', 'required':True},
         {'name':'data', 'required':True},
         {'name':'ttl', 'default':900}
     )
     if not retcode:             # something bad happened
         self.r(1, retmsg, ERROR)
         return False
     self.r(0, retmsg, INFO)     # everything's ok
     # additional checks
     if not is_ipv4(self.kvarg['data']):
         cmd_out = '\'%s\' is not a valid IP v4 address' % self.kvarg['data']
         self.r(1, cmd_out, WARN)
         return False
     
     dns = pyrax.cloud_dns
     
     rec = { "type": self.kvarg['type'],
             "name": self.kvarg['name'],
             "data": self.kvarg['data'],
             "ttl": self.kvarg['ttl']}
     # create missing subdomains
     domains = self.libplugin.list_domain_names()
     nearest_domain = self.libplugin.nearest_domain(name, domains)
     if nearest_domain == None:
         cmd_out = 'no matching domain found'
         self.r(1, cmd_out, ERROR)
         return False
     logging.debug('nearest_domain:%s' % nearest_domain)
     missing_subdomains = self.libplugin.missing_subdomains(name, nearest_domain)
     logging.info("creating missing domains: ", missing_subdomains)
     nearest_domain_obj = self.libplugin.get_domain_by_name(nearest_domain)
     for subdomain in missing_subdomains:
         self.libplugin.create_domain(subdomain,
                                      nearest_domain_obj.emailAddress,
                                      nearest_domain_obj.ttl,
                                      ''     # comment
                                      )
     try:
         (new_rec_data, domain_name) = name.split('.', 1)
         logging.debug("add '%s' in domain '%s'" %
                       (new_rec_data, domain_name))
         dom = dns.find(name=domain_name)
         try:
             dom.add_record(rec)
             cmd_out = ("adding dns record name:%s, type:%s, data:%s, ttl:%s" %
                        (self.kvarg['name'], self.kvarg['type'],
                         self.kvarg['data'], self.kvarg['ttl']))
             self.r(0, cmd_out, INFO)
         except pyrax.exceptions.DomainRecordAdditionFailed:
             cmd_out = "duplicate dns record '%s'" % name
             self.r(1, cmd_out, ERROR)
     except exc.NotFound:
         cmd_out = "domain '%s' not found" % name
         self.r(1, cmd_out, ERROR)