Chef-Solo를 불러오는 관용적 방법은 무엇입니까? 대부분의 사이트는 다음을 수행합니다.
chef-solo -c ~/solo.rb -j ~/node.json -r http://www.example.com/chef-solo.tar.gz
그러나 그것은 길다. 내가 생각할 수있는 몇 가지 짧은 방법이 있습니다.
- 갈퀴 작업 (
rake chef-solo
). - 작은 쉘 스크립트 (
run-chef-solo
). - 별칭 (과 같은 이름을 무시할 수 있음
chef-solo
)
이것을하는 관용적 방법은 무엇입니까? 다른 요리사 사용자는 요리사를 어떻게 불러 오나요?
답변
기본적으로에서 chef-solo
구성을 읽습니다 /etc/chef/solo.rb
. 명령 행 매개 변수는이 파일에서 설정할 수있는 구성 값에 해당합니다. 이것은 mixlib-config 라이브러리를 사용하여 수행됩니다.
option :config_file,
:short => "-c CONFIG",
:long => "--config CONFIG",
:default => "/etc/chef/solo.rb",
:description => "The configuration file to use"
option :json_attribs,
:short => "-j JSON_ATTRIBS",
:long => "--json-attributes JSON_ATTRIBS",
:description => "Load attributes from a JSON file or URL",
:proc => nil
option :recipe_url,
:short => "-r RECIPE_URL",
:long => "--recipe-url RECIPE_URL",
:description => "Pull down a remote gzipped tarball of recipes and untar it to the cookbook ca
che.",
:proc => nil
‘옵션’은 구성 파일 값입니다.
실제 설정 파일 /etc/chef/solo.rb
은 다음과 같습니다 :
file_cache_path "/tmp/chef-solo"
cookbook_path "/tmp/chef-solo/cookbooks"
role_path "/tmp/chef-solo/roles"
json_attribs "/tmp/chef-solo/node.json"
recipe_url "http://www.example.com/chef-solo.tar.gz"
또한 JSON 파일은 원격 URL 일 수도 있습니다.
json_attribs "http://www.example.com/node.json"
Ohai를 구성 파일 내 라이브러리로 사용하여 플랫폼 또는 기타 속성을 감지하여 사용할 JSON 파일을 지정할 수 있습니다.
require 'rubygems'
require 'ohai'
o = Ohai::System.new
o.all_plugins
file_cache_path "/tmp/chef-solo"
cookbook_path "/tmp/chef-solo/cookbooks"
role_path "/tmp/chef-solo/roles"
json_attribs "/tmp/chef-solo/#{o[:platform]}.json"
recipe_url "http://www.example.com/chef-solo.tar.gz"
그리고 예를 들어 “플랫폼”특정 JSON 파일을 갖게됩니다. 또는 당신은 사용할 수 있습니다 o[:hostname]
, o[:domain]
또는 o[:fqdn]
호스트 이름, 도메인 또는 FQDN을 기반으로 JSON 파일을 사용 할 수 있습니다. 그러나 이런 종류의 동적 구성을 지원하기 위해 서버 스캐 폴딩을 시작하면 Chef Server :-)를 실행하는 것을 볼 수 있습니다.
답변
@jtimberman은 이미 훌륭한 답변을 작성했습니다. 여기 요리사 솔로를 불러오는 개인적인 방법이 있습니다. 이것은 기본 사항을 작동 시키므로 /etc/chef/node.json
다른 답변에 설명 된 옵션 중 일부에 속성을 추가 하고 탐색 해야 할 수도 있습니다 .
# cat > /etc/chef/solo.rb << EOF
cookbook_path "/var/chef-solo/cookbooks"
json_attribs "/etc/chef/node.json"
EOF
# cat > /etc/chef/node.json << EOF
{
"run_list": ["recipe[foo]", "recipe[bar]"]
}
EOF
요리 책을 /var/chef-solo/cookbooks
웹 서버에 복사 하거나 tar.gz 로 복사 하여 recipe_url
매개 변수를 사용하십시오 . chef-solo
노드에서 실행 하면 노드를 호출하기 만하면됩니다.
가능한 경우 solo.rb
추가 인수를 기억하지 않고 요리사 솔로를 실행할 수 있는 것처럼 모든 것을 시도하고 유지 합니다.
답변
chef-solo는 이제 chef-client -z 로컬 모드를 위해 더 이상 사용되지 않습니다.
https://github.com/chef/chef-rfc/blob/master/rfc031-replace-solo-with-local-mode.md