0

我正在尝试使用 puppet 配置 EC2 实例。在此过程中,我从 puppetlabs 下载了puppetlabs-postgresql模块。由于我对 puppet 还很陌生,我不想通过在位于/etc/puppet/manifests/site.pp的site.pp 文件中创建类来管理我的数据库。相反,我想在/etc/puppet/modules/database中有一个模块调用数据库。到目前为止,我所做的是在/etc/puppet/modules/database中创建一个init.pp 文件。以下是我的init.pp文件的内容:

class database {
    # resources
    postgresql::globals{'globals':
        version             => '9.3',
        manage_package_repo => true,
        encoding            => 'UTF8',
        locale              => 'it_IT.utf8',

    }

    postgresql::server{'server':
        ensure           => 'present',
        listen_addresses => '*',
        manage_firewall  => true,
    }

    postgresql::server::contrib{'contrib':
        package_ensure => 'present',
    }
}

然后在我的/etc/puppet/manifests/site.pp文件中,我包含了如下数据库类

node default {
    include localusers
    include database
}

但是我不断收到错误消息:

   Error: Puppet::Parser::AST::Resource failed with error ArgumentError: Invalid resource type postgresql::globals at /etc/puppet.manifests/init.pp:12

请问在我自己的模块中使用postgresql类和资源并在模块中创建数据库的正确方法是什么?

4

1 回答 1

2

您走在正确的轨道上,但是您使用 postgresql 模块的方式存在一些问题。您收到Invalid resource type错误的原因是您尝试将其postgresql::globals用作定义的类型,而它实际上是一个类。您使用的其他两个类也有同样的问题。尝试这个...

class database {
    # set global defaults before creating server
    class { 'postgresql::globals':
        version             => '9.3',
        manage_package_repo => true,
        encoding            => 'UTF8',
        locale              => 'it_IT.utf8',
    }->
    class { 'postgresql::server':
        listen_addresses => '*',
        manage_firewall  => true,
    }

    # install the postgresql contrib package
    class { 'postgresql::server::contrib':
        package_ensure => 'present',
    }

    # create database with user and default permissions
    postgresql::server::db { 'my_awesome_db':
        user     => 'my_db_user',
        password => 'puppetRocks',
    }
}

模块文档的参考部分,有类和资源的细分(又名定义的类型)。我使用的postgresql::server::db类型是一次创建数据库、用户和权限的最简单方法。每种类型都有不同的类型,以提供更细粒度的控制。

于 2016-01-02T03:29:47.233 回答