找不到声明的类postgresql :: server Puppet

时间:2016-08-04 19:54:55

标签: postgresql puppet

我正在尝试使用Puppet在vagrant box上安装postgresql9.4的实例。到目前为止,我并不喜欢我的木偶时间和网站上的文档。到目前为止,我尝试从不同的教程和Postgresql Puppet Forge官方文档中进行修补。

我做了什么:

  1. puppet module install puppetlabs-postgresql

  2. 我已创建了/etc/puppet/modules/postgresql/manifests/init.pp文件

  3. 我已将此代码放在init.pp文件中:

     class { 'postgresql::server':
       ip_mask_deny_postgres_user => '0.0.0.0/32',
       ip_mask_allow_all_users    => '0.0.0.0/0',
       listen_addresses           => '*',
       ipv4acls                   => ['hostssl all johndoe 192.168.0.0/24 cert'],
       postgres_password          => 'TPSrep0rt!',
     }
    
  4. 我收到的错误是:

        Error: Puppet::Parser::AST::Resource failed with error ArgumentError: Could not find declared class postgresql::server at /etc/puppet/modules/postgresql/manifests/init.pp:7 on node vagrant-ubuntu-trusty-64.bbf.local
    Wrapped exception:
    Could not find declared class postgresql::server
    Error: Puppet::Parser::AST::Resource failed with error ArgumentError: Could not find declared class postgresql::server at /etc/puppet/modules/postgresql/manifests/init.pp:7 on node vagrant-ubuntu-trusty-64.bbf.local
    

    我对Puppet感到非常沮丧,我正在努力跟随'部署Rails'和官方锻造网站让这个工作但无济于事。

    我对木偶的沮丧是该网站没有指定放置任何东西的位置。从教程中,我已将我的木偶代码放在init.pp中,但postgresql有repo.pp, server.pp等等,并且它不会告诉您在哪里放置木偶代码。有人可以帮助我吗?

1 个答案:

答案 0 :(得分:2)

  

到目前为止,我并不喜欢我的木偶时间和网站上的文档。到目前为止,我尝试从不同的教程和Postgresql Puppet Forge官方文档中进行修补。

我无法与您一直关注的未指定教程交谈,但Puppet自己的Postgresql模块的文档假设您已经熟悉Puppet语言和操作模式。我自己,即使在商业版本发布之前,我一直认为Puppet's documentation非常好。

您可以考虑采用官方VM-based tutorial,但最终我建议您阅读(或至少略读)Language Reference。如果您计划编写自己的模块,并且大多数用户都这样做,那么您还应该了解Type Reference。即使您不打算编写自己的模块,您也将使用模块,因此浏览the section on module fundamentals非常有用。还有更多可能有用的东西,但这应该足以让你有一个良好的开端。

  

我对木偶的沮丧是该网站没有指定放置任何东西的位置。

" Basics"语言参考的章节解决了第一部分:

  

Puppet总是开始使用单个清单(可以分成几个部分)进行编译,称为“站点清单”或“主清单”。有关此特殊文件/目录的详细信息,请参阅the reference page on the main manifest。 / p>

链接页面有一些细节,主要是因为在主/代理设置中有相当多的灵活性和几个选项。但是,如果您正在使用puppet apply,那么主清单就是您在puppet命令行上指定的任何文件。您提供的类声明应该进入主清单,可能在节点块内,或者进入另一个类的定义,在某个模块中,将直接或间接在您的主要清单中声明。正如Perl爱好者倾向于说,"有不止一种方法可以做到这一点。"

我强调类声明和类定义之间的区别。前者粗略地说,#34;命名类应该应用于目标节点",而后者描述将类应用于节点意味着什么。您可以将这些类似于一方面的函数调用和另一方面的函数体。由于您尝试使用来自第三方模块的类,后者应该是模块的一部分。假设你的Puppet安装在/etc/puppet,整个/etc/puppet/modules/postgresql目录属于模块实现,你不应该在那里放任何东西。在这种情况下,模块工具应该在postgresql::server中安装了类/etc/puppet/modules/postgresql/manifests/server.pp的定义。

我无法向您提供有关您应该做什么的具体信息,因为您没有提供一些必要的详细信息,尤其是您是否正在运行代理或使用puppet apply。 Puppet 3和Puppet 4之间也存在一些可能相关的差异(例如,默认安装位置)。尽管如此,我希望这让你指出了正确的方向。