2013-06-21 94 views
1

我是Chef和Ruby的新手,並試圖瞭解如何從特定的Linux/Windows用戶讀取環境變量並使用它來放置文件。在廚師中讀取用戶特定的環境變量

我想要做的是更新我們的客戶端和數據庫安裝的Oracle tnsnames.ora文件。

這些文件可能位於Windows中的C:\oracleC:\Program Files\oracle或Linux中的/u01/app/oracle/product/11.2/network/admin/u01/app/oracle/producdt/10.2/network/admin

我不能100%確定我會知道確切的位置,而不會讀取配方中的環境變量並使用它。

我讀的是關於#{ENV['HOME']},但我不能完全弄清楚,如果這是我想使用或不使用的語法的類型。

+0

使用ENV ['HOME']'而不是'#{ENV ['HOME']}''。第二個僅適用於將它嵌入到字符串中的情況。您的代碼必須以該用戶的身份運行才能讀取其環境變量。 –

+1

感謝您的反饋意見。當我想到這個時,我正在考慮'recipes/default.rb'和'template'代碼塊。 '模板 「#{ENV [ 'ORACLE_HOME']} /網絡/ admin/tnsnames.ora中」 做 \t源 「tnsnames.ora.erb」 \t所有者 「預言」 組 「dba」 \t模式「0644 「 結束」# 這似乎不正確但仍然... –

回答

0

Ruby has a native method for doing this。我懷疑

template "#{Dir.home("oracle")}/network/admin/tnsnames.ora" do 
    source "tnsnames.ora.erb" 
    [...] 
end 

會做大約你想要的。這隻適用於除了主目錄位置之外的操作系統之間沒有區別的情況。