Ruby Puppet仅在Exec之后创建带有时间戳的链接

Ruby Puppet仅在Exec之后创建带有时间戳的链接,ruby,puppet,Ruby,Puppet,我正在开发一个模块,将tar文件部署到客户端的目录中。因此,每当tar文件发生更改时,它就会部署到一个带有日期戳的新目录中,如“20150204130312”。到目前为止,一切都很顺利。我正在为模块中的目录生成那个日期时间戳 每当模块运行时,每次都会生成日期和时间,但只有在tar文件更新时才创建目录,这很好。在此之后,我想创建一个链接,指向提取tar的文件夹。我希望只有在提取tar文件时才能创建该链接。但是现在,每当puppet运行时,因为日期和时间戳每次都会更改,即使没有提取tar,链接也会更

我正在开发一个模块,将tar文件部署到客户端的目录中。因此,每当tar文件发生更改时,它就会部署到一个带有日期戳的新目录中,如“20150204130312”。到目前为止,一切都很顺利。我正在为模块中的目录生成那个日期时间戳

每当模块运行时,每次都会生成日期和时间,但只有在tar文件更新时才创建目录,这很好。在此之后,我想创建一个链接,指向提取tar的文件夹。我希望只有在提取tar文件时才能创建该链接。但是现在,每当puppet运行时,因为日期和时间戳每次都会更改,即使没有提取tar,链接也会更新

我尝试在exec中使用notify,并在文件资源上使用require,但不起作用。 $dir使用在模块上生成的时间戳

$rel_dir= "/data/agrod/releases";
$dir= generate('/bin/date', '+%Y%m%d%H%M%S')
exec { "untar $targz":
    command => "/bin/mkdir -p $rel_dir/$dir/; /bin/tar xzvf /tmp/$targz -C $rel_dir/$dir",
    refreshonly => true,
    require => File["/tmp/$targz"],
   notify => File["/data/agrod/current"],    }

file { "/data/agrod/current":
 ensure => 'link',
 target => "/data/agrod/$dir",
 require => Exec["untar $targz"], 
}

我应该如何创建依赖项,以便只有在exec中提取tar文件时才能创建链接。我不想使用exec创建链接。我不知道这是否可行。

使用
订阅
而不是
要求

exec { "untar ${targz}":
  command => "/bin/mkdir -p $rel_dir/$dir/; /bin/tar xzvf /tmp/$targz -C $rel_dir/$dir",
  refreshonly => true,
  subscribe => File["/tmp/${targz}"],
  notify => File["/data/agrod/current"]
}
subscribe
参数将自动假定
require
,并将确保仅当
文件[“/tmp/${targz}”]
资源更改时才执行exec

希望这有帮助