Chef infra chef solo运行列表未扩展到包含vagrant和Berkshell的依赖项

Chef infra chef solo运行列表未扩展到包含vagrant和Berkshell的依赖项,chef-infra,vagrant,berkshelf,Chef Infra,Vagrant,Berkshelf,我在用流浪汉和主厨索洛和伯克希尔。老实说,我对他们三个都是新手,所以我可能在这里吃得太多了,但我正在尝试制作一本非常简单的食谱,其中安装了一个postgres数据库 首先遇到的错误是:“Chef::Exceptions::Exec:package[postgresql client](postgresql::client第36行)出现错误:Chef::Exceptions::Exec:apt get-q-y install postgresql client=9.1+129返回100,应为0”

我在用流浪汉和主厨索洛和伯克希尔。老实说,我对他们三个都是新手,所以我可能在这里吃得太多了,但我正在尝试制作一本非常简单的食谱,其中安装了一个postgres数据库

首先遇到的错误是:“
Chef::Exceptions::Exec:package[postgresql client](postgresql::client第36行)出现错误:Chef::Exceptions::Exec:apt get-q-y install postgresql client=9.1+129返回100,应为0

以下是cookbooks/transportapi/recipes/default.rb的内容

#Set up a postgres database

include_recipe "database"
include_recipe "postgresql"

postgresql_database 'thedb' do
  connection(
    :host     => '127.0.0.1',
    :port     => 5432,
    :username => 'postgres',
    :password => node['postgresql']['password']['postgres']
  )
  template 'DEFAULT'
  encoding 'DEFAULT'
  tablespace 'DEFAULT'
  connection_limit '-1'
  owner 'postgres'
  action :create
end
我试图指定对“数据库”和“postgresql”的依赖关系。我还有一个metadata.rb文件(两者都需要?),它

depends 'database'
depends 'postgresql'
这两本书都是Berkschelf从opscode repos获得的食谱。我的Berksfile如下所示:

site :opscode

cookbook 'database'
cookbook 'postgresql'

cookbook 'transportapi', :path => './cookbooks/transportapi'
这是我试着做“流浪者行动”时的全部输出

vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'precise32'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[Berkshelf] This version of the Berkshelf plugin has not been fully tested on this version of Vagrant.
[Berkshelf] You should check for a newer version of vagrant-berkshelf.
[Berkshelf] If you encounter any errors with this version, please report them at https://github.com/RiotGames/vagrant-berkshelf/issues
[Berkshelf] You can also join the discussion in #berkshelf on Freenode.
[Berkshelf] Updating Vagrant's berkshelf: '/Users/harrywood/.berkshelf/default/vagrant/berkshelf-20131106-34531-1no9nl5-default'
[Berkshelf] Using postgresql (3.1.0)
[Berkshelf] Using transportapi (0.1.0) at './cookbooks/transportapi'
[Berkshelf] Using apt (2.3.0)
[Berkshelf] Using build-essential (1.4.2)
[Berkshelf] Using openssl (1.1.0)
[Berkshelf] Using database (1.5.2)
[Berkshelf] Using mysql (3.0.12)
[Berkshelf] Using aws (1.0.0)
[Berkshelf] Using xfs (1.1.0)
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] -- 80 => 8080 (adapter 1)
[default] Booting VM...
[default] Waiting for machine to boot. This may take a few minutes...
[default] Machine booted and ready!
[default] Mounting shared folders...
[default] -- /vagrant
[default] -- /tmp/vagrant-chef-1/chef-solo-1/cookbooks
[default] Running provisioner: chef_solo...
Generating chef JSON and uploading...
Running chef-solo...
stdin: is not a tty
[2013-11-06T01:24:08+00:00] INFO: *** Chef 10.14.2 ***
[2013-11-06T01:24:08+00:00] INFO: Setting the run_list to ["recipe[transportapi]"] from JSON
[2013-11-06T01:24:08+00:00] INFO: Run List is [recipe[transportapi]]
[2013-11-06T01:24:08+00:00] INFO: Run List expands to [transportapi]
[2013-11-06T01:24:08+00:00] INFO: Starting Chef Run for precise32
[2013-11-06T01:24:08+00:00] INFO: Running start handlers
[2013-11-06T01:24:08+00:00] INFO: Start handlers complete.

================================================================================
Error executing action `install` on resource 'package[postgresql-client]'
================================================================================

Chef::Exceptions::Exec
----------------------
apt-get -q -y install postgresql-client=9.1+129 returned 100, expected 0

Resource Declaration:
---------------------
# In /tmp/vagrant-chef-1/chef-solo-1/cookbooks/postgresql/recipes/client.rb

 35: 
 36:   package pg_pack
 37: 

Compiled Resource:
------------------
# Declared in /tmp/vagrant-chef-1/chef-solo-1/cookbooks/postgresql/recipes/client.rb:36:in `from_file'

package("postgresql-client") do
  retry_delay 2
  retries 0
  recipe_name "client"
  action :install
  cookbook_name :postgresql
  package_name "postgresql-client"
end

[2013-11-06T01:24:16+00:00] ERROR: Running exception handlers
[2013-11-06T01:24:16+00:00] ERROR: Exception handlers complete
[2013-11-06T01:24:17+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[2013-11-06T01:24:17+00:00] FATAL: Chef::Exceptions::Exec: package[postgresql-client] (postgresql::client line 36) had an error: Chef::Exceptions::Exec: apt-get -q -y install postgresql-client=9.1+129 returned 100, expected 0
Chef never successfully completed! Any errors should be visible in the
output above. Please fix your recipes so that they properly complete.

可能“apt”未正确包括在内。我想知道厨师运行列表是否应该显示扩展以包含依赖项。它只是说“运行列表扩展到[transportapi]”,这是我在vagrant文件中添加的唯一配方。

当您SSH到VM并在
vagrant提供之前执行
apt get update
时,我想它会起作用吗

那么,apt缓存是否过时是一个确定的问题


因此,你应该在跑步列表中包括食谱。这会执行一个
apt-get-update
(不是在每次chef运行期间,而是每天一次)。

当您在
vagrant provision
之前SSH到VM并执行一个
apt-get-update
时,我想它会起作用吗

那么,apt缓存是否过时是一个确定的问题


因此,你应该在跑步列表中包括食谱。这会有一个
apt-get-update
(不是在每一次厨师运行期间,而是每天一次)。

hmmm.好的,我想我以前试过这个,因为,是的,它让我走得更远,但是它失败了,与没有“pg”gem有关的另一个错误。我认为chef犯了更基本的错误,因为我认为这些依赖应该自动解决。在我的输出中,在berkshelf级别上似乎可以做到这一点:“[berkshelf]使用apt(2.3.0)”等等。难道chef不应该把它捡起来并添加到跑步列表中吗?@HarryWood-你可能应该接受@StephenKing的答案,或者在互联网上搜索
pg
gem的问题,或者为此创建一个新问题。原始问题通过包含
apt
食谱(通常是
apt
status 100
退出时的情况)来解决。但是为什么我必须将apt食谱添加到我的运行列表中?事实上,这样做似乎是错误的,因为这只会让我陷入下一个依赖性问题。我将更改我的问题的标题,因为我过于强调即时错误消息。您可以将
apt
配方作为基本角色或特定于debian的食谱。我还没有太多地使用Berkshelf,所以对此我不能说太多。当然,postgre的食谱必须依赖于apt的食谱,这让人感到尴尬。我会在这里这样做:-将另一个provisioner(在chef之前运行)添加到您的Vagrant文件中,并执行
apt get update
。好的,我认为我做错了什么,但chef用户社区似乎都很乐意在依赖项解析中忽略此错误。和我办公室的厨师专家聊天,他也这么说。他总是把“apt”列入他的跑步名单。因此,我也会这样做,并进入下一个奇怪的小故障。它不像我希望的那么干净。好的,我想我以前试过这个,因为,是的,它让我走得更远,但是它失败了,因为没有“pg”宝石。我认为chef犯了更基本的错误,因为我认为这些依赖应该自动解决。在我的输出中,在berkshelf级别上似乎可以做到这一点:“[berkshelf]使用apt(2.3.0)”等等。难道chef不应该把它捡起来并添加到跑步列表中吗?@HarryWood-你可能应该接受@StephenKing的答案,或者在互联网上搜索
pg
gem的问题,或者为此创建一个新问题。原始问题通过包含
apt
食谱(通常是
apt
status 100
退出时的情况)来解决。但是为什么我必须将apt食谱添加到我的运行列表中?事实上,这样做似乎是错误的,因为这只会让我陷入下一个依赖性问题。我将更改我的问题的标题,因为我过于强调即时错误消息。您可以将
apt
配方作为基本角色或特定于debian的食谱。我还没有太多地使用Berkshelf,所以对此我不能说太多。当然,postgre的食谱必须依赖于apt的食谱,这让人感到尴尬。我会在这里这样做:-将另一个provisioner(在chef之前运行)添加到您的Vagrant文件中,并执行
apt get update
。好的,我认为我做错了什么,但chef用户社区似乎都很乐意在依赖项解析中忽略此错误。和我办公室的厨师专家聊天,他也这么说。他总是把“apt”列入他的跑步名单。因此,我也会这样做,并进入下一个奇怪的小故障。它不像我希望的那么干净。