了解厨师食谱片段

Understanding chef cookbook snippet

我无法解释 Chef cookbook 中的以下代码:

systemd_unit '<service_name>' do      
   action %i[enable start]
end

我从 systemd_unit resource 了解到 systemd_unit。但是,这里的动作是如何确定的呢?我正在尝试将这本食谱转换为 ansible,并想先了解食谱中发生的事情。

此外,作为菜谱的新手,我也想确认一下:

include_recipe '<cookbook_name>'
提供

那么我的理解是,它包括给定食谱中的 default.rb 并且不包括该食谱中的其他食谱。如果正确,请告诉我。

%i[start,enable]是一个数组,服务先启动后启用自动启动。

include cookbook 仅包含默认配方,对于特定配方使用 include 'cookbook::recipe'

此致

除了@Psyreactor 的回答外,还提供了扩展的回答。

Chef 配方中的操作由 Ruby symbols 表示,如 :create:start 等。当要对同一资源执行多个操作时,它们作为数组传递。

所以不要像这样为同一个服务写两个资源声明:

# Enable the service
systemd_unit '<service_name>' do 
  action :enable
end

# Start the service
systemd_unit '<service_name>' do 
  action :start
end

可以写成一个:

# Enable and start the service
systemd_unit '<service_name>' do 
  action [ :enable, :start ]
end

注意: %i 是一种省略使用 : 字符并创建符号数组的方法。 %i(enable, start) 等同于 [ :enable, :start ].

Chef“动作”在 Ansible 中被称为“状态”。因此,对于 Ansible 中的类似服务,您可以这样做:

systemd:
  name: '<service_name>'
  enabled: yes
  state: 'started'

it includes default.rb from the given cookbook and other recipes within that cookbook are not included.

没错。但是,该食谱中的其他食谱 未包含在 中 运行 取决于 default.rb