helloworld 라는 이름의 cookbook을 만들고 cookbook을 이용해서 /tmp 디렉토리에 helloworld.txt 파일을 만들어 본다.
cookbook을 만드는 방법은 chef server or chef workstation에서 knife를 이용해 만들 수 있다.
1. cookbook 생성
다음과 같은 명령을 이용해 cookbook을 생성 할 수 있다.
# knife cookbook create HelloWorld
** Creating cookbook HelloWorld
** Creating README for cookbook: HelloWorld
** Creating metadata for cookbook: HelloWorld
/var/chef/cookbooks 디렉터리 아래 HelloWorld 디렉토리가 만들어진다.
만약, cookbook이 저장 될 디렉토리를 변경하려면 server.rb 파일에 cookbook_path 값을 변경해 주면 된다.
2. 속성(attributes) 정의
HelloWorld/attributes/ 디렉토리로 이동해 HelloWorld.rb 문서를 만들고 그 안에 cookbook에서 사용할 속성들을 정의한다.
여기서 속성은 변수를 정의하는 것과 같이 사용한다.
default['message']="HelloWorld"
key - value 형식을 갖는다.
3. recipes 수정
HelloWorld/recipes/default.rb를 수정한다.
template "/tmp/HelloWorld.txt" do
source "HelloWorld.txt.erb"
variables :message => node['message']
action :create
end
/tmp/HelloWorld.txt 라는 파일을 HelloWorld.txt.erb 라는 템플릿을 이용해서 만들겠다는 의미이며, 위에서 정의한 속성을 사용했다.
4. 템플릿 파일 생성
HelloWorld/template/default/HelloWorld.txt.erb 파일을 만들고 다음과 같이 입력한다.
Message is : <%= @message %>
5. cookbook 업로드
cookbook 디렉토리로 이동해서 다음과 같이 업로드 한다.
# knife cookbook upload -a -o .
Uploading HelloWorld [0.0.1]
upload complete
-a : 모든 cookbook
-o : cookbook 경로
6. chef-client의 cookbook 사용 설정
# knife node run_list add chef-client.com2us.com 'recipe[HelloWorld]'
run_list: recipe[HelloWorld]
# knife node show chef-client.com2us.com -r
run_list: recipe[HelloWorld]
chef-client.com2us.com node에게 HelloWorld라는 recipe를 사용할 수 있도록 설정
-r : recipe 출력
7. chef-client에서 chef-client 실행
# chef-client
[Thu, 10 Apr 2014 13:31:43 +0900] INFO: *** Chef 0.10.6 ***
[Thu, 10 Apr 2014 13:31:44 +0900] INFO: Run List is [recipe[HelloWorld]]
[Thu, 10 Apr 2014 13:31:44 +0900] INFO: Run List expands to [HelloWorld]
[Thu, 10 Apr 2014 13:31:44 +0900] INFO: Starting Chef Run for chef-client.com2us.com
[Thu, 10 Apr 2014 13:31:44 +0900] INFO: Running start handlers
[Thu, 10 Apr 2014 13:31:44 +0900] INFO: Start handlers complete.
[Thu, 10 Apr 2014 13:31:44 +0900] INFO: Loading cookbooks [HelloWorld]
[Thu, 10 Apr 2014 13:31:44 +0900] INFO: Storing updated cookbooks/HelloWorld/recipes/default.rb in the cache.
[Thu, 10 Apr 2014 13:31:44 +0900] INFO: Storing updated cookbooks/HelloWorld/attributes/HelloWorld.rb in the cache.
[Thu, 10 Apr 2014 13:31:44 +0900] INFO: Storing updated cookbooks/HelloWorld/README.md in the cache.
[Thu, 10 Apr 2014 13:31:44 +0900] INFO: Storing updated cookbooks/HelloWorld/metadata.rb in the cache.
[Thu, 10 Apr 2014 13:31:44 +0900] INFO: Processing template[/tmp/HelloWorld.txt] action create (HelloWorld::default line 9)
[Thu, 10 Apr 2014 13:31:44 +0900] INFO: template[/tmp/HelloWorld.txt] updated content
[Thu, 10 Apr 2014 13:31:44 +0900] INFO: Chef Run complete in 0.457015 seconds
[Thu, 10 Apr 2014 13:31:44 +0900] INFO: Running report handlers
[Thu, 10 Apr 2014 13:31:44 +0900] INFO: Report handlers complete
8. 설정 업데이트 확인
# cat /tmp/HelloWorld.txt
Message is : HelloWorld
HelloWorld.txt 파일이 만들어진 것을 확인할 수 있다.
'OSS(Open Source Software) > chef' 카테고리의 다른 글
knife sub commands (0) | 2014.04.10 |
---|---|
knife sub commands - client (0) | 2014.04.10 |
chef client 설치 (0) | 2014.04.10 |
chef workstation 설정 (0) | 2014.04.10 |
knife 사용 (0) | 2014.04.07 |