빠른 참조

Chef 구성 관리 및 자동화 치트시트

Chef 퀵 레퍼런스: knife CLI, chef-solo, 레시피 DSL 리소스, 패키지 설치, 원격 파일 다운로드 및 조건부 가드(only_if/not_if).

· 게시일

Chef Chef는 Ruby와 Erlang으로 작성된 인프라 자동화 및 구성 관리(IaC) 프레임워크입니다.

설치 및 독립 실행 (chef-solo)

공식 Omnitruck 스크립트를 사용하여 대상 노드에 Chef 클라이언트 설치:

# Chef 클라이언트 설치
curl -L https://omnitruck.chef.io/install.sh | sudo bash

# 설치 확인
chef-solo -v

독립형 쿡북 실행:

chef-solo -c solo.rb -j node.json

Knife CLI 명령어

# Supermarket 레지스트리 검색
knife supermarket search mysql

# 쿡북 아카이브 다운로드
knife supermarket download nginx

# SSH를 통해 원격 노드 부트스트랩 구성
knife bootstrap 192.168.1.50 -x root -P 'password' -N web01

핵심 레시피 DSL 리소스

패키지 및 서비스

package 'nginx' do
  action :install
end

service 'nginx' do
  action [:enable, :start]
  supports status: true, restart: true, reload: true
end

원격 파일 다운로드

remote_file '/usr/local/src/node.tar.gz' do
  source 'https://nodejs.org/dist/v18.0.0/node-v18.0.0.tar.gz'
  checksum 'sha256checksumhere...'
  mode '0644'
  action :create_if_missing
end

쉘 명령어 실행

execute 'compile_app' do
  command './configure && make && make install'
  cwd '/usr/local/src/app'
  environment 'PATH' => "/usr/local/bin:#{ENV['PATH']}"
  creates '/usr/local/bin/app' # 가드: 바이너리가 존재하지 않을 때만 실행
end

조건부 가드 (only_if 및 not_if)

execute 'migrate_database' do
  command 'rails db:migrate'
  cwd '/var/www/app/current'
  only_if { File.exist?('/var/www/app/current/Rakefile') }
  not_if  'pg_isready -h localhost'
end

관련 주제