Puppet 如何检查文件夹中是否有任何内容
我想做的是在复制文件夹中的内容之前检查文件夹是否有任何内容,因为如果您试图复制空文件夹的内容,puppet会抛出错误。这是我尝试过的,但不起作用:( params::script\u base\u dir将给出脚本位置的路径。尝试以下方法: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
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'],
}