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

Ресурс файла марионетки: ошибка «Родительский каталог не существует»

При создании каталога с использованием файлового ресурса появляется следующая ошибка

Error: Cannot create /data/tomcat/${dirsname}/conf; parent directory /data/tomcat/${dirsname} does not exist
Error: /Stage[main]/App/File[/data/tomcat/${dirsname}/conf]/ensure: change from absent to directory failed: Cannot create /data/tomcat/${dirsname}/conf; parent directory /data/tomcat/${dirsname} does not exist`

Error: Cannot create /data/tomcat/$dirsname/config; parent directory /data/tomcat/$dirsname does not exist
Error: /Stage[main]/App/File[/data/tomcat/$dirsname/config]/ensure: change from absent to directory failed: Cannot create /data/tomcat/$dirsname/config; parent directory /data/tomcat/$dirsname does not exist`

Но технически каталоги создаются, как видно из puppet вывод команды

Notice: /Stage[main]/App/File[/data/tomcat/$dirsname/conf/]/ensure: created
Notice: /Stage[main]/App/File[/data/tomcat/jacplus8/conf/context.xml]/ensure: defined content as '{md5}ba798c2de6dd554035c05352891a0d07'
Notice: /Stage[main]/App/File[/data/tomcat/jacplus8/conf/server.xml]/ensure: defined content as '{md5}6298e53557ead6855cef9bcbb082a074'`

Notice: /Stage[main]/App/File[/data/tomcat/$dirsname/config/]/ensure: created
Notice: /Stage[main]/App/File[/data/tomcat/jacplus8/config/runtime.settings]/ensure: defined content as '{md5}2e2596f0f9107c8cfc783da3d5004dae'`

Я проверил структуру каталогов, каталоги доступны, но не знаю, почему отображаются сообщения об ошибках. Мои правила манифестов заключаются в следующем

class app {
$dirsname=myapp8

file { 'directory':
     path => "/data/tomcat/${dirsname}/",
     ensure => "directory",
     owner => "root",
     group => "root",
    }

 file { '/data/tomcat/${dirsname}/conf':
    ensure => "directory",
    owner => "root",
    group => "root",
    require => File['directory'],
  }

 file { '/data/tomcat/$dirsname/config':
    ensure => "directory",
    owner => "root",
    group => "root",
    require => File['directory'],
   } 

  file { '/data/tomcat/$dirsname/conf/':
    path => "/data/tomcat/$dirsname/conf/",
    ensure => "present",
    recurse => "true",
    source => "puppet:///modules/conf/"
   }

  file { '/data/tomcat/$dirsname/config/':
    path => "/data/tomcat/$dirsname/config/",
    ensure => "present",
    recurse => "true",
    source => "puppet:///modules/config/"
   }
  }
file { '/data/tomcat/$dirsname/conf':

Замените одинарные кавычки двойными, тогда переменная будет интерполирована. Сделайте это для всех строк в одинарных кавычках и переменных (их четыре).

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

Notice: /Stage[main]/App/File[/data/tomcat/$dirsname/conf/]/ensure: created