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

Как создать общий каталог в ресурсе, определенном марионеткой

Я реализую определенный ресурс в марионетке для создания ряда веб-сайтов.

Одним из шагов является создание корневого каталога документов для веб-сайта.

Моя проблема в том, что некоторые веб-сайты могут иметь общий корневой каталог документов. Когда это происходит, я получаю сообщение об ошибке:

Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Evaluation Error: Error while evaluating a Resource Statement, Evaluation Error: Error while evaluating a Resource Statement, Cannot alias File[documentroot-redirpt] to ["/var/www/vhosts/parkingyredir"] at /etc/puppetlabs/code/environments/production/modules/xxx_corp_webserver/manifests/website.pp:164; resource ["File", "/var/www/vhosts/parkingyredir"] already declared at /etc/puppetlabs/code/environments/production/modules/xxx_corp_webserver/manifests/website.pp:164 at /etc/puppetlabs/code/environments/production/modules/xxx_corp_webserver/manifests/website.pp:164:3 at /etc/puppetlabs/code/environments/production/modules/xxx_corp_webserver/manifests/init.pp:10 on node llim605

Итак, как я могу создать ресурс, который будет создавать каталог, но не будет жаловаться, если я попытаюсь создать его несколько раз?

Владелец и права доступа к корневому каталогу документов постоянны.

Извините, разобрался с ответом через несколько минут после публикации вопроса.

Если есть вероятность переопределения ресурса, просто проверьте, был ли он уже определен.

  if !defined(File[$documentroot]) {
    file { "documentroot-${title}":
      ensure => 'directory',
      path   => $documentroot,
      group  => '0',
      mode   => '0755',
      owner  => '0',
      }
    }

Марионетка документация состояния:

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

Альтернативным (и, возможно, более надежным) решением было бы использование ensure_resource функция от puppetlabs-stdlib. Он создает ресурс, только если он еще не существует, и вызывает ошибку повторяющегося объявления только в том случае, если ресурс уже существует и не имеет подходящих параметров.

ensure_resource('file', $documentroot, {
  ensure => 'directory',
  owner  => '0',
  group  => '0',
  mode   => '0755',
})