오랜만에 강철지그가 인사드립니다. 오늘의 주제는 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.