요리사 솔로를 불러오는 관용적 방법? http://www.example.com/chef-solo.tar.gz 그러나 그것은 길다. 내가 생각할

Chef-Solo를 불러오는 관용적 방법은 무엇입니까? 대부분의 사이트는 다음을 수행합니다.

chef-solo -c ~/solo.rb -j ~/node.json -r http://www.example.com/chef-solo.tar.gz

그러나 그것은 길다. 내가 생각할 수있는 몇 가지 짧은 방법이 있습니다.

  1. 갈퀴 작업 ( rake chef-solo).
  2. 작은 쉘 스크립트 ( run-chef-solo).
  3. 별칭 (과 같은 이름을 무시할 수 있음 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


답변