Chef - 角色



Chef 中的角色是将节点逻辑分组的一种方法。典型的案例是为 Web 服务器、数据库服务器等设置角色。可以为所有节点设置自定义运行列表,并在角色中覆盖属性值。

创建角色

vipin@laptop:~/chef-repo $ subl roles/web_servers.rb 
name "web_servers" 
description "This role contains nodes, which act as web servers" 
run_list "recipe[ntp]" 
default_attributes 'ntp' => { 
   'ntpdate' => { 
      'disable' => true 
   } 
}

创建角色后,需要将其上传到 Chef 服务器。

将角色上传到 Chef 服务器

vipin@laptop:~/chef-repo $ knife role from file web_servers.rb 

现在,需要将角色分配给名为 server 的节点。

将角色分配给节点

vipin@laptop:~/chef-repo $ knife node edit server 
"run_list": [ 
   "role[web_servers]" 
] 
Saving updated run_list on node server 

运行 Chef-Client

user@server:~$ sudo chef-client 
...TRUNCATED OUTPUT... 
[2013-07-25T13:28:24+00:00] INFO: Run List is [role[web_servers]] 
[2013-07-25T13:28:24+00:00] INFO: Run List expands to [ntp] 
...TRUNCATED OUTPUT... 

工作原理

  • 在 Chef 代码库的 roles 文件夹内,使用 Ruby 文件定义角色。

  • 角色包含名称和描述属性。

  • 角色包含特定于角色的运行列表和特定于角色的属性设置。

  • 运行列表中具有角色的每个节点都将把角色的运行列表提取到自身中。

  • 角色运行列表中的所有菜谱都将在节点上执行。

  • 将使用 knife role from file 命令将角色上传到 Chef 服务器。

  • 角色将添加到节点运行列表。

  • 在运行列表中具有角色的节点上运行 Chef 客户端将执行角色中列出的所有菜谱。

广告