बावर्ची: यदि पहले से मौजूद नहीं है तो एक खाके के लिए एक निर्देशिका बनाएँ


17

यदि मेरे पास एक टेम्पलेट बनाया जा रहा है, तो मैं यह कैसे सुनिश्चित कर सकता हूं कि निर्देशिका मौजूद है? उदाहरण के लिए:

template "#{node[:app][:deploy_to]}/#{node[:app][:name]}/shared/config/database.yml" do
  source 'database.yml.erb'
  owner node[:user][:username]
  group node[:user][:username]
  mode 0644
  variables({
    :environment => node[:app][:environment],
    :adapter => node[:database][:adapter],
    :database => node[:database][:name],
    :username => node[:database][:username],
    :password => node[:database][:password],
    :host => node[:database][:host]
  })
end

यह तब तक विफल रहता है जब तक की प्रतिलिपि बनाने के /var/www/example/shared/configलिए मौजूद नहीं है database.yml। मैं सोच रहा हूँ कि कैसे कठपुतली आपको निर्देशिका सुनिश्चित करने के लिए अनुमति देता है।

जवाबों:


19

टेम्पलेट बनाने से पहले निर्देशिका बनाने के लिए निर्देशिका संसाधन का उपयोग करें । चाल recursiveविशेषता को भी निर्दिष्ट करना है अन्यथा कार्रवाई विफल हो जाएगी जब तक कि निर्देशिका के सभी भागों लेकिन अंतिम पहले से मौजूद न हों।

config_dir = "#{node[:app][:deploy_to]}/#{node[:app][:name]}/shared/config"

directory config_dir do
  owner node[:user][:username]
  group node[:user][:username]
  recursive true
end

template "#{config_dir}/database.yml" do
  source "database.yml.erb"
  ...
end

ध्यान दें कि ownerऔर groupजब यह बनाई जा रही निर्देशिका संसाधन का केवल पत्ती निर्देशिका के लिए लागू कर रहे हैं। बाकी निर्देशिका की अनुमतियाँ अपरिभाषित हैं, लेकिन संभवत: root.root होगी और जो भी आपका umask है।


इसलिए मैं recursiveविकल्प को नापसंद करता हूं ;-)
स्टीफनकिग

हाँ मैं भी। यह सिर्फ बहुत ही शेफ-वाई महसूस नहीं करता है या तो प्रत्येक स्तर को निर्दिष्ट करने के लिए या यह सब चूक तक छोड़ देता है।
टिम पॉटर

निर्देशिका संसाधन के लिए लिंक टूटी हुई नई कड़ी यह है docs.chef.io/resource_directory.html
अपरिवर्तनीय ईंट

4

मैं directoryसंसाधन से पहले संसाधन का उपयोग करने के अलावा किसी अन्य तरीके से अवगत नहीं हूं template:

directory "#{node[:app][:deploy_to]}/#{node[:app][:name]}/shared/config/
  owner node[:user][:username]
  group node[:user][:username]
end
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.