我正在尝试使用一个Puppet仓库,这些年来,这些仓库变成了比蛇交配球还要糟糕的东西。此外,回购协议曾经控制着两个基础设施,这两个基础设施一起运行以提供两种完全不同的服务,但是当基础设施被拆分时,回购协议却没有。
我现在正面临着尝试做出将影响到一个基础架构(但不是同时影响两个基础架构)的更改的问题,部分问题是了解什么控制什么。
是否有任何一种工具可以将主机名或主机类作为输入,并以图形方式向我显示对该主机名或类有影响的所有其他实体(模块,模板,文件等)?
答案 0 :(得分:2)
是的。是Rspec。
常规方法:
我意识到这可能不是您希望的答案*,但是您需要首先编写Rspec-puppet单元测试,为您的代码库提供完整的测试范围。
我已经做过不止一次了,这就是为什么我编写了可以在以下情况下提供帮助的工具的原因:create_specs。我还写了blog帖子,介绍如何使用它来帮助您。
转到您的具体问题:
是否有任何一种工具可以将主机名或主机类作为输入,并以图形方式向我显示对该主机名或类有影响的所有其他实体(模块,模板,文件等)?
当然有Puppet的内置图形逻辑,如果您有Puppet Enterprise,则有node graph。
但是说实话,单元测试路线确实是完成此任务的唯一可靠方法。
方法如下:
现在可检测“模块,模板,文件等”:
对于节点,类,模块和清单文件:
然后您可以使用这样的JQ查询查找该目录中使用的每个类以及清单中的行和文件:
▶ jq -jr '.resources[] | select(.line!=null) | .type, " ", .title, " (", .file, ":", .line, ")\n"' myclass.json
Accounts::User joed (/Users/alexharvey/git/home/puppet-test/spec/fixtures/modules/test/manifests/init.pp:3)
Group joed (/Users/alexharvey/git/home/puppet-test/spec/fixtures/modules/accounts/manifests/user.pp:207)
User joed (/Users/alexharvey/git/home/puppet-test/spec/fixtures/modules/accounts/manifests/user.pp:249)
...
对于文件源参数引用的静态文件:
可以使用JQ查询找到这些内容,
▶ jq '.resources[] | select((.type=="File") and (.parameters.source!=null)) | .parameters.source' myclass.json
"puppet:///mymodule/file"
对于模板:
关于模板,不幸的是在目录中没有明确提及它们。但是,一旦对所有节点进行了测试,就很容易检测到未使用的文件:只需删除可疑文件,运行所有测试,然后查看是否有任何故障。
对于Hiera键:
不幸的是,目前我对Hiera键还没有很好的解决方案。保留它们直到最后,然后通过删除然后再次运行测试来测试您认为未使用的测试。
总的来说,有一个很棒的博客系列here关于重构遗留代码,值得一看,但与Puppet无关。
好消息是,如果您执行上述所有操作,您将成为流程的另一端,成为一个大大改进,更加自信的开发人员。但以我的经验来看,如果您尝试找到不涉及缺少缺失测试的捷径,我认为前方将是痛苦的世界!祝你好运。
*我之所以这样假设,是因为我认为您不会问这个问题!