В настоящее время мы используем puppet 3.8.7 для предоставления большого количества экземпляров 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
заявление оценивается.
Так что мне интересно, как другие люди справляются с этим?
Есть ли лучший способ убедиться, что
но
Файлы марионеток отражают конфигурацию вашей системы и поэтому выглядят немного некрасиво. Предлагаю одно из следующих решений:
Реструктуризация конфигурации вашей системы может немного помочь. Не монтируйте свое устройство в / mnt / postgres, а в / var / lib / postgresql, или, возможно, используйте /var
раздел.
Если ваша единственная проблема заключается в установке postgres до создания символической ссылки, это просто: принудительно создать символическую ссылку перед установкой postgres.
package { 'postgresql':
ensure => installed,
require => File['/var/lib/postgresql'],
}
Если вы хотите исправить системы, в которых проблема уже не устранена, я рекомендую выполнить исправление exec
заявление, подобное этому:
exec { '/usr/local/bin/fix_postgres_installation.sh':
user => 'root,
onlyif => 'test -d /var/lib/postgresql',
before => File['/var/lib/postgresql'],
}
Сценарий может завершить работу postgres, синхронизировать данные с /mnt/postgres
, Удалить /var/lib/postgres
.
Если вы просто хотите принудительно удалить директор для файлового ресурса, вы можете использовать force
вариант, как описано в Документация по марионетке
Измените каталоги данных ваших приложений. Большинство приложений позволяют это. Для Postgres настройка data_directory()
должен помочь вам, также см. Документация PostgreSQL.