同步主机列表并为服务生成配置文件。
hostlist的Python项目详细描述
主机列表
hostlist读取包含主机信息的yaml列表并生成 多个服务的配置文件和清单。
快速启动
示例输入文件位于tests
目录中。主机列表在hostslists
子目录中定义,其中
编码所包含主机的hosttype
和institute
属性。
运行buildfiles
生成输出。
buildfiles --help
显示可用的选项。
配置
主配置在工作目录的config.yml
中。
主机列表收集在config.yml
中列出的目录中。
主机列表格式
主机列表是hostlists
下的文件。文件格式为
hosttype-institute.yml
或hosttype.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中的ansiblevars
dict中,以便将它们放入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强制执行)。