오랜만에 강철지그가 인사드립니다. 오늘의 주제는 CHEF의 Cookbook 입니다.

 

Cookbook 내에서 외부 파일을 가져와야 하는 경우가 있는데 (예: 각종 설치 파일 등)

먼저 생각해 볼 수 있는 것은 외부 URL 혹은 다운로드 서버로부터 파일을 가져오는 것입니다.

remote_file "#{node[:DOWNLOAD_DIR]}/#{node[:FILE_NAME]}.tar.gz" do
  source "http://#{node[:SERVER]}/#{node[:FILE_NAME]}"
  action :touch
  not_if { ::File.exist?("#{node[:DOWNLOAD_DIR]}/#{node[:FILE_NAME]}.tar.gz")}
end

"SERVER/FILE_NAME"으로부터 외부 파일을 가져와서 "DOWNLOAD_DIR/FILE_NAME.tar.gz"에 놓습니다.

 

또 다른 방법은 Cookbook 내에 아예 file 기능으로 include 시키는 것입니다.

cookbook_file "#{node[:DOWNLOAD_DIR]}/#{node[:FILE_NAME]}.tar.gz" do
  source "#{node[:HTTPD][:FILE_NAME]}.tar.gz"
  owner "#{node[:FILE_USER_NAME]}"
  group "#{node[:FILE_USER_GROUP]}"
  mode 00700
  not_if { ::File.exist?("#{node[:DOWNLOAD_DIR]}/#{node[:FILE_NAME]}.tar.gz")}
end

위는 소유자, 그룹, 파일 권한도 함께 지정하는 예입니다.

 

한편, File의 존재 여부를 확인할 때 exists?를 사용하는 경우가 있습니다만 exists?는 deprecate되었습니다. 따라서 exists?가 아닌 exist?을 사용해야 합니다.

exists?(file_name) → true or false
Deprecated method. Don’t use.