当执行块创建“创建”时,厨师的适当方法是确保能力的.价值不完全知道



在以下代码的creates指令中,指定的值包含A(实际上,多个)通配符。

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

我希望没有一种厨师预期的方法来处理一种情况,即事先知道目录模式,而不是实际的完整路径。执行的厨师文档不会明确说明creates是否会匹配,但是在测试后,我相信它不是并且不打算进行模式匹配。

是这种情况,上述适合厨师:: mixin :: ShellOut吗?还是还有另一种厨师预期的方法?

如果前者,我期望使用Stackoverflow(1,2)中的示例来确定是否存在类似于上面的creates指令的图案的目录,并使用该返回值来设置该返回值是否运行执行有问题的块。

任何提示,提示或建议都非常感谢!

  • 信息学家

您将使用not_ifonly_if Guard子句。creates属性只是not_if { ::File.exist?(the_path) }的助手。在这种情况下,您可能想要的是not_if "vagrant plugin list | grep #{plugin}"或稍微清洁的not_if { shell_out!('vagrant plugin list').stdout.include?(plugin) }

最新更新