Назад | Перейти на главную страницу

Puppet убедитесь, что файл находится в каталоге ИЛИ по ссылке. Или обеспечить каталог только в случае его отсутствия?

2 сервера CentOS, к которым я хотел бы применить один и тот же манифест. Манифест создает пользователя с пользовательским расположением домашнего каталога в /var/username

Проблема на одном из серверов /var/username имеет быть символической ссылкой на /data/username. Так просто бегать ensure => 'directory', попытается перезаписать символическую ссылку.

И я не могу использовать ensure => 'present' потому что это создает файл по умолчанию, если он не существует. Таким образом, для новых серверов, которые этот манифест применяется к пустому файлу, будет создан, когда мне действительно нужно, чтобы он был каталогом.

  1. Есть способ сделать ensure каталог или ссылка на сайт? Так что, если он отсутствует, создается каталог. А если это ссылка, то просто оставить в покое? По умолчанию Puppet file type создает файл при выполнении ensure => 'present'.

  2. Или способ сделать if absent ensure directory else leave it alone?

Что о exec, делая простой bash if /var/username not exist then mkdir Такие вещи?
Противно, но это сработает.

Идеальным решением будет, вероятно, с самого начала избегать особых случаев. Наличие нескольких вариантов конфигурации в одном манифесте кажется немного неправильным. Так что в конце концов я либо:

Но для целей этого вопроса я хотел бы знать, есть ли в Puppet какие-либо параметры / синтаксис, о которых я в настоящее время не знаю.

Вы всегда можете использовать $hostname или $certname для обработки исключения:

file { "/var/username":
mode    => 440,
ensure  => $hostname ? {
  'oddballserver' => link,
  default  => directory,
  }, 
target => $hostname ? {
  'oddballserver' => '/data/username',
}

Это непроверено, но на основе логики, которую я использую для множества вещей в наших манифестах. YMMV.