2014-04-10 133 views
2

通過在虛擬機中安裝腳本正在初始化PostgreSQL數據庫我想運行下列設置腳本使用木偶來配置就是BEING通過虛擬機部署的PostgreSQL數據庫,通過無業遊民供應:使用傀儡

#!/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 

我流浪漢的配置採取以下形式:

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存在?

我懷疑psql命令可能還需要一個確認的「返回」來執行命令 - 我該怎麼做?

回答

0

有一個官方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', 
    } 
0

最好的辦法是使用Postgres的模塊https://forge.puppetlabs.com/puppetlabs/postgresql

+0

好的 - 所以它是凌晨3點,我無法弄清楚如何使用它/包括它。假設我是從:class myBoxes :: box :: pgtest {..my bits ..}供應,並且我想要一個帶有用戶/密碼test/test的db名稱testdb。我使用什麼和在哪裏(我的傀儡文件中有mod'puppetlabs/postgresql') – psychemedia