Puppet 如何检查文件夹中是否有任何内容

Puppet 如何检查文件夹中是否有任何内容,puppet,cp,Puppet,Cp,我想做的是在复制文件夹中的内容之前检查文件夹是否有任何内容,因为如果您试图复制空文件夹的内容,puppet会抛出错误。这是我尝试过的,但不起作用:( params::script\u base\u dir将给出脚本位置的路径。尝试以下方法: package { 'rsync': ensure => 'installed' } $from = "${params::script_base_dir}/libs/patches/" $to = "${params::deployment_t

我想做的是在复制文件夹中的内容之前检查文件夹是否有任何内容,因为如果您试图复制空文件夹的内容,puppet会抛出错误。这是我尝试过的,但不起作用:(

params::script\u base\u dir将给出脚本位置的路径。

尝试以下方法:

package { 'rsync': ensure => 'installed' }

$from = "${params::script_base_dir}/libs/patches/"
$to   = "${params::deployment_target}/$setup/repository/patches/"

file { "$from/.sync_marker": ensure => file }

exec { "Copying_patches_$setupnode-$number":
  path    => '/usr/bin:/bin', 
  command => "rsync -r $from $to",
  require => [
    File["${params::deployment_target}/$setupnode"],
    Package['rsync'],
    File["$from/.sync_marker"],
  ],
  creates => "$to/.sync_marker",
}
一些评论:

  • 我缩短了你的
    路径
    -不需要java或
    /sbin中的东西
  • 通知
    notify
    资源通常是不明智的-这些资源总是生成消息
  • 目标上的尾随斜杠对
    rsync
    不重要,但源上的斜杠却重要
  • 创建源目录中的文件只是为了构建一个简单的
    creates
    子句
  • 创建
    参数确保命令只运行一次,而不是在每次运行期间运行

    如果您需要等待源目录被填充,则必须使用
    onlyif
    。请尝试以下条件:

    onlyif => "find $from | wc -l | grep -v '^2\$'",
    

    这两行输出将表示目录本身和标记文件。
    $
    符号被转义,以便Puppet将其包含在命令字符串中。

    花了一点时间来查找它,这可能也会帮助其他人

    unless  => "find /directory/path/ -mindepth 1 | read",
    
    如此想要

      exec { "Install wordpress in ${docroot}":
        command => "git clone https://github.com/WordPress/WordPress.git ${docroot}",
        unless  => "find ${docroot} -mindepth 1 | read", # only cloen if directory is empty
        cwd     => $docroot,
        path    => ['/bin', '/usr/bin', '/usr/sbin'],
      }
    

    您是否反对使用
    rsync
    而不是
    cp
    ?这会使这项工作变得微不足道(
    rsync
    可以被告知复制整个文件夹或文件夹的所有内容,如果没有,则无需抱怨)。任何linux发行版都支持rsync吗?如果你想知道的话,它不是coreutils的一部分。它通常驻留在自己的包中。Puppet当然会乐意为你安装它。执行条件可以简化空目录的测试,例如
    onlyif=>'test-z“$(ls-A/target/dir)”
      exec { "Install wordpress in ${docroot}":
        command => "git clone https://github.com/WordPress/WordPress.git ${docroot}",
        unless  => "find ${docroot} -mindepth 1 | read", # only cloen if directory is empty
        cwd     => $docroot,
        path    => ['/bin', '/usr/bin', '/usr/sbin'],
      }