data bags를 이용하면 전역적으로 사용할 값을 JSON 형태로 저장할 수 있다.
값을 저장해 놓고 사용한다는 점에서 Role이나 attributes와 비슷하다고 생각할 수 있지만, 이들과 연관성이 없다. chef server는 데이터 백 정보를 색인해 놓고 필요할 때 검색해서 사용한다.
# knife data bag create system_users
# knife data bag from file system_users users.json
recipes를 만든다. HelloWorld recipes를 수정하기로 했다.
# 아이템을 읽어온다.
map = data_bag_item('system_users', 'users')
users = map['user']
puts map['user']['www']['name']
users.each_key do |uinfo |
name = map['user'][uinfo]['name']
user name do
gid map['user'][uinfo]['gid']
shell map['user'][uinfo]['shell']
home map['user'][uinfo]['home']
comment map['user'][uinfo]['comment']
password map['user'][uinfo]['password']
end
end
chef clinet node에서 chef-client를 실행하면, 유저 정보가 추가된 걸 확인할 수 있다.
# cat /etc/passwd
www:x:1001:100:apache web server user:/home/www:/usr/bin/bash
admin:x:1002:100:System admin:/home/admin:/usr/bin/bash
collectd:x:1003:100:System infomation collecte for zabbix monitering:/home/collectd:/usr/bin/bash
# cat /etc/shadow
recipes 에서 데이터백 관리
때때로 recipes에서 직접 데이터백을 관리(생성/삭제/추가/수정)를 할 수 있다. 단 주의해야 할 점이 있다.
Databag은 시스템 전역적인 자원으로 관리자(admin)만 접근할 수 있도록 하는게 일반적이다. 따라서 chef-client가 레시피를 실행하는 동안에 데이터백을 생성하는 것은 그리 바람직하지 않다. 보통은 attribute를 이용해서 관리하는걸 권장한다.
하지만 이러저러한 이유로 데이터백을 생성해야 한다면, 먼저 아래의 사항을 점검해야 한다.
레시피를 수행하는 node client가 관리자 권한을 가지고 있어야 한다.
node를 등록하면 node의 등록이름으로 client가 생성된다. 예를 들어 my.joinc.co.kr 이라는 노드를 등록했다면 아래와 같을 것이다.
# knife client list
my.joinc.co.kr
chef-validator
chef-webui
chef-admin
my.joinc.co.kr clinet의 정보를 살펴보자.
# knife client show aws-mgmt.joinc.co.kr
_rev: 1-46d999389ade094b072d9fad64c3fbab
admin: false
chef_type: client
json_class: Chef::ApiClient
name: my.joinc.co.kr
public_key: -----BEGIN RSA PUBLIC KEY-----
.............
.............
.............
-----END RSA PUBLIC KEY-----
admin 값이 false로 돼 있는데, 이 상태로는 databag에 대한 제어가 불가능하다. knife를 이용해서 client의 admin 값을 true로 수정한다.
Contents
data bag
data bag 구성
data bag 생성
data bag 로딩
data bag 만들기
recipes에 data bag 사용하기
복잡한 예제
recipes 에서 데이터백 관리
팁
히스토리
Recent Posts
Archive Posts
Tags