同步主机列表并为服务生成配置文件。

hostlist的Python项目详细描述


主机列表

hostlist读取包含主机信息的yaml列表并生成 多个服务的配置文件和清单。

快速启动

示例输入文件位于tests目录中。主机列表在hostslists子目录中定义,其中 编码所包含主机的hosttypeinstitute属性。

运行buildfiles生成输出。 buildfiles --help显示可用的选项。

配置

主配置在工作目录的config.yml中。 主机列表收集在config.yml中列出的目录中。

主机列表格式

主机列表是hostlists下的文件。文件格式为 hosttype-institute.ymlhosttype.yml,即0或1破折号。文件名将 被解析并设置为该文件中所有主机的institute/hosttype。

人质名单在亚马尔。允许在一个文件中包含多个yaml文档。每个 yaml文档以只包含---的行开头。

每个yaml文档文档都有一个header和一个hosts列表。 头必须有一个iprange,它列出了 文件。它还可以设置变量和组。

hostlist是一个dict列表,每个dict都需要一个主机名和一个ip,并且可以 取其他变量。

变量和组

每个主机都有一个与其关联的变量列表(dict)和一个组列表(set)。

如果变量设置在多个位置,则按以下顺序覆盖它们: 文件名<;头<;主机

对于组,在配置文件中设置默认值。 在头和主机定义中,可以定义从 该主机的组。

组用于定义某些输出中使用的主机(muninnode、ssh_known_hosts)或应包括哪些主机 检查(需要IP,需要Mac)。

检查

为了确保一致性和在错误发生之前发现错误,我们进行了许多检查 已部署:

  • IP范围

    • 主机必须具有给定范围内的IP
    • 所有主机都必须属于配置中指定的IP范围
    • 文件之间的iprange不能重叠(设置了iprange_allow_overlap除外)
  • IP、Mac和主机名必须唯一

  • 如果设置了{{CD17>},它必须是一个现有的用户帐户(检测机器) 属于不再拥有帐户的用户)

  • 如果设置了end_date,则它必须在将来设置

要忽略失败的测试,请在config.yml列表中列出它们:

ignore_checks:-"end_date"-"user"-"nonunique"-"cnames"-"duplicates"-"missing_mac_ip"-"iprange_overlap"

服务

目前支持的服务是:

  • /etc/主机,也可用于dnsmasq
  • DHCPD
  • 责任库存
  • 穆宁
  • ssh_known_主机生成

Web后台程序

您可以启动hostlist-daemon,通过http为生成的内容(dns、dhcp、munin,…)提供服务。启动hostlist-daemon运行buildfiles。web守护进程基于cherrypy,并有一个配置文件daemon.conf。

此外,还有一个用ansible-cmdb生成的可读网页。ansible命令的可选设置为:

ansible_cmdb:columns:-name-ram-comment-main_iptemplate:'fancy_html'data:fact_dirs:-facts

它可以通过在web浏览器中查看buildfiles --web > index.html的输出进行测试。 注意,如果要列出各种主机变量,必须将它们添加到config.yml中的ansiblevarsdict中,以便将它们放入ansible资源清册中。 由于构建文件不在任何远程主机上执行ansible,因此没有可用的主机事实(ram、cpu、供应商、磁盘使用情况…)。但是,您可以通过通过fact_dirs中列出的目录(请参阅Ansible CMDB文档)从以前的Ansible运行中通过事实缓存提供这些信息。

示例

输入和所有配置文件的工作示例可以在tests中找到。

DNSVS同步

除了生成配置文件外,hostlist还可以也与 dnsvs,这是https://www.scc.kit.edu使用的dns管理系统。

为了使用dnsvs接口,您需要一个ssl密钥,它应该在~/.ssl/net-webapi.key中。要生成密钥,请遵循“hinweise zur zertifikatsbenutzung bzw”一节中的说明。registrierung“在页面https://www-net-doku.scc.kit.edu/webapi/2.0/intro的底部。

添加密钥后,您可以运行buildfiles,这将显示 dnsvs和本地文件之间的差异,并提供复制本地文件的选项 DNSVS的主机列表。

测试

要运行测试: ::

CD测试;PY测试

贡献

请随意使用代码并根据需要进行调整。 欢迎拉取请求!

样式指南

如果可能的话,代码应该遵循PEP8(由Flake8或Pylint强制执行)。

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

推荐PyPI第三方库


热门话题
java编辑并重新运行spring引导单元测试,无需重新加载上下文即可加快测试速度   为什么我不能做演员?   java为什么是线程。join通常用于停止安卓中的线程   java从weblogic服务器调用JSON POST REST服务时收到400:错误请求   java在DeviceAdmin模式禁用时设置身份验证?   java SortedMap的keySet()能否始终安全地强制转换到SortedSet?   安卓 java。lang.NoSuchMethodException可包裹类   java JOGL库安装   javatomcat内存管理   java使用getString()中的变量   java将最小星号设置为评级栏   Java中字符串相等的println()方法。。。它到底是如何工作的?   java如何从文本中输出的数组中放入随机图像