Role – 노드를 역활별로 그루핑 해서 관리하고 싶을 때

By | 2013/10/21

Node Object

chef solo로 관리하는 서버가 늘면, Node Object를 정의하는 JSON파일 수가 서버수만큼 늘게 되는데, Node Object에 정의한 run_list에 실행할 레시피를 일일이 JSON파일에 적어주는게 귀찮아진다.

예를 들어 같은 레시피를 적용할 5개의 노드가 있는 경우 새로운 레시피를 추가하고 싶은경우 5번을 복사 붙이기를 하는건 DRY법칙에 어긋나고 귀찮기도 하다. 그래서 run_list와 Attribute를 노드의 역활별로 그루핑 할 수 있는 Role을 사용하면 된다.

Chef solo의 경우 Role은 roles디렉토리의 아래에 Role별로 파일을 만들고, 그안에 Rolo에 필요한 내용을 JSON으로 적는다.

웹서버용 노드의 Role을 rolos/webserver.json으로 작성해보자.

json
{
"name":"webserver",
"default_attributes": {},
"override_attributes": {},
"json_class":"Chef::Role",
"description":"",
"chef_type":"role",
"run_list":[
"recipe[yum::epel]",
"recipe[nginx]",
"recipe[sysstat]"
]
}

배포하려는 서버의 Node Object에는 아래와 같이 적으면 됨

json
{
"run_list":[
"role[webserver]"
]
}

여러개 섞어서 적는것도 가능

“`json
{
“run_list”:[
“recipe[nginx]”,
“role[webserver]”,
“role[db]”
]

}
“`

Role에 어트리뷰트를 정의하는 것도 가능

json
default_attributes "apache2" => {
"listen_ports" => ["80", "443"]
}