在临时服务器上测试DNS更改并在生产中验证的工具

pydnstest的Python项目详细描述


Pydnstest

https://img.shields.io/pypi/v/pydnstest.svgpypi downloadstravis ci for master branch主分行覆盖报告项目状态:inactive–项目已达到稳定、可用的状态,但不再积极开发;将在时间允许的情况下提供支持/维护。

用于测试dns更改(添加、删除、重命名、更改记录)的python工具 针对一个临时DNS服务器,在生产环境中验证相同的更改, 或确认记录在两种环境中返回相同的结果。

Pydnstest根据GNU Affero通用公共许可第3版获得许可。

要求

  • python 2.7或3.4+(当前使用2.7、3.4、3.5、3.6进行测试)
  • python virtualenv pip (建议的安装方法;您的操作系统/发行版应该有相应的软件包)
  • 以下软件包:

安装

建议您安装到虚拟环境(virtualenv/ VEV)。请参阅 Virtualenv使用文档 有关如何创建VENV的信息。如果你真的想安装 在系统范围内,您可以(使用sudo)。

pip install pydnstest

配置

运行 pydnstest --promptconfig 以交互方式生成并写出配置文件 (到 ~/.dnstest.ini )或运行 pydnstest --示例配置并编辑 根据需要生成文件。

您可以使用configprint选项查看当前配置。

用法

Pydnstest使用一种自然语言(如语法)为要进行的DNS更改获取一个或多个规范,并测试一个登台DNS服务器(并有选择地根据生产/实时服务器验证一次NGE是实时的)。对于每个规范,它打印出一个简单的单行ok/ng摘要,以及一些有用的辅助消息和/或警告。目前,它接受stdin或从文件中读取的输入。

下面的使用示例都假设您已经在 virtualenv位于 ~/venv_dir 。如果您在系统范围内安装了 省略前两行( cd~/venv_dir source bin/activate )。

语法

add [record|name|entry] <hostname_or_fqdn> [with ][value|address|target] <hostname_fqdn_or_ip>
remove [record|name|entry] <hostname_or_fqdn>
rename [record|name|entry] <hostname_or_fqdn> [with][value|address|target] <value> to <hostname_or_fqdn>
change [record|name|entry] <hostname_or_fqdn> to <hostname_fqdn_or_ip>
confirm <hostname_or_fqdn> (checks that TEST and PROD return identical results)

示例输入文件
add foo.example.com with address 1.2.3.4
remove bar.example.com
rename baz.example.com with value 1.2.3.5 to blam.example.com
change quux.example.com to 1.2.3.6
confirm blam.example.com

使用输入文件

在~/inputfile.txt中编写包含以下内容的测试文件:

add record newhost.example.com with address 10.188.8.90
add record newhost-console.example.com with address 10.188.15.90

然后对其运行测试:

jantman@phoenix$ cd ~/venv_dir
jantman@phoenix$ source bin/activate
(venv_dir)jantman@phoenix$ pydnstest -f ~/inputfile.txt
OK: newhost.example.com => 10.188.8.90 (TEST)
        PROD server returns NXDOMAIN for newhost.example.com (PROD)
        REVERSE OK: 10.188.8.90 => newhost.example.com (TEST)
OK: newhost-console.example.com => 10.188.15.90 (TEST)
        PROD server returns NXDOMAIN for newhost-console.example.com (PROD)
        REVERSE OK: 10.188.15.90 => newhost-console.example.com (TEST)
++++ All 2 tests passed. (pydnstest 0.1.0)

在产品中验证一次

在上述更改生效后,请在生产中验证它们:

jantman@phoenix$ cd ~/venv_dir
jantman@phoenix$ source bin/activate
(venv_dir)jantman@phoenix$ pydnstest -f ~/inputfile.txt -V
OK: newhost.example.com => 10.188.8.90 (PROD)
        REVERSE OK: 10.188.8.90 => newhost.example.com (PROD)
OK: newhost-console.example.com => 10.188.15.90 (PROD)
        REVERSE OK: 10.188.15.90 => newhost-console.example.com (PROD)
++++ All 2 tests passed. (pydnstest 0.1.0)

进行一次快速测试

在stdin上做一个快速的一次性测试,以确认prod和test 对于给定的名称返回相同的结果:

jantman@phoenix$ cd ~/venv_dir
jantman@phoenix$ source bin/activate
(venv_dir)jantman@phoenix$ echo"confirm foo.example.com"| pydnstest
OK: prod and test servers return same response for'foo.example.com'
    response: {'name': 'foo.example.com', 'data': '10.10.8.2', 'typename': 'A', 'classstr': 'IN', 'ttl': 360, 'type': 1, 'class': 1, 'rdlength': 4}
++++ All 1 tests passed. (pydnstest 0.1.0)

从stdin以交互方式运行

您还可以提供stdin上的测试数据。这在提取测试数据时非常有用 来自另一个文件,例如:

jantman@phoenix:pts/12:~/tmp$ cat sample_zone.txt
$ORIGIN example.com.

;PYDNSTEST add record foo.example.com with address 10.10.8.2
foo       IN     A     10.10.8.2
;PYDNSTEST add record bar.example.com with address 10.10.8.3
bar       IN     A     10.10.8.3
;PYDNSTEST add record baz.example.com with address 10.10.8.4
baz       IN     A     10.10.8.4
jantman@phoenix$ cd ~/venv_dir
jantman@phoenix$ source bin/activate
(venv_dir)jantman@phoenix$ grep "^;PYDNSTEST" ~/tmp/sample_zone.txt | sed 's/^;PYDNSTEST //'| pydnstest
OK: prod and test servers return same response for'foo.example.com'
    response: {'name': 'foo.example.com', 'data': '10.10.8.2', 'typename': 'A', 'classstr': 'IN', 'ttl': 360, 'type': 1, 'class': 1, 'rdlength': 4}
OK: prod and test servers return same response for'bar.example.com'
    response: {'name': 'bar.example.com', 'data': '10.10.8.3', 'typename': 'A', 'classstr': 'IN', 'ttl': 360, 'type': 1, 'class': 1, 'rdlength': 4}
OK: prod and test servers return same response for'baz.example.com'
    response: {'name': 'baz.example.com', 'data': '10.10.8.4', 'typename': 'A', 'classstr': 'IN', 'ttl': 360, 'type': 1, 'class': 1, 'rdlength': 4}
++++ All 3 tests passed. (pydnstest 0.2.2)

错误和功能请求

通过github问题跟踪器可以愉快地接受错误报告和功能请求。拉取请求是 欢迎。将处理没有附带拉取请求的问题 在我的时间和优先权允许的情况下。

许可证

Pydnstest的许可证是在gnu affero general public下 许可证版本3,带有 版权和作者归属不得删除的附加条款 或以其他方式更改,但添加作者的作者归属于 这项工作。(根据AGPL V3第7b节的附加条款)。

我选择agpl主要是因为我希望这个软件继续发展 从社区参与和改进中受益。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
ssl证书javax。网ssl。SSLHandshakeException:java。安全cert.CertificateException:没有与IP地址匹配的主题替代名称   基于组件的体系结构的java粒度   java在读取文件中的下一行和上一行时,我得到一个空指针异常   java是什么。StrutConfig。xml。strutsdia文件?   java中如何根据枚举字段对一组对象进行排序   java Firebase setPersistenceEnabled。导致大量内存使用   java奇数编译泛型类和列表错误   java类型org没有可用的源代码。石英克隆表达;您是否忘记继承所需的模块?   java如何使用map计算列表中整数列表的和,并获得一个新列表,其中每个条目对应于每个计算出的和?   java二进制搜索不会结束   java跳过Jackson中的错误JSON数据   在服务层中使用依赖项注入时引发java空指针异常。DAO类bean为空   访问者模式如何解释这两个Java程序运行时间的差异?   用Java扩展日历   java调用通用静态方法