2016-06-21 36 views
0

感謝您看看這個問題。任何幫助表示讚賞。 我使用流浪漢和廚師爲GUI配置虛擬機。如何在安裝配方運行後使用廚師和流浪者配置軟件

目標:下載的IntelliJ IDE並安裝它,這樣它是提供給我的用戶,當我登錄

菜譜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 
+0

謝謝@coderanger。您的解決方案按預期工作。我編輯了需要延遲到收斂時間和機器按預期供應的兩個模塊。 '......內容懶惰{:: File.open('/ opt/idea/bin/idea.png')。read}'和'... to lazy {'/opt/idea/bin/idea.sh '}' – jraviotta

回答

0

你可能想要的是一個懶惰的評估屬性:

content lazy { ::File.open('/opt/idea/bin/idea.png').read } 

這將延遲讀取文件,直到收斂時間,而不是編譯時間。