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

时间:2015-02-04 21:29:21

标签: ruby puppet

我正在研究一个模块,将tar文件部署到客户端的目录中。因此,每当tar文件发生更改时,它都会部署到一个带有日期时间戳的新目录,例如' 20150204130312' 。它一直工作到这一点。我正在为模块中的目录生成日期时间戳。

每当模块运行时,每次都会生成日期和时间,但只有tar文件更新时才会创建目录。在此之后,我想创建一个指向提取tar的文件夹的链接。我希望仅在提取tar文件时才创建该链接。但是,即使没有提取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来创建链接。我不知道这是否可能。

1 个答案:

答案 0 :(得分:2)

而不是require使用subscribe

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,并确保仅在File["/tmp/${targz}"]资源更改时执行exec。

希望这有帮助