谢谢你看这个问题。任何帮助都是非常感谢的。我正在使用游民和厨师提供一个带有GUI的虚拟机。
目标:下载IntelliJ IDE,然后安装它,以便在我登录时对我的用户可用。
cookbook cookbook 'idea', '~> 0.4.0'实现了下载,但是用户必须手动完成客户上的安装。
我有困难,我的定制食谱,以完成配置与厨师。在编写过程中,如果在配置机器之后将其添加到运行列表中,则菜谱就会完成,但由于尚未安装文件而在初始运行中失败。
我尝试在相关块中和整个菜谱中使用only_if方法,但无法使其工作。我还搞砸了subscribe方法,但也无法让它起作用。
我相信这有一个简单的解决方案,但谷歌搜索和试错并没有让我更接近。我希望能为实现这一目标提供任何帮助。谢谢!
当前配方
# Configure IntelliJ Idea.
file '/opt/idea/idea.desktop' do
content '[Desktop Entry]
Name=IntelliJ IDEA
Type=Application
Exec=idea
Terminal=false
Icon=idea
Comment=Integrated Development Environment
NoDisplay=false
Categories=Development;IDE;
Name[en]=IntelliJ IDEA'
mode '644'
owner 'root'
group 'root'
end
bash 'install idea desktop' do
code <<-EOH
cd /opt/idea
sudo desktop-file-install idea.desktop
EOH
end
file '/usr/share/pixmaps/idea.png' do
owner 'root'
group 'root'
mode '0644'
content ::File.open('/opt/idea/bin/idea.png').read
action :create
end
link '/usr/local/bin/idea' do
to '/opt/idea/bin/idea.sh'
link_type :symbolic
end失败了:包装了整个脚本
# Configure IntelliJ Idea.
execute 'configure idea' do
only_if { ::File.exist?("/opt/idea") }
continues...
end在块中使用only_if
file '/usr/share/pixmaps/idea.png' do
action :create
only_if { ::File.exist?('/opt/idea/bin/idea.png') }
owner 'root'
group 'root'
mode '0644'
content ::File.open('/opt/idea/bin/idea.png').read
end
link '/usr/local/bin/idea' do
to '/opt/idea/bin/idea.sh'
only_if { ::File.exist?('/opt/idea/bin/idea.sh') }
link_type :symbolic
end发布于 2016-06-21 18:09:04
您可能想要的是一个惰性的评估属性:
content lazy { ::File.open('/opt/idea/bin/idea.png').read }这将延迟文件的读取,直到聚合时间,而不是编译时间。
https://stackoverflow.com/questions/37948778
复制相似问题