在以下代码的creates
指令中,指定的值包含一个(实际上是多个)通配符。
execute "Install Vagrant plugin: #{plugin}" do
environment ({ 'HOME' => ::Dir.home(user), 'USER' => user })
command "vagrant plugin install #{plugin}"
creates "/home/#{user}/.vagrant.d/gems/*/gems/vagrant-berkshelf-*"
end
我希望没有一种厨师想要的方法来处理事先只知道目录 pattern 而不是实际完整路径的情况。执行的Chef文档没有明确说明creates
是否会模式匹配,但经过测试,我相信它不会,也不是模式匹配。
在这种情况下,以上是否适合Chef :: Mixin :: ShellOut使用?或者是否会有另一种更有厨师意图的方法?
如果是前者,我期待使用stackoverflow(1,2)中的示例来确定目录是否存在与类似creates
指令的值的模式匹配上面并使用该返回值来设置是否运行有问题的执行块。
非常感谢任何提示,提示或建议!
答案 0 :(得分:1)
您将使用not_if
或only_if
保护条款。 creates
属性只是not_if { ::File.exist?(the_path) }
的帮手。在这种情况下,您可能想要的是not_if "vagrant plugin list | grep #{plugin}"
或略微更清洁(IMO)not_if { shell_out!('vagrant plugin list').stdout.include?(plugin) }
。