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

在Vagrant solo provisioner上使用chef.json安装apt包,vagrant,chef-infra,Vagrant,Chef Infra,我想使用Vagrants Chef solo provisioner安装几个任意的APT软件包 json似乎允许您执行chef命令,但我不清楚如何执行。比如: chef.json = { apt: { package: {'libssl-dev': {action: 'install'}} } ?chef.json不执行或定义命令。 它定义了可由配方使用的节点属性 我喜欢读书 及 一些json内容是由vagrant生成的,比如在vagrant文件中用chef.add_recip

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

json似乎允许您执行chef命令,但我不清楚如何执行。比如:

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

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

我喜欢读书 及

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

对于您的用例,您应该有一本带有配方解析节点['apt']并使用deb_包资源的烹饪书。

Chef用于定义通过Chef客户端执行的

配方基本上是对脚本的定义 资源是您正在配置、或等的特定元素 节点是运行chef客户端的计算机 您为chef solo设置的json定义了类似于您的厨师可以用来决定做什么的变量

因此,您有一个属性散列供Chef使用,但您需要一个配方,该配方基于要在节点上执行的散列来配置资源

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

包资源支持许多不同的包后端,包括apt,因此除了包名称之外,您不需要担心差异

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

node[:apt][:package].each do |pkg,pkg_data|
    package pkg do
      action pkg_data[:action].to_sym
    end
end
然后将各个配方打包成一个类似配方的逻辑分组。一般来说,一本食谱应该是一个软件,比如说httpd或mysql

正如Tensibia所提到的,通读食谱/食谱,然后从那里开始

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