在没有主服务器的情况下将节点的目录编译为JSON?

时间:2016-06-01 20:58:28

标签: puppet puppet-3

我希望通过比较实际节点目录的差异来改善我们组织的Puppet工作生命周期。我们遇到this project,它编译节点的目录并为它们创建差异,但它似乎需要一个在线主数据。

我需要能够做这个工具所做的事情,虽然没有主人 - 我只是想编译一个确定性的JSON或YAML blob,它描述了Puppet为给定管理的所有资源节点并给出一组事实。

如果没有在线主人,我有办法做到这一点吗?

2 个答案:

答案 0 :(得分:2)

我写了两篇博文,展示了两种编译JSON目录的方法,而不需要Puppet Master。

如果您已经设置了Rspec-puppet,那么第一个解决方案非常简单。只需在其中一个块中添加以下File.write语句:

require 'spec_helper'

describe 'myclass' do
  it {
    File.write(
      'myclass.json',
      PSON.pretty_generate(catalogue)
    )
    #is_expected.to compile.with_all_deps
  }
end

博文here

第二种方法更复杂,您应该参考我的第二篇博文Compiling a puppet catalog – on a laptop

最后,我还写了一篇关于Using the catalog-diff tool to diff two catalogs while refactoring的帖子,这也可能是有意义的。

答案 1 :(得分:0)

找了很久。 最后Vagrant结合Puppet给我带来了解决方案。

您唯一需要的是安装 puppet。 首先,您必须设置事实。之后,您可以编译您的目录。

FACTER_server_role='webstack' \
... \
FACTER_hostname='hostname' \
FACTER_fqdn='hostnamne.fqdn' \
puppet catalog compile hostnamne.fqdn \
--modulepath "./modules" \
--hiera_config "./hiera.yaml" \
--environmentpath ./environments/ \
--environment production

如果您想获得干净的 json 文件,请将输出通过管道传输到 sed 并将输出发送到文件。

 | sed -n '1!p' > $file