4

鉴于我不是 puppet DSL 方面的专家,而且我对 Puppet 还很陌生,我还没有设法弄清楚这一点,我有一个 puppet manifest 抵制我试图让它正常工作的尝试。

我正在尝试使用 puppetlabs posgres 模块安装 Postgres,创建默认角色,并修复 DB 以在 UTF8 上工作。

一切都运行并安装,但没有创建角色。但是,如果我再次运行配置,那么就会创建角色。我认为可能与执行顺序有关,但老实说我迷路了。

这是我在清单文件中使用的代码。

user { "user_vagrant":
  ensure => "present",
}->
exec { 'apt_update':
  command => 'apt-get update',
  path    => '/usr/bin/'
}

package { ['vim','postgresql-server-dev-9.1','libmysqlclient-dev','nodejs']:
  ensure  => 'installed',
  before  => Class['postgresql::server'],
  require => Exec['apt_update'],
}

class { 'postgresql::server':
  ip_mask_allow_all_users => '0.0.0.0/0',
  listen_addresses        => '*',
  ipv4acls                => ['local all all md5'],
  postgres_password       => 'postgres',
  require                 => User['user_vagrant'],
}

postgresql::server::role { 'vagrant':
  createdb      => true,
  login         => true,
  password_hash => postgresql_password("vagrant", "vagrant"),
  require       => Class['postgresql::server'],
} ->
exec { 'utf8_postgres':
  command => 'pg_dropcluster --stop 9.1 main ; pg_createcluster --start --locale en_US.UTF-8 9.1 main',
  unless => 'sudo -u postgres psql -t -c "\l" | grep template1 | grep -q UTF',
  path    => ['/bin', '/sbin', '/usr/bin', '/usr/sbin'],
}
4

1 回答 1

6

终于找到了解决应用顺序和 UTF8 问题的正确方法,这迫使我开始尝试“pg_dropcluster”。顺便说一句,这是一个已知问题,这里是问题网址http://projects.puppetlabs.com/issues/4695

这是我用来安装带有 UTF8 和 RVM ruby​​ 的 PostgreSQL 9.1 的整个文件。希望这可以帮助。

模块:
- puppetlabs/apt - 1.4
- puppetlabs/concat - 1.0
- puppetlabs/stdlib - 4.1.0
- puppetlabs/postgresql - 3.2
- blt04/puppet-rvm - git://github.com/blt04/puppet-rvm.git

stage { 'pre':
  before => Stage['main']
}

class pre_req {
  user { "vagrant":
    ensure => "present",
  }

  exec { 'apt-update':
    command => 'apt-get update',
    path    => '/usr/bin'
  }->
  exec { 'install_postgres':
    command => "/bin/bash -c 'LC_ALL=en_US.UTF-8; /usr/bin/apt-get -y install postgresql'",
  }
}

class { 'pre_req':
  stage => pre
}

package { ['postgresql-server-dev-9.1']:
  ensure  => 'installed',
  before  => Class['postgresql::server']
}

class { 'postgresql::globals':
  encoding => 'UTF8',
  locale   => 'en_US.UTF-8'
}->
class { 'postgresql::server':
  stage                   => main,
  locale                  => 'en_US.UTF-8',
  ip_mask_allow_all_users => '0.0.0.0/0',
  listen_addresses        => '*',
  ipv4acls                => ['local all all md5'],
  postgres_password       => 'postgres',
  require                 => User['vagrant']
}->
postgresql::server::role { 'vagrant':
  createdb      => true,
  login         => true,
  password_hash => postgresql_password("vagrant", "vagrant"),
}

class rvm_install {
  class { 'rvm': version => '1.23.10' }
  rvm::system_user { vagrant: ; }
  rvm_system_ruby {
    "ruby-2.0.0-p247":
    ensure      => "present",
    default_use => false;
  }
  rvm_gemset {
    "ruby-2.0.0-p247@plyze":
    ensure  => present,
    require => Rvm_system_ruby['ruby-2.0.0-p247'];
  }
  rvm_gem {
    "puppet":
    name         => "puppet",
    ruby_version => "ruby-2.0.0-p247",
    ensure       => latest,
    require      => Rvm_system_ruby["ruby-2.0.0-p247"];
  }
  rvm_gem {
    "bundler":
    name         => "bundler",
    ruby_version => "ruby-2.0.0-p247",
    ensure       => latest,
    require      => Rvm_system_ruby["ruby-2.0.0-p247"];
  }
}

class { 'rvm_install':
  require => User['vagrant'],
}
于 2013-11-10T02:51:43.650 回答