Пример #1
0
def update_domain(domain, new_ip, rrs):
    cli = client.AcsClient(KEY, SECRET, REGION)

    req = DescribeDomainRecordsRequest()
    req.set_DomainName(domain)
    req.set_accept_format('json')
    resp = cli.do_action(req)

    records = json.loads(resp)['DomainRecords']['Record']

    for rec in records:
        if rec['Type'] != 'A':
            continue

        if rec['RR'] not in rrs:
            continue
        
        if rec['Value'] == new_ip:
            print_('Not need refresh, same as now.', new_ip, rec['RR'])
            continue

        req = UpdateDomainRecordRequest()
        req.set_RecordId(rec['RecordId'])
        req.set_Value(new_ip)
        req.set_RR(rec['RR'])
        req.set_Type(rec['Type'])

        req.set_accept_format('json')
        
        resp = cli.do_action(req)
        result = json.loads(resp)
        if 'Code' in result:
            raise Exception(result['Message'])
Пример #2
0
def fetch_records(domain: str, access_key_dict: dict, domain_dict: dict):
    item = domain_dict[domain]
    ak_ref = item['accesskey']
    ak_item = access_key_dict[ak_ref]
    client = AcsClient(ak_item['id'], ak_item['secret'], ak_item['area'])
    item['client'] = client
    request = DescribeDomainRecordsRequest()
    request.set_accept_format('json')
    request.set_DomainName(domain)
    request.set_PageNumber('1')
    request.set_Type('A')
    request.set_PageSize('500')
    all_records = []
    for host in item['hosts']:
        if item['hosts'][host] is not None:
            request.set_SearchMode('LIKE')
            request.set_KeyWord('.' + host)
        else:
            request.set_SearchMode('EXACT')
            request.set_KeyWord(host)
        try:
            resp = to_dict(client.do_action_with_exception(request))
            domain_records = resp['DomainRecords']
            if resp['TotalCount'] > 0 and domain_records is not None and len(
                    domain_records['Record']) > 0:
                all_records.extend(domain_records['Record'])
        except ServerException as err:
            print("   ERROR: {}".format(err.get_error_msg()))
    return all_records
Пример #3
0
    def describe_domain_records(self, record_type, subdomain):
        logging.info("域名解析记录查询")
        from aliyunsdkalidns.request.v20150109.DescribeDomainRecordsRequest import DescribeDomainRecordsRequest
        request = DescribeDomainRecordsRequest()

        request.set_accept_format('json')
        request.set_Type(record_type)
        request.set_DomainName(subdomain)

        response = self.client.do_action_with_exception(request)
        response = str(response, encoding='utf-8')
        result = json.loads(response)
        logging.debug(result)
        return result
Пример #4
0
def update():
    print("start time:" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
    new_ip = get_ip()
    with open("./config.json", 'r') as load_f:
        load_dict = json.load(load_f)
    accessKeyId = load_dict['AccessKeyId']
    accessKeySecret = load_dict['AccessKeySecret']
    domain = load_dict['domain']
    secondDomain = load_dict['second-level-domain']
    client = AcsClient(accessKeyId, accessKeySecret, 'cn-hangzhou')
    request = DescribeDomainRecordsRequest()
    request.set_accept_format('json')
    request.set_DomainName("haifeng.ink")
    response = client.do_action_with_exception(request)
    records = json.loads(response)['DomainRecords']['Record']

    old_record_id = ''
    old_ip = ''
    for record in records:
        if record['RR'] == secondDomain:
            old_ip = record['Value']
            old_record_id = record['RecordId']
            break

    if old_record_id != '' and old_ip != new_ip:
        request = UpdateDomainRecordRequest()
        request.set_accept_format('json')
        request.set_RecordId(old_record_id)
        request.set_RR(secondDomain)
        request.set_Type('A')
        request.set_Value(new_ip)
        client.do_action_with_exception(request)
        print('更新ip:' + new_ip)
    elif old_record_id == '':
        request = AddDomainRecordRequest()
        request.set_accept_format('json')
        request.set_DomainName(domain)
        request.set_RR(secondDomain)
        request.set_Type('A')
        request.set_Value(new_ip)

        response = client.do_action_with_exception(request)
        # python2:  print(response)
        print(str(response, encoding='utf-8'))
        print('添加新ip:' + new_ip)
    else:
        print('不需要更新')

    print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
Пример #5
0
    # parse response: 
    data = json.loads(response)
    record = data["DomainRecords"]["Record"];

    # recrucive all dns record and find the RecordId of target pre-domain.
    for single_record in record:
        if ( single_record["RR"] == domain_pre ):
            print( "==== get domain=[%s] RR=[%s] RecordId=[%s] Type=[%s] Value=[%s]." % (domain, single_record["RR"], single_record["RecordId"], single_record["Type"], single_record["Value"] ) )
            # second step: call aliyun api to update the target record.
            request = UpdateDomainRecordRequest()
            request.set_accept_format('json')
            request.set_RR( domain_pre )
            request.set_RecordId( single_record["RecordId"] )
            
            if record_type == 1:
                request.set_Type( qiniu_cname[0] )
                request.set_Value( qiniu_cname[1] )
            else:
                request.set_Type( original_host[0] )
                request.set_Value( original_host[1] )
        
            try:
                response = client.do_action_with_exception(request)
            except ServerException as srv_ex:
            # if response.has_key('Code') or response.has_key('Message'):
                print("Error: Code=[%s] Message=[%s], exit." % (srv_ex.error_code, srv_ex.message) )
                sys.exit(1)
            except:
                print( "unexcepted error, exit." )
                sys.exit(1)