Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

Attribute

chef에 등록된 node들은 IP 주소, hostname, kernel module, 언어 버전, 네트워크, 운영체제 정보등과 같은 attribute들을 가지고 있다. chef server는 node의 attribute를 읽어서 그에 맞는 설정 관리를 할 수 있다. 또한 다양한 방법으로 새로운 attributes를 등록해서 사용할 수 있다.

cookbook attributes

Cookbook attribute 파일은 cookbook의 attributes 디렉토리 밑에 위치한다. Node들은 chef code에서 attribute 값들을 사용할 수 있다.

예제
# cat cookbooks/apache2/attribuutes/default.rb
default["apache"]["dir"]          = "/etc/apache2"
default["apache"]["listen_ports"] = [ "80","443" ]

node객체가 암시돼 있는데, 직접 명시해도 동일한 결과를 얻을 수 있다.
node.default["apache"]["dir"]          = "/etc/apache2"
node.default["apache"]["listen_ports"] = [ "80","443" ]

Node attributes

chef node가 등록되면, node의 ohai가 실행되서 attribute 테이블을 만든다. 여기에는 node의 호스트 이름, 노드 이름, recipe 그리고 다양한 시스템 정보들이 들어 있다. knife로 node attribute 정보를 확인하거나 편집할 수 있다.

knife node edit <fqdn>

예제
# knife node edit client01.yundream.com
{
  "name": "client01.yundream.com",
  "chef_environment": "_default",
  "run_list": [
    "recipe[apache]"
  ],
  "normal": {
    "myname": "yundream",
    "tags": [

    ]
  }
}
사용자는 "run_list"를 추가하거나 "normal"에 다른 attribute를 추가할 수 있다. 나는 "myname"이라는 attribute를 추가했다.

recipe에서는 다음과 같이 사용할 수 있다.
#
# Cookbook Name:: apache
# Recipe:: default
#
# Copyright 2012, YOUR_COMPANY_NAME
#
# All rights reserved - Do Not Redistribute
#

puts node['apache']['dir']            # cookbook attribute
puts node['apache']['listen_ports']   # cookbook attribute
puts node.normal['myname']            # 위에서 추가한 attribute

-a 옵션을 이용해서 모든 attribute를 확인할 수도 있다.
# knife node edit client01.yundream.com -a
{
  "chef_environment": "_default",
  "automatic": {
    "macaddress": "08:00:27:42:4F:E9",
    "hostname": "localhost",
    "block_device": {
      "ram9": {
        "removable": "0",
        "size": "32768"
      },
      "ram8": {
        "removable": "0",
        "size": "32768"
      },
      "ram7": {
        "removable": "0",
        "size": "32768"
      },
      "ram6": {
        "removable": "0",
        "size": "32768"
      },
      "ram5": {
        "removable": "0",
        "size": "32768"
      },
      "ram4": {
        "removable": "0",
        "size": "32768"
...

JSON attributes

JSON 파일로 부터 attribute를 가져올 수도 있다. 이 attribute들은 normal 영역에 저장된다.
chef-client --help
[...]
    -j JSON_ATTRIBS                  Load attributes from a JSON file or URL
        --json-attributes

예를들어 apache 속성을 위해서 아래와 같은 파일을 만들면 된다.
{ "apache": { "listen_ports": ["81", "8080"] } }

Automatic Attributes

자동으로 생성되는 attributes로 Ohai에 의해서 만들어진다. 이렇게 만들어진 attributes는 수정할 수 없다.

Ohai는 chef-client에서 실행되며, 운영체제의 정보들을 수집한다. ohai에서 수집하는 정보들의 주요 카테고리다.
ohai | grep -R "provides" -h lib/ohai/plugins|sed 's/^\s*//g'|sed "s/\\\"/\'/g"|sort|uniq|grep ^provides
provides 'block_device'
provides 'chef'
provides 'cloud'
provides 'command'
provides 'command/ps'
provides 'cpu'
provides 'dmi'
provides 'ec2'
provides 'etc', 'current_user'
provides 'eucalyptus'
provides 'filesystem'
provides 'fqdn', 'domain'
provides 'fqdn', 'hostname'
provides 'hostname', 'fqdn'
provides 'kernel'
provides 'kernel/os'
provides 'keys'
provides 'keys/ssh'
provides 'languages'
provides 'languages/c'
provides 'languages/erlang'
provides 'languages/groovy'
provides 'languages/java'
provides 'languages/lua'
provides 'languages/mono'
provides 'languages/perl'
provides 'languages/php'
provides 'languages/python'
provides 'languages/ruby'
provides 'lsb'
provides 'memory'
provides 'network'
provides 'network', 'counters/network'
provides 'network_ip_scope', 'privateaddress'
provides 'network/listeners'
provides 'ohai'
provides 'ohai_time'
provides 'os', 'os_version'
provides 'platform', 'platform_version'
provides 'platform', 'platform_version', 'platform_build'
provides 'rackspace'
provides 'system_profile'
provides 'uptime', 'idletime', 'uptime_seconds', 'idletime_seconds'
provides 'uptime', 'uptime_seconds'
provides 'virtualization'

Recipe에서 사용 예제
puts node[:idletime]        
puts node[:domain]            # 도메인 이름
puts node[:platform]          # 운영체제
puts node[:platform_version]  # 운영체제 버전
puts node['uptime_seconds']   # 시스템 업타임
puts node['filesystem']['/dev/sda1']['mount']  # /dev/sda1 의 마운트 정보
puts node.name                # client node name

node의 attribute 정보는 edit 명령으로 확인할 수 있다.
# knife node edit client01.yundream.com -a

히스토리

  • 작성일 :