【问题标题】:Initialising a postgresql database via a setup script in a VM using puppet使用 puppet 通过虚拟机中的设置脚本初始化 postgresql 数据库
【发布时间】:2016-11-22 01:06:28
【问题描述】:

我想运行以下设置脚本来配置一个通过虚拟机部署的 postgresql 数据库,通过 vagrant 使用 puppet 进行配置:

#!/bin/bash -e

sudo su - postgres
createdb testdb

psql -s tm351test -c "create user test password 'test';GRANT ALL PRIVILEGES ON DATABASE testdb TO test;"

touch /root/postgresql.done

我的 vagrant 配置采用以下形式:

package {
  [
    'postgresql',
    'postgresql-client'
  ]: ensure => latest;
}

file {
  '/root/postgresql.setup':
    source => 'puppet:///modules/infinite_interns/root/postgresql.setup',
    owner  => root,
    group  => root,
    mode   => '0744';
}

#TO DO - how do we guarantee the postgresql server is running and tools available?
exec {
  'setup-postgresql':
    cwd     => '/root',
    command => '/root/postgresql.setup',
    creates => '/root/postgresql.done';
}

service {
  'postgresql':
    ensure => running,
    enable => true;
}

Package['postgresql'] -> Service['postgresql']

在运行配置脚本之前,如何保证 postgresql 服务器已安装并运行,并且命令行工具可用?

我是 Puppet 的新手 - 如果创建的文件 postgresql.done 存在,Exec() 不运行吗?

我怀疑psql 命令也可能期望确认“返回”来执行命令 - 我该怎么做?

【问题讨论】:

    标签: postgresql vagrant puppet


    【解决方案1】:

    有官方postgresql module可以轻松安装:

    puppet module install puppetlabs-postgresql
    

    或将以下内容添加到您的Puppetfile

    mod 'puppetlabs-postgresql'
    

    配置可能如下所示:

      class { 'postgresql::globals':
        encoding => 'UTF-8',
        locale   => 'en_US.UTF-8',
        version  => '9.6',
      }->
      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           => '*',
        version                    => '9.6',
      }
    
      postgresql::server::db { 'testdb':
        user     => 'test',
        password => postgresql_password('test', 'testpassword'),
      }
    
      postgresql::server::pg_hba_rule { 'allow connection from ...':
        description => "Open up PostgreSQL for access from test domain",
        type        => 'host',
        database    => 'testdb',
        user        => 'test',
        address     => '.testdomain.com',
        auth_method => 'md5',
      }
    

    【讨论】:

      【解决方案2】:

      最好的办法是使用 postgres 模块 https://forge.puppetlabs.com/puppetlabs/postgresql

      【讨论】:

      • 好的 - 现在是凌晨 3 点,我不知道如何使用它/包含它。假设我从以下位置进行配置:class myBoxes::box::pgtest { ..my bits..} 并且我想要一个带有用户/密码 test/test 的数据库名称 testdb。我在哪里使用什么(我的 puppetfile 中有 mod 'puppetlabs/postgresql')
      猜你喜欢
      • 2019-05-24
      • 2018-07-25
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      相关资源
      最近更新 更多