分析Puppet更改并手动应用

时间:2017-04-24 12:41:03

标签: json puppet

我们有两个环境,A和B,用于同一组应用程序。

环境A的变化(主要是对存储应用程序配置的JSON文件的修改)完全由Puppet管理。部分这些更改需要通过手动编辑JSON文件应用于没有Puppet运行的环境B。

我们不能简单地将这些配置文件从A复制到B,因为在A上,文件也被其他不能在B上运行的Puppet模块修改。

这里的问题基本上是提取由A中的特定Puppet运行所做的JSON文件的更改,并将它们应用到B.运行简单的diff将无效,因为JSON中的对象是无序的。因此我想在对比之前对对象进行排序(相关问题:How to compare two JSON objects with the same elements in a different order equal?)。还有其他更简单的选择吗?

1 个答案:

答案 0 :(得分:2)

当Puppet运行时,会编译一个名为目录的JSON文档。对于JSON文件,这些文件将作为文本保存在目录中。 (是的,在JSON目录文档中编码的JSON文档。)

在没有看到你的代码的情况下,我无法确切地说出你需要做什么,但总的来说:

首先,编写一个Puppet类,其中仅包含要在B上应用的类和资源,减去“其他不能在B 上运行的Puppet模块”。

其次,使用命令行中的puppet master --compile使用此修改后的代码在A上编译目录。或者,您可以在工作站/笔记本电脑上的隔离环境中编译目录,也许使用Rspec-puppet。你可以谷歌如何做到这一点,我写了一个可能有用的相关blog post

(但是你这样做,当然要记住你需要通过设置事实来输入Hiera数据,以便遍历环境A的正确Hiera文件。)

我假设您现在有一个已编译的目录。所以现在,最后,您需要从中获取JSON配置文件。有很多方法可以做到这一点,从编写一些相当简单的Ruby代码到谷歌搜索工具,这些工具可以帮助你实现Puppet本身的内部结构。

但我想我可能只是在vim中打开文件,进行全局搜索并替换以用实际换行符替换\n序列,然后删除其他所有内容。

希望有所帮助。