递归地在puppet中制作目录树而不进行清除

Kyl*_*cot 14 puppet

我想创建目录结构,/var/www/apps/example/current/public如果它不存在使用puppet.如果它已经存在,我不想清除目录的内容.我该怎么做呢?以下是我到目前为止:

file { "/var/www/apps/example/current/public":
  owner => 'deploy',
  group => 'users',
  ensure => "directory",
  purge => false,
  recurse => true
}
Run Code Online (Sandbox Code Playgroud)

这给了我

 Cannot create /var/www/apps/example/current/public; parent directory /var/www/apps/example/current does not exist
Run Code Online (Sandbox Code Playgroud)

Fel*_*ank 19

该recurse参数不允许您创建父目录.它用于强制属性值,例如owner,mode在内容目录和子目录递归等.

file { '/var/www':
    owner   => 'www-data',
    recurse => true,
}
Run Code Online (Sandbox Code Playgroud)

事实上,Puppet目前无法自动创建所有父目录.您应该将所有相关目录添加为资源.

file { [ '/var/www/apps',
         '/var/www/apps/example',
         '/var/www/apps/example/current',
         '/var/www/apps/example/current/public', ]:
           ensure => directory,
           ...
}
Run Code Online (Sandbox Code Playgroud)

现有内容将保持不受干扰.无需传递purge参数.


Dom*_*omQ 10

  exec { "Create ${mydir}":
    creates => $mydir,
    command => "mkdir -p ${mydir}",
    path => $::path
  } -> file { $mydir : }
Run Code Online (Sandbox Code Playgroud)

最后一行是这样的,其他资源(例如,内部创建的文件$mydir)可以依赖于File[$mydir]好像可以使用普通的旧file {}块创建它,它确实应该这样做.