My favorites | Sign in
Project Logo
                
Search
for
Updated Dec 11, 2007 by dfang84
Labels: Featured
APIDefine  
这里介绍了与BIND进行交互的API

接口定义

文件:xbaydns/dnsapi/namedconf.py

类:class NamedConf

addAcl

addAcl (acl,aclmatch) 增加一个acl

参数说明:

例子:

在名为internal的acl中增加一个叫127.0.0.1的match地址

delAcl

delAcl(acl) 删除一个acl

参数说明:

例子:

删除名为internal的acl

addView

增加view

参数说明:

例子: 添加名为internal的view,acl为'127.0.0.1','10.10.10.10/24',

*addView('internal','127.0.0.1','10.10.10.10/24',)

updateView

updateView(view,match-client) 更新view

参数说明:

例子:

delView

delView(view) 删除view

参数说明:

update record

update record(view,domain,record)

更新DNS记录。对于记录的操作我们尽量使用dns的接口进行,因为使用接口可以保证数据的一致性,同时也会减少服务器对于错误数据的实时判断,最重要的它还支持了全网服务器的IXFR的区数据同步。整体的操作如下图所示:

参数说明:

工作流程:

  1. 按照view的名称找到TSIG的key
  2. 使用找到的key向localhost的dns服务器发出一个更新记录的请求

add record

add record(view,domain,record)

增加DNS记录

参数说明:

工作流程:

  1. 按照view的名称找到TSIG的key
  2. 使用找到的key向localhost的dns服务器发出一个更新记录的请求

del record

del record(view,domain,record) 删除DNS记录

参数说明:

工作流程:

  1. 按照view的名称找到TSIG的key
  2. 使用找到的key向localhost的dns服务器发出一个更新记录的请求

add domain

add domain(domain) 增加一个DNS域。增加DNS的域是需要做与BIND相关的工作,重点在bind的named.conf文件上。由于是配置文件,所以在操作完成之前都需要做一个检查,否则会出现问题。现在没有考虑更多的slave的问题,先把master的dns更新解决,再讨论slave的问题。总体的更新流程如下图所示:

参数说明:

所属文件:

工作流程:

  1. 确认本机是否有该DNS域名的解晰,如果没有继续,如果有,则返回已经有该域回的exception
  2. 在本机的named.conf中的每一个view中增加该域的zone声明
  3. 使用 named-checkconf 检查zone文件的书写正确性
  4. 在本机的dynamic目录中增加每个view该域的缺省zone数据区文件
  5. 使用named-checkzone检查zone数据区文件的书写正确性
  6. 将相应的文件复制到运行目录中
  7. 使用rndc reload重新加载bind配置文件

del domain

del domain(domain) 删除一个DNS域

参数说明:

所属文件:

工作流程:

  1. 在本机的dynamic目录中删除每个view该域的zone数据区文件和动态更新数据区文件
  2. 在本机的named.conf中的每一个view中增加该域的zone声明
  3. 使用 named-checkconf 检查zone文件的书写正确性
  4. 使用named-checkzone检查zone数据区文件的书写正确性
  5. 将相应的文件复制到运行目录中
  6. 使用rndc reload重新加载bind配置文件

reload bind

reload bind([view],[domain]) 重载bind配置文件

参数说明:

工作流程:

  1. 调用rndc的reload命令执行该指令

sync bind

sync bind(remont) 从主机同步回本机的bind配置。本命令只定义,先不实现。在确认了bind的配置文件后再进行这个API的开发。

配置定义

namedconf bind的named.conf文件路径。默认在FreeBSD下它指向了/etc/namedb。

nameddb bind的nemd zone文件路径。默认在FreeBSD下它指向了/etc/namedb。

包定义

xbaydns/utils

一些通用的工具类

xbaydns/conf

一些通用的配置类

xbaydns/tests

系统的unit test代码

xbaydns/tools

系统使用的工具

NSUpdate

__init__

__init__(self, addr, domain, view = False, port = 53)

作用: NSUpdate对象进行初始化

参数说明:

例:

nsupdate_obj = nsupdate.NSUpdate('127.0.0.1', 'sina.com.cn.')

addRecord

addRecord(self, recordlist)

作用:添加一条DNS记录

参数说明:

TTL, CLASS, TYPE, [RECORD_STRING1, RECORD_STRING2, ...],...]

recordlist = [['foo', 3600, 'IN', 'A', ['202.108.33.32', '202.108.35.50']],
             ['', 86400, 'IN', 'MX', ['10 mx1', '20 mx2.sina.com.cn.']]]

removeRecord

removeRecord(self, recordlist, entire_node = False)

作用:删除一条DNS记录,或整个节点

参数说明:

当entire_node为True时,形式为: NAME2,...

recordlist = ['foo', 'bar']

updateRecord

updateRecord(self, recordlist)

NOT IMPLEMENT

commitChanges

commitChanges(self, timeout = None, usetcp = True)

作用:提交pending的更新

参数说明:

queryRecord

queryRecord(self, name, rdtype = 'A', usetcp = False, timeout = 30, rdclass = 'IN')

作用:在本对象初始化时所指定的view中查询

参数说明:

见queryRecord_Independent

调用示例:

queryRecord('foo')
queryRecord('', rdtype = 'MX', usetcp = True)
queryRecord('bar', rdtype = 'CNAME', rdclass = 'ANY')

queryRecord_Independent

queryRecord_Independent(self, name, view = False, rdtype = 'A', usetcp = False, timeout = 30, rdclass = 'IN')

作用:DNS查询

参数说明:

调用示例:

queryRecord_Independent('foo')
queryRecord_Independent('', rdtype = 'MX', usetcp = True)
queryRecord_Independent('bar', view = 'internal', rdtype = 'CNAME', rdclass = 'ANY')

出错处理

均抛出*NSUpdateException*类型的异常


Sign in to add a comment
Hosted by Google Code