在Vagrant solo-provisioner上使用chef.json安装apt包

时间:2014-09-04 16:17:29

标签: vagrant chef

我想使用Vagrants Chef solo provisioner安装几个任意的APT包。

chef.json似乎允许你执行厨师命令,但我不清楚如何做到这一点。类似的东西:

chef.json = {
  apt: {
    package: {'libssl-dev': {action: 'install'}}
  }

2 个答案:

答案 0 :(得分:3)

Chef使用recipes定义resources通过主厨客户在nodes上执行的内容。

  • 配方基本上是做什么的定义(脚本)
  • 资源是您正在配置的特定元素(fileservicepackage等)
  • 节点是运行chef-client的机器

您为json设置的chef-solo定义了attributes,它们就像您的厨师可以用来决定做什么的变量。

所以你有一个属性的哈希值供Chef使用,但是你需要一个 recipe 来配置基于该哈希的资源节点上执行

在您的情况下,您需要配置package resource

package "name" do
  some_attribute "value"
  action :action
end

包资源支持许多不同的包后端,包括apt,因此您不必担心差异(包名称除外)。

要从哈希中安装包,您可以创建如下配方:

node[:apt][:package].each do |pkg,pkg_data|
    package pkg do
      action pkg_data[:action].to_sym
    end
end

然后将个别食谱打包成cookbooks,这是类似食谱的逻辑分组。通常,食谱会用于一个软件,比如httpdmysql

正如Tensibia所提到的那样,请阅读Vagrant Chef-Solo docco,了解您的食谱/食谱从哪里开始运行。

答案 1 :(得分:1)

chef.json不执行或定义命令。 它定义了可供配方使用的节点的属性。

我会重新阅读THISTHIS

一些json内容是由vagrant生成的,比如在vagrantfile中使用chef.add_recipe关键字定义runlist属性。

对于您的用例,您应该有一个食谱,其食谱解析节点['apt']并使用deb_package资源。