여러 프로젝트로 작업하므로 cjc의 솔루션이 작동하지 않습니다. 일반적인 구성과 사용자 정의 구성의 문제도 있습니다 (주소 등은 회사에 공통적이며 구성에는 약간의 마술이 있습니다). 마지막으로 정한 계획은 약간의 해킹이지만 사용하기 편리합니다.
global 대신 ~/.chefchef-repo 내에서 '.chef'하위 디렉토리를 사용합니다.이 디렉토리는 git에 저장되지 않습니다 (에 추가됨 .gitignore). config/knife.rbGit에 체크인되어 공유 구성이 포함 된 파일 도 있습니다. 이 스 니펫으로 시작합니다.
root_dir = File.join(File.dirname(__FILE__), '..')
%w(knife-secrets.rb knife-local.rb).each do |conf_name|
conf = File.join(root_dir, ".chef", conf_name)
Kernel::load(conf) if File.exists? conf
end
이것은 .chef/knife-local.rb사용자 정의 구성을 포함하는 파일 (기본 버전에서는 OPSCODE_USER='username'나중에 사용되는 상수이지만 나이프 구성을 포함 할 수 있음)과 .chef/knife-secrets.rb공유 비밀 (AWS 키 등)을 포함 하는 파일 을 로드합니다 .
그 아래에는 이러한 파일에 정의 된 상수를 사용하는 일반 나이프 구성이 있습니다. 예 :
client_key "#{root_dir}/.chef/#{OPSCODE_USER}.pem"
이렇게하면 회사 전체에서 나이프 구성의 표준화를 달성 할 수 있습니다. 이는 위키에서 공유되는 모든 코드 스 니펫 또는 나이프 호출이 모든 사람에게 효과적이라는 것을 의미합니다. 나이프 자체에는 혼란과 마법이 충분합니다. 구성이 다르면 상황이 더 나빠질뿐입니다. 또한 모든 사람이 사용자의 로그인 정보를 구성 하기 위해이 작은 스 니펫 을 knife ssh이용할 수 있습니다.~/.ssh/config
셰어 서버의 유효성 검사 키,에 저장된 AWS 키 knife-secrets.rb, EC2의 SSH 개인 키, 암호화 된 데이터 백 키 등 의 공유 비밀 문제도 있습니다 . 우리는 그것들이 저장소에 저장되는 것을 원하지 않으며, 실제로 안전하게 암호화되지 않은 어느 곳에서나 저장되기를 원하지 않습니다. 따라서 이러한 파일을 파일로 배포합니다.이 파일 .tar.gz은 회사의 모든 사람에게 GPG로 암호화되어 Dropbox를 통해 공유됩니다.
이 모든 것을 구성하는 것은 복잡해지고 팀의 사람들이 실제로 그 일을 사용하기를 원하므로 최종 요소가 있습니다 : 디렉토리 rake init를 만드는 작업 .chef, config/knife.rb거기에서 심볼릭 링크 , chef-secrets.tgz파일의 암호 해독 및 untars , 사용자의 개인 Opscode 플랫폼 키가 있고 .chef/knife-local.rb올바르게 있는지 확인하십시오 구성, symlinks 나이프 플러그인, 디렉토리 및 내부 파일에 대한 적절한 권한을 설정합니다. 이 작업은 이미 초기화 된 저장소에서 여러 번 실행하는 것이 안전하도록 설정되어 있습니다 (예 : 비밀 또는 나이프 플러그인 업데이트).
또한 모든 비밀을 재 포장하고 타르볼을 모든 사람에게 암호화 한 다음 보관함에 복사하여 새로운 직원을 추가하거나 비밀을 변경하는 도우미 작업도 있습니다.
여러 환경 관련 : Chef에는 environment 라는 기능이 있습니다 . 아직 사용하지는 않았지만 필요한 작업을 수행해야합니다. 또한 별도의 Hosted Chef 조직이나 Chef 서버를 두어 프로덕션 환경과 엄격하게 분리 할 수 있습니다 (개발자가 프로덕션 환경과 관련된 키를 갖는 개발자를 피하기 위해). 이 knife.rb 스 니펫 은 현재 체크 아웃 된 분기를 기반으로 다른 방식으로 나이프를 구성하는 방법을 보여줍니다.이를 사용하여 요리사 서버의 URL과 환경을 설정할 수 있습니다. 보다 완벽한 2 개 구성 워크 플로우를 제공하는 knife 플러그인이라는 knife 플러그인 도 있습니다 .
.chef환경 변수 등을 사용 하도록 폴더를 설정할 수 있습니까?