我们目前使用puppet 3.8.7来configuration大量的AWS EC2实例。
由于这些机器的根卷体积很小,所以我们将某些目录从/ var链接到/ mnt。
这导致像这样的部分显示谜语:
group { 'postgres': ensure => present, system => true, } user { 'postgres': ensure => present, comment => 'PostgreSQL administrator', gid => 'postgres', home => '/var/lib/postgresql', require => Group['postgres'], } file { '/mnt/postgresql': ensure => directory, owner => 'postgres', group => 'postgres', mode => '0755', require => User['postgres'], } file { '/var/lib/postgresql': ensure => link, target => '/mnt/postgresql', require => File['/mnt/postgresql'], before => Class['dbserver'], }
这是
过于冗长
和
如果隐式依赖(如postgresql-client)在评估file
语句之前创build目录,则容易出错。
所以我想知道,其他人怎么解决呢?
有没有更好的方法来确保
但
傀儡文件反映了你的系统configuration,因此有点丑陋。 我build议以下解决scheme之一:
重组您的系统configuration可能会有所帮助。 不要将设备挂载到/ mnt / postgres,而是挂载到/ var / lib / postgresql,或者使用/var
分区。
如果你唯一的问题是在创build符号链接之前安装postgres,这很简单:在postgres安装之前强制创build符号链接。
package { 'postgresql': ensure => installed, require => File['/var/lib/postgresql'], }
如果你想修复你的问题已经存在的系统,我build议实施一个修复exec
语句,类似这样:
exec { '/usr/local/bin/fix_postgres_installation.sh': user => 'root, onlyif => 'test -d /var/lib/postgresql', before => File['/var/lib/postgresql'], }
脚本可能会closurespostgres,将数据同步到/mnt/postgres
,删除/var/lib/postgres
。
如果您只是想强制删除文件资源,可以使用force
选项,如Puppet文档中所述
更改您的应用程序的数据目录。 大多数应用程序都允 对于Postgres,settign data_directory()
应该对你有所帮助,另外请参阅PostgreSQL文档 。