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 客户端
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 存储库的角色文件夹内的 Ruby 文件中定义角色。
角色由名称和描述属性组成。
角色由特定于角色的运行列表和特定于角色的属性设置组成。
在其运行列表中具有角色的每个节点都将拥有该角色的运行列表。
角色运行列表中的所有配方都将在节点上执行。
角色将使用文件命令中的knife 角色上传到Chef服务器。
该角色将被添加到节点运行列表中。
在运行列表中具有该角色的节点上运行 Chef 客户端将执行该角色中列出的所有配方。