通过WAPI与Infoblox NIOS交互的客户端
项目描述
=============================== Infoblox 客户端
.. image:: https://travis-ci.org/infobloxopen/infoblox-client.svg?branch=master :target: https://travis-ci.org/infobloxopen/infoblox-client
.. image:: https://img.shields.io/pypi/v/infoblox-client.svg :target: https://pypi.python.org/pypi/infoblox-client
.. image:: https://codecov.io/github/infobloxopen/infoblox-client/coverage.svg?branch=master :target: https://codecov.io/github/infobloxopen/infoblox-client?branch=master
.. image:: https://readthedocs.org/projects/infoblox-client/badge/?version=latest :target: http://infoblox-client.readthedocs.org/en/latest/?badge=latest
与Infoblox NIOS通过WAPI交互的客户端。
- 免费软件:Apache许可证
- 文档: https://infoblox-client.readthedocs.org。
安装
使用pip安装infoblox-client
::
pip安装infoblox-client
用法
在加载infoblox_client之前配置logger,以便在控制台获取所有调试信息
.. code:: python
import logging logging.basicConfig(level=logging.DEBUG)
低级API,使用连接器模块
Retrieve list of network views from NIOS:
.. code:: python
from infoblox_client import connector
opts = {'host': '192.168.1.10', 'username': 'admin', 'password': 'admin'}
conn = connector.Connector(opts)
# get all network_views
network_views = conn.get_object('networkview')
# search network by cidr in specific network view
network = conn.get_object('network', {'network': '100.0.0.0/8', 'network_view': 'default'})
For these request data is returned as list of dicts:
.. code:: python
network_views:
[{u'_ref': u'networkview/ZG5zLm5ldHdvcmtfdmlldyQw:default/true',
u'is_default': True,
u'name': u'default'}]
network:
[{u'_ref': u'network/ZG5zLm5ldHdvcmskMTAwLjAuMC4wLzgvMA:100.0.0.0/8/default',
u'network': u'100.0.0.0/8',
u'network_view': u'default'}]
High level API, using objects
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Example of creating Network View, Network, DNS View, DNSZone and HostRecord using NIOS objects:
.. code:: python
from infoblox_client import connector
from infoblox_client import objects
opts = {'host': '192.168.1.10', 'username': 'admin', 'password': 'admin'}
conn = connector.Connector(opts)
Create a network view, and network:
.. code:: python
nview = objects.NetworkView.create(conn, name='my_view')
network = objects.Network.create(conn, network_view='my_view', cidr='192.168.1.0/24')
Create a DNS view and zone:
.. code:: python
view = objects.DNSView.create(conn, network_view='my_view', name='my_dns_view')
zone = objects.DNSZone.create(conn, view='my_dns_view', fqdn='my_zone.com')
Create a host record:
.. code:: python
my_ip = objects.IP.create(ip='192.168.1.25', mac='aa:bb:cc:11:22:33')
hr = objects.HostRecord.create(conn, view='my_dns_view',
name='my_host_record.my_zone.com', ip=my_ip)
Create host record with Extensible Attributes (EA):
.. code:: python
ea = objects.EA({'Tenant ID': tenantid, 'CMP Type': cmptype,
'Cloud API Owned': True})
host = objects.HostRecord.create(conn, name='new_host', ip=my_ip, extattrs=ea)
Create a host record with inherited Extensible Attributes (EA):
.. code:: python
my_ip = objects.IP.create(ip='192.168.1.25', mac='aa:bb:cc:11:22:33', use_for_ea_inheritance=True)
hr = objects.HostRecord.create(conn, view='my_dns_view',
name='my_host_record.my_zone.com', ip=my_ip)
Set the TTL to 30 minutes:
.. code:: python
hr = objects.HostRecord.create(conn, view='my_dns_view',
name='my_host_record.my_zone.com', ip=my_ip,
ttl = 1800)
Create a new host record, from the next available IP in a CIDR, with a MAC address, and DHCP enabled:
.. code:: python
next = objects.IPAllocation.next_available_ip_from_cidr('default', '10.0.0.0/24')
my_ip = objects.IP.create(ip=next, mac='aa:bb:cc:11:22:33', configure_for_dhcp=True)
host = objects.HostRecord.create(conn, name='some.valid.fqdn', view='Internal', ip=my_ip)
Reply from NIOS is parsed back into objects and contains next data:
.. code:: python
In [22]: hr
Out[22]: HostRecordV4: _ref=record:host/ZG5zLmhvc3QkLjQuY29tLm15X3pvbmUubXlfaG9zdF9yZWNvcmQ:my_host_record.my_zone.com/my_dns_view, name=my_host_record.my_zone.com, ipv4addrs=[<infoblox_client.objects.IPv4 object at 0x7f7d6b0fe9d0>], view=my_dns_view
Create a new fixed address, with a MS server DHCP reservation:
.. code:: python
obj, created = objects.FixedAddress.create_check_exists(connector=conn,
ip='192.168.100.100',
mac='aa:bb:cc:11:22:33',
comment='My DHCP reservation',
name='My hostname',
network_view='default',
ms_server={'_struct': 'msdhcpserver',
'ipv4addr': '192.168.0.0'})
High level API, using InfobloxObjectManager
创建一个新的固定地址,从CIDR的下一个可用IP中选择
.. code:: python
from infoblox_client.object_manager import InfobloxObjectManager
new_address = InfobloxObjectManager(conn).create_fixed_address_from_cidr(netview='default', mac='aa:bb:cc:11:22:33', cidr='10.0.0.0/24', extattrs=[])
返回的是FixedAddressV4对象。
对象接口
所有顶级对象都支持CRUD操作的接口。支持的对象列表定义在下一段中。
-
create(cls, connector, check_if_exists=True, update_if_exists=False, **kwargs)在NIOS侧创建对象。需要作为第一个参数传递的连接器,check_if_exists和update_if_exists是可选的。与对象相关的字段作为kwargs传递:field=value,field2=value2。 -
search(cls, connector, return_fields=None, search_extattrs=None, force_proxy=False, **kwargs)在NIOS侧搜索单个对象,返回第一个符合搜索条件的对象。需要作为第一个参数传递的连接器。可以设置return_fields以从NIOS检索特定字段,例如return_fields=['view', 'name']。如果return_fields是[],则默认返回return_fields由NIOS侧针对当前wapi_version返回。如果使用search_extattrs,则用于通过可扩展属性过滤结果。force_proxy强制搜索请求在Grid Master上处理(仅适用于云环境) -
search_all(cls, connector, return_fields=None, search_extattrs=None, force_proxy=False, **kwargs)在NIOS侧搜索所有符合搜索条件的对象。返回对象列表。所有其他选项等于search()。 -
update(self)通过将本地对象中执行的变化推送到NIOS侧来更新对象。 -
delete(self)从NIOS侧删除对象。
支持的NIOS对象
0.6.0版本发布中支持所有NIOS对象。请检查infoblox_client/objects.py以获取对象的描述。新支持的对象
AAAADtcRecordAAAARecordAAAASharedRecordADtcRecordADtcRecordBaseARecordARecordBaseASharedRecordASharedRecordBaseAdAuthServerAdAuthServiceAddressacAdmingroupAdminroleAdminuserAliasRecord所有端点所有nsg组所有记录所有rpz记录任何成员审批工作流认证策略Awsrte53任务Awsrte53任务组Aws用户基本对象Bfd模板Bgpas批量主机批量主机名称模板CNAMEDtcRecordCNAMERecordCNAMESharedRecordCaaRecordCacertificate容量报告容量报告对象计数捕获门户捕获门户文件证书认证服务已更改的对象Ciscoise端点客户端子网域CsvimporttaskDHCP租约DHCPRoamingHostDNS视图DNS区域DNS区域委派DNS区域转发Db对象DbsnapshotDdnsPrincipalclusterDdnsPrincipalclusterGroup已删除的对象DhcidRecordDhcpOptionDefinitionDhcpOptionDefinitionV4DhcpOptionDefinitionV6DhcpOptionSpaceDhcpOptionSpaceV4DhcpOptionSpaceV6DhcpStatisticsDhcpddnsDhcpfailoverDhcpmemberDhcpoption发现发现自动转换设置发现Ciscoapic配置发现Clicredential发现设备发现设备组件发现设备接口发现设备邻居发现设备支持包发现诊断任务发现网格属性发现Ifaddrinfo发现成员属性发现网络信息发现端口发现扫描接口发现种子路由器发现Snmp3Credential发现Snmpcredential发现状态发现Vlan信息发现Vrf发现Vrf映射规则发现任务发现任务端口发现任务vserver分发计划DnameRecordDns64GroupDnskeyRecordDnsseckeyDnssectrustedkeyDsRecordDtcDtcAllrecordsDtcCertificateDtcLbdnDtcMonitorDtcMonitorHttpDtcMonitorIcmpDtcMonitorPdpDtcMonitorSipDtcMonitorSnmpDtcMonitorSnmpOidDtcMonitorTcpDtcObjectDtcPoolDtcPoolConsolidatedMonitorHealthDtcPoolLinkDtcServerDtcServerLinkDtcServerMonitorDtcTopologyDtcTopologyLabelDtcTopologyRuleDtcTopologyRuleSourceDtclbdnRecordDxlEndpointDxlEndpointBrokerEAEADefinition排除范围排除范围模板可扩展属性定义List值ExtserverExtsyslogbackupserverFileopFilterfingerprintFiltermacFilternacFilteroptionFilterrelayagentFilterruleFingerprint固定地址固定地址模板固定地址模板V4固定地址模板V6固定地址V4固定地址V6转发成员服务器Ftpuser网格GridCloudapiGridCloudapiCloudstatisticsGridCloudapiUserGridCloudapiVmGridCloudapiVmaddressGridDashboardGridDhcppropertiesGridDnsGridDnsFixedrrsetorderfqdnGridFiledistributionGridLicensePoolGridLicensePoolContainerGridLicensesubpoolGridMaxminddbinfoGridMemberCloudapiGridServicerestartGroupGridServicerestartGroupOrderGridServicerestartRequestGridServicerestartRequestChangedobjectGridServicerestartStatusGridThreatanalyticsGridThreatprotectionGridX509CertificateGridmemberSoamnameGridmemberSoaserial主机记录主机记录V4主机记录V6主机名称重写策略热修复HsmAllgroupsHsmSafenetHsmSafenetgroupHsmThalesHsmThalesgroupIPIP地址IP分配IP范围IP范围V4IP范围V6IPv4IPv4地址IPv4主机地址IPv6IPv6地址IPv6主机地址Infoblox对象接口IpamStatisticsIpv6NetworksettingKerberoskeyLdapAuthServiceLdapEamappingLdapServerLicenseGridwide本地用户认证服务逻辑过滤器规则LomnetworkconfigLom用户MX记录MX共享记录Mac过滤器地址主网格成员成员DHCP属性成员DNS成员DNS GLUE记录地址成员DNS IP成员文件分发成员许可成员家长控制成员威胁分析成员威胁防护成员服务器成员服务通信成员服务状态MS DHCP选项MS DHCP服务器MS DNS服务器MS 服务器MS 服务器 AD 站点域MS 服务器 AD 站点MS 服务器 DCNS 记录创建MS 服务器 DHCPMS 服务器 DNSMS 超范围命名ACLNAPTR DTC 记录NAPTR 记录NAT组网络网络容器网络容器V4网络容器V6网络发现网络模板网络模板V4网络模板V6网络V4网络V6网络视图网络用户网络视图关联成员节点信息通知REST端点通知REST模板通知REST模板参数通知规则通知规则表达式操作NS 记录NSEC3 参数记录NSEC3 记录NSEC 记录NSG 组NSG 委托NSG 转发成员NSG 转发存根服务器NSG 存根成员NX 域名规则OCSP 响应者选项60匹配规则有序范围有序响应策略区域OSPF出站云客户端出站云客户端事件家长控制ABS家长控制AVP家长控制阻止策略家长控制IP空间区分器家长控制MS家长控制NAS网关家长控制站点成员家长控制SPM家长控制订阅者家长控制订阅者站点权限指针记录指针记录V4指针记录V6Radius认证服务Radius服务器范围模板范围模板V4范围模板V6R数据子字段记录名策略远程DNS区域重启服务状态RIRRIR组织Rpz AIp地址记录Rpz A记录Rpz AaaaIp地址记录Rpz Aaaa记录Rpz CnameClientip地址记录Rpz CnameClientip地址dn记录Rpz CnameIp地址记录Rpz CnameIp地址dn记录Rpz Cname记录Rpz Mx记录Rpz Naptr记录Rpz Ptr记录Rpz Ptr记录V4Rpz Ptr记录V6Rpz Srv记录Rpz Txt记录Rrsig记录规则集SRV DTC记录SRV记录SRV共享记录SAML认证服务清除任务计划任务搜索设置网络设置视图地址共享网络共享网络V4共享网络V6共享记录组智能文件夹子文件夹智能文件夹全局智能文件夹按组智能文件夹个人智能文件夹查询项Snmp用户排序列表子对象超级主机超级主机子系统日志端点系统日志端点服务器系统日志服务器TXT记录TXT共享记录Tacacsplus认证服务Tacacsplus服务器TaxiiTaxii Rpz配置租户Tftp文件目录威胁分析模块集威胁分析白名单威胁洞察云客户端威胁防护网格规则威胁防护NAT规则威胁防护配置文件威胁防护配置文件规则威胁防护规则威胁防护规则类别威胁防护规则集威胁防护规则模板威胁防护状态信息威胁防护统计阈值陷阱TLSA记录陷阱通知未知记录更新下载成员配置升级组升级组成员升级组计划升级计划升级状态升级步骤用户配置文件V发现任务虚拟局域网虚拟局域网链路虚拟局域网范围虚拟局域网视图虚拟TFTP目录成员区域认证差异区域RP区域存根区域关联区域名称服务器
在0.4.25版本之前,该项目支持
-
NetworkView用于 'networkview' -
DNSView用于 'view' -
DNSZone用于 'zone_auth' -
Member用于 'member' -
Network(V4和V6)NetworkV4用于 'network'NetworkV6用于 'ipv6network'
-
IPRange(V4和V6)IPRangeV4用于 'range'IPRangeV6用于 'ipv6range'
-
HostRecord(V4和V6)HostRecordV4用于 'record:host'HostRecordV6用于 'record:host'
-
FixedAddress(V4和V6)FixedAddressV4用于 'fixedaddress'FixedAddressV6用于 'ipv6fixedaddress'
-
IPAddress(V4和V6)IPv4Address用于 'ipv4address'IPv6Address用于 'ipv6address'
-
ARecordBaseARecord用于 'record:a'AAAARecord用于 'record:aaaa'
-
PtrRecord(V4和V6)PtrRecordV4用于 'record:ptr'PtrRecordV6用于 'record:ptr'
-
EADefinition用于 'extensibleattributedef' -
CNAMERecord用于 'record:cname' -
MXRecord用于 'record:mx'
支持使用正则表达式进行搜索
目前仅通过低级API支持部分匹配搜索。使用字段名与 '~' 连接进行正则表达式搜索。并非所有字段都支持正则表达式搜索。请参考 wapidoc 获取可以以此方式搜索的字段完整列表。示例
查找所有以 '10.10.' 开头的网络
.. code:: python
conn = connector.Connector(opts) nw = conn.get_object('network', {'network~': '10.10.'})
查找所有以 '10.10.' 开头的主机记录
.. code:: python
conn = connector.Connector(opts) hr = conn.get_object('record:host', {'ipv4addr~': '10.10.'})
更多示例
利用可扩展属性并在其上搜索可以很容易地通过 get_object 函数完成。在 return_fields 中的 default 字段类似于WAPI中的 +。
_return_fields+除了对象的基字段(针对每个对象都有文档说明)外,还将返回指定的字段列表(以逗号分隔)。
这使您始终可以在返回结果中获取默认值,而不仅仅是您指定的值,无论您是搜索 network 还是 networkcontainer,在以下代码中定义为 place_to_check。
.. code:: python
from infoblox_client.connector import Connector
def default_infoblox_connection():
opts = {'host': '192.168.1.10', 'username': 'admin', 'password': 'admin'}
conn = Connector(opts)
return conn
def search_extensible_attribute(connection, place_to_check: str, extensible_attribute: str, value: str):
"""
Find extensible attributes.
:param connection: Infoblox connection
:param place_to_check: Can be `network`, `networkcontainer` or `record:host` and so on.
:param extensible_attribute: Which extensible attribute to search for. Can be `CustomerCode`, `Location`
and so on.
:param value: The value you want to search for.
:return: result
"""
extensible_args = [
place_to_check,
{
f"*{extensible_attribute}:~": value,
}
]
kwargs = {
'return_fields': [
'default',
'extattrs',
]
}
result = {"type": f"{place_to_check}", "objects": connection.get_object(*extensible_args, **kwargs)}
return result
connection = default_infoblox_connection()
search_network = search_extensible_attribute(connection, "network", "CustomerCode", "Infoblox")
# Print the output:
print(search_network)
{
"type": "network",
"objects": [
{
"_ref": "network/ZG5zLmhvc3QkLjQuY29tLm15X3pvbmUubXlfaG9zdF9yZWNvcmQ:192.168.1.1/28/default",
"comment": "Infoblox Network",
"extattrs": {
"CustomerCode": {
"value": "Infoblox"
}
},
"network": "192.168.1.0/28",
"network_view": "default"
}
]
}
search_host = search_extensible_attribute(connection, "record:host", "CustomerCode", "Infoblox")
# Print the output:
print(search_host)
{
"type": "record:host",
"objects": [
{
"_ref": "record:host/ZG5zLm5ldHdvcmtfdmlldyQw:InfobloxHost",
"extattrs": {
"CustomerCode": {
"value": "Infoblox"
}
},
"ipv4addrs": [
{
"_ref": "record:host_ipv4addr/ZG5zLm5ldHdvcmtfdmlldyQwdvcmtfdmlldyQw:192.168.1.1/InfobloxHost",
"configure_for_dhcp": false,
"host": "InfobloxHost",
"ipv4addr": "192.168.1.1"
}
],
"name": "InfobloxHost",
"view": " "
}
]
}
功能
- 待办事项
历史
0.6.0 (2022-11-18)
- 添加了对Python版本3.9的支持 #352;
- 删除了对Python版本低于3.0的支持 #352;
0.5.2 (2022-10-12)
- 添加了基于证书的认证逻辑 #330;
- 修复了IP对象中EA继承的使用 #318;
- 修复了 'class Member()' 中缺失字段 ('ipv4addr', 'ipv6addr') #345;
0.5.1 (2022-03-14)
- 更新了连接器的urlencoding逻辑以进行正确的数组编码 #287;
- 更新了InfobloxObject的fetch方法以引发
InfobloxFetchGotMultipleObjects异常 #288; - 修复了从V4 & V6子类调用抽象化类 from_dict 时的问题 #282;
- 修复了更新DNSZone对象时引发的异常和不允许更新的字段 #331;
- 修复了ARecord和AAAARecord对象跳过更新可更新字段的问题 #334, #328;
- 在搜索非可搜索字段时引发异常 #339;
- 修复了使用sphinx与make docs生成的客户端错误 #343;
0.5.0 (2020-05-14)
- 主要更新了对象,现在支持约380+个NIOS对象调用。(找到infoblox_client/objects.py文件以列出支持的对象及其描述)
- 错误修复
- python-six依赖设置为 >=1.11.0
0.4.25 (2020-03-12)
- 错误修复
0.4.24 (2020-02-25)
- 为固定地址添加了一些额外字段(ms_server)
- 支持MX记录
- 错误修复 - PTR记录现在返回一个IP
0.4.23 (2019-09-10)
- 为网络类添加了一些额外字段
- 修复了A记录的更新选项
- 添加了固定地址的属性
0.4.22 (2019-02-21)
- 支持返回默认字段加用户所需字段,反映WAPI
- 支持DNS主机记录的'别名'参数
0.4.21 (2019-01-18)
- 支持WAPI版本2.10或更高
0.4.20 (2018-03-27)
- 更新默认WAPI版本从1.4到2.1
0.4.19 (2018-02-06)
- 将对象搜索失败日志从Error改为Warning
0.4.18 (2017-11-20)
- 修复与临时不可用状态代码相关的错误
0.4.17 (2017-11-09)
- 为WAPI调用添加分页支持
0.4.15 (2017-07-18)
- 更改仅使用MAC地址生成duid的逻辑
0.4.14 (2017-05-18)
- 添加检查对象是创建还是复用的功能
0.4.13 (2017-03-01)
- 为HostRecordV*添加TTL字段
- 添加CNAME记录支持
- 指定SRV记录的返回字段
0.4.12 (2016-12-08)
- 允许搜索所有字段
- 从PTR记录搜索属性中删除ptrdname
0.4.11 (2016-10-31)
- 通过MAC添加搜索HostRecords的功能
0.4.10 (2016-10-24)
- 更新历史和作者信息
0.4.9 (2016-10-24)
- 添加通过MAC获取固定地址的功能
0.4.8 (2016-10-10)
- 将ptrdname搜索选项添加到PtrRecord对象
0.4.7 (2016-07-14)
- 添加区域可扩展属性更新支持
0.4.6 (2016-07-01)
- 为主机记录添加network_view支持
0.4.5 (2016-06-13)
- 在create_ea_definition中允许抛出异常
- 将pep8检查添加到tox
- 将pep8检查添加到Travis CI
- 添加正则表达式搜索示例
0.4.4 (2016-05-11)
- 将only_ref选项传递给update_from_dict
- 在处理未知字段时不要失败
- 仅获取服务重启的对象引用
- 更新README,包含EA使用示例
0.4.3 (2016-03-28)
- 为Member添加默认字段
- 更新create_network的docstring
- 为FixedAddressV4和IPAddress添加字段
0.4.2 (2016-03-04)
- 为connector添加max_retries选项
- 在get时以Error日志级别记录失败
0.4.1 (2016-02-26)
- 将'max_results'添加为connector选项
0.4.0 (2016-02-19)
- 将max_results选项添加到connector和对象
- 添加Tenant对象
- 更新README.rst,添加更多示例
0.3.9 (2016-02-18)
- 为HostRecord添加'configure_for_dns'字段
0.3.8 (2016-02-17)
- 将'extattrs'添加到DNSZone/DNSView的return_fields
0.3.7 (2016-02-12)
- 为NetworkView添加return_fields
0.3.6 (2016-01-28)
- 为EA对象添加对列表和元组值的支持
- 移除_value_to_bool
0.3.5 (2016-01-22)
- 没有更改
0.3.4 (2016-01-21)
- 不要在请求级别上覆盖verify标志
0.3.3 (2016-01-20)
- create_required_ea_definitions返回创建的列表
- 将'start_addr', 'end_addr'添加到IP检测列表
- 将请求类型添加到connector logger
- Flake8修复
0.3.2 (2016-01-19)
- 将ssl_verify的字符串转换为布尔值
- 更新AUTHORS.rst,添加贡献者
- 从utils.py中删除未使用的函数
0.3.1 (2016-01-14)
- 为Host Record的搜索字段添加'zone'
0.3.0 (2016-01-14)
- 将开发状态从预alpha更新到alpha
- 功能/tox测试(测试环境有重大变化)
- 为FixedAddress添加搜索字段'network'
- 允许ipv6使用域名服务器
- 更新网络而不是替换现有EA
0.2.3 (2016-01-06)
- 如果搜索失败,则返回None而不是异常
- 将ip_version作为对象的公共属性
0.2.2 (2015-12-23)
- 修复从创建方法更新对象的问题
- 重构delete_all_associated_objects逻辑
- 修复create_object中的错误处理
- 不要在create_dns_zone级别上捕获异常
- 更新member_ipv6_setting的功能版本
0.2.1 (2015-12-18)
- 添加InfobloxMemberAlreadyAssigned异常
- 如果已存在,则更新dns记录
- 为connector添加'log_api_calls_as_info'选项
- 检查EA中的空值
0.2.0 (2015-12-17)
- 弃用object_manager中的network_exists方法
- 为对象添加_global_field_processing
- 为所有InfobloxObject子类将'extattrs'解析到EA对象
- 将文档徽章添加到README.rst
- 重构object_manager中的get_network
- 将eq移动到BaseObject
- 在删除之前检查是否找到了固定地址
0.1.4 (2015-12-08)
- Member对象的字段更新
- 在connector上以debug级别记录所有api调用
0.1.3 (2015-12-04)
- 将'network'字段添加到ip版本化字段
- 跳过添加IPv6网络的DHCP选项
- 在创建之前不要搜索IPRange
0.1.2 (2015-12-02)
- 在删除时如果对象未找到不要失败
- 如果回复不是json,则抛出带有详细信息的异常
- 为connector添加'silent_ssl_warnings'选项
0.1.1 (2015-12-01)
- 修复unbind_name_from_record_a
0.1.0 (2015-12-01)
- 为对象添加新的字段类型'_updateable_search_field'并修复HostRecord搜索
- 修复'make docs'
- 更新README.rst(固定格式化)
0.0.11 (2015-11-25)
- 修复将第二个IP添加到HostRecord
- 修复pdb中的失败问题
- 如果可能,将EA值转换为布尔值
- 在HostRecord中为ip字段添加'ips'别名
0.0.10 (2015-11-19)
- 添加确定支持的功能的实用程序
- 使用对象接口更新README.rst
0.0.9 (2015-11-13)
- 为EA定义添加allowed_object_types字段
- 允许返回对象的默认字段
- 使用支持的对象列表更新README.rst
0.0.8 (2015-11-12)
- 添加可扩展属性定义支持
- 修复object_manager中create_network的选项处理问题
- 修复create_dns_zone中缺失的DNSZone对象
0.0.7 (2015-10-27)
- 将'network'添加到IPRange搜索字段
- 修改EA类的get方法,允许返回默认值
0.0.6 (2015-10-26)
- 添加对可扩展属性作为子对象的基本支持
- 添加通过可扩展属性进行搜索
- 改进连接器中的验证
- 向对象管理器添加delete_object_by_ref
0.0.5 (2015-10-12)
- 修复与对象一起工作的问题
- 添加了遗漏的_get_object_type_from_ref
- 添加代码覆盖率
- 更新链接以指向infobloxopen存储库
0.0.4 (2015-09-23)
- 添加了与NIOS对象交互的对象抽象
- 添加object_manager以简化对对象的一些操作
0.0.3 (2015-09-15)
- 向包中添加依赖关系。
0.0.2 (2015-09-11)
- 修复使用包目录名中的破折号导致安装后无法导入包的问题。
0.0.1 (2015-09-11)
- 添加连接器以向NIOS发送wapi请求,目前不包含NIOS对象模型。
- 在PyPI上的第一个版本。