Miscellaneous

CHEF의 data bag 기능 이용하기

aappsroot·2014년 3월 12일·조회 2,758

Chef의 data bag 기능을 이용해 공통 설정값을 관리하는 방법입니다. data bag은 Chef Server에 JSON 형태의 데이터를 저장해 두고, 여러 cookbook이나 recipe에서 같은 값을 참조할 때 유용합니다.

1. 기본 사용법

1) data bag 생성

다음 형식으로 data bag을 생성합니다.

knife data bag create [data bag 이름]

# knife data bag create test
Created data_bag[test]

2) data bag 삭제

생성한 data bag은 다음 명령으로 삭제할 수 있습니다.

knife data bag delete [data bag 이름]

# knife data bag delete test
Do you really want to delete test? (Y/N) y
Deleted data_bag[test]

만일 존재하지 않는 data bag을 삭제하려고 하면 다음과 같은 오류가 발생합니다.

# knife data bag delete test1
Do you really want to delete test1? (Y/N) y
ERROR: The object you are looking for could not be found
Response: Cannot load data bag test1

3) data bag item 올리기

JSON 파일 형태의 data bag item을 업로드합니다. 아래 예시는 dev.json 파일을 test data bag의 dev item으로 등록하는 경우입니다.

# knife data bag from file test dev.json
Updated data_bag_item[test::dev]

업로드할 JSON 파일에는 일반적으로 id 값이 포함되어 있어야 하며, 이 id가 data bag item의 이름으로 사용됩니다.

2. data bag을 이용해 cookbook 공통 속성 제어하기

여러 cookbook에서 공통적으로 사용되는 repository 정보를 data bag으로 관리하려고 합니다. 아래 예시는 recipe에 들어가는 코드입니다. 일반적으로 data_bag_item 헬퍼는 recipe에서 사용하며, attributes 파일에서는 그대로 사용할 수 없기 때문입니다.

dev = data_bag_item('test','dev')
node.default['REPO_SERVER'] = dev['repo_server']
puts "repository server for this recipe ==> #{node['REPO_SERVER']}"

위 코드는 test data bag의 dev item을 읽어 repo_server 값을 가져온 뒤, 해당 값을 노드의 기본 속성인 node.default['REPO_SERVER']에 설정합니다. 이후 같은 recipe 안에서는 node['REPO_SERVER']로 값을 참조할 수 있습니다.

적용 전에는 dev.jsonrepo_server 키가 실제로 존재하는지 확인하는 것이 좋습니다. 키 이름이 다르거나 data bag item이 업로드되지 않은 경우 recipe 실행 중 값을 읽지 못해 오류가 발생할 수 있습니다.

댓글 0

로그인 후 댓글을 남길 수 있습니다.

아직 댓글이 없습니다.