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

Puppet - скопируйте несколько файлов в каталог

Я хочу скопировать несколько файлов из кукольный:// URL-адреса в каталог на агенте. Не уверен, что я здесь делаю что-то не так, но похоже, что марионетке это не нравится

  file { '/etc/nginx/conf.d':
    path         => '/etc/nginx/conf.d',
    ensure       => directory,
    require      => File['/etc/nginx/nginx.conf'],
    source       => ['puppet:///modules/nginx/app1.conf',
                     'puppet:///modules/nginx/app2.conf'],
    sourceselect => all,
  }

Вот что я получаю при попытке запустить агент

Ошибка: не удалось переименовать временный файл /etc/nginx/conf.d.puppettmp_9046 в /etc/nginx/conf.d: это каталог

Если я немного изменил ситуацию, создав каталоги в модуле и указав на них ресурс, он работает.

  mkdir module/files/app1 module/files/app2
  mv module/files/app1.conf module/files/app1
  mv module/files/app2.conf module/files/app2

новый ресурс

  file { '/etc/nginx/conf.d':
    path         => '/etc/nginx/conf.d',
    ensure       => directory,
    require      => File['/etc/nginx/nginx.conf'],
    source       => ['puppet:///modules/nginx/app1',
                     'puppet:///modules/nginx/app2'],
    sourceselect => all,
    recurse      => true,
  }

Просто кажется немного глупым создавать каталоги для копирования списка отдельных файлов.

редактировать

Я попытался добавить косую черту в конце дорожка, но бросил все, думая, что это решение. Причина в том, что у меня был nginx объявление класса закомментировано в определении узла. Пытаясь это сделать, я получаю ту же ошибку сверху.

  file { '/etc/nginx/conf.d/':
    path         => '/etc/nginx/conf.d/',
    ensure       => directory,
    require      => File['/etc/nginx/nginx.conf'],
    source       => ['puppet:///modules/nginx/app1.conf',          
                     'puppet:///modules/nginx/app2.conf'],
    sourceselect => all,
  }

отсутствует конечный / в пункте назначения.

Прежде всего, о нескольких вещах:

Почему вы обеспечиваете каталог и имеете контент (исходный параметр)? Сделайте два ресурса: один для каталога, а другой - для двух файлов в каталоге.

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

Таким образом, вы можете создавать отдельные определения, поскольку вы определяете только два файла, которые хотите поместить в каталог. Другой - создать каталог в модуле / files и поместить туда файлы. Затем, когда вы делаете определение источника, вы указываете каталог, а не файлы.

Надеюсь это поможет. Казнь вы уже делаете сами.

что не так с

file { '/etc/nginx/conf.d':
    path         => '/etc/nginx/conf.d',
    ensure       => directory,
    require      => File['/etc/nginx/nginx.conf'],
    source       => 'puppet:///modules/nginx',
    recurse      => true,

  }

? это решение поддерживает синхронизацию целых каталогов