我和厨师有过一段意想不到的经历。以下是:
我宣布了安装postgres的配方。
execute 'sudo apt-get install postgresql-9.1 -y --force-yes'
template "/etc/postgres/9.1/main/pg_hba.conf" do
source "pg_hba.conf.erb"
owner "postgres"
group "postgres"
mode 00600
notifies :restart, 'service[postgresql]', :immediately
subcribes:
end
service "postgresql" do
service_name "postgresql"
supports :restart => true, :status => true, :reload => true
action [:enable, :start]
end但当我跑到测试厨房的时候。
Compiling Cookbooks...
Recipe: beesor-cookbook::postgresql
* execute[sudo apt-get install postgresql-9.1 -y --force-yes] action run [2014-03-14T17:37:28+00:00] INFO: Processing execute[sudo apt-get install postgresql-9.1 -y --force-yes] action run (beesor-cookbook::postgresql line 4)
Reading package lists...
Building dependency tree...
Reading state information...
postgresql-9.1 is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 31 not upgraded.
[2014-03-14T17:37:29+00:00] INFO: execute[sudo apt-get install postgresql-9.1 -y --force-yes] ran successfully
- execute sudo apt-get install postgresql-9.1 -y --force-yes
Converging 3 resources
* execute[sudo apt-get install postgresql-9.1 -y --force-yes] action nothing[2014-03-14T17:37:29+00:00] INFO: Processing execute[sudo apt-get install postgresql-9.1 -y --force-yes] action nothing (beesor-cookbook::postgresql line 4)
(skipped due to action :nothing)
* template[/etc/postgres/9.1/main/pg_hba.conf] action create[2014-03-14T17:37:29+00:00] INFO: Processing template[/etc/postgres/9.1/main/pg_hba.conf] action create (beesor-cookbook::postgresql line 8)
* Parent directory /etc/postgres/9.1/main does not exist.
================================================================================
Error executing action `create` on resource 'template[/etc/postgres/9.1/main/pg_hba.conf]'
================================================================================
Chef::Exceptions::EnclosingDirectoryDoesNotExist
------------------------------------------------
Parent directory /etc/postgres/9.1/main does not exist.
Resource Declaration:
---------------------
# In /tmp/kitchen/cookbooks/beesor-cookbook/recipes/postgresql.rb
8: template "/etc/postgres/9.1/main/pg_hba.conf" do
9: source "pg_hba.conf.erb"
10: owner "postgres"
11: group "postgres"
12: mode 00600
13: notifies :restart, 'service[postgresql]', :immediately
14: end
15:
Compiled Resource:
------------------
# Declared in /tmp/kitchen/cookbooks/beesor-cookbook/recipes/postgresql.rb:8:in `from_file'
template("/etc/postgres/9.1/main/pg_hba.conf") do
provider Chef::Provider::Template
action "create"
retries 0
retry_delay 2
path "/etc/postgres/9.1/main/pg_hba.conf"
backup 5
atomic_update true
source "pg_hba.conf.erb"
cookbook_name :"beesor-cookbook"
recipe_name "postgresql"
owner "postgres"
group "postgres"
mode 384
end
[2014-03-14T17:37:29+00:00] INFO: Running queued delayed notifications before re-raising exception
[2014-03-14T17:37:29+00:00] ERROR: Running exception handlers
[2014-03-14T17:37:29+00:00] ERROR: Exception handlers complete
[2014-03-14T17:37:29+00:00] FATAL: Stacktrace dumped to /tmp/kitchen/cache/chef-stacktrace.out
Chef Client failed. 1 resources updated
[2014-03-14T17:37:29+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
Converge failed on instance <postgresql-ubuntu-1204>.
Please see .kitchen/logs/postgresql-ubuntu-1204.log for more details
------Exception-------
Class: Kitchen::ActionFailed
Message: SSH exited (1) for command: [sudo -E chef-solo --config /tmp/kitchen/solo.rb --json-attributes /tmp/kitchen/dna.json --log_level info]我以为厨师在菜谱中每个人都经过的时候,就负责管理资源。
但它却给我展示了相反的一面。
厨师怎么了?
发布于 2014-03-15 17:53:42
这里有几点。
首先,您粘贴的输出不是上面的菜谱代码。它显示了在编译期间使用action :nothing声明的资源,建议您执行以下操作:
execute 'sudo apt-get install postgresql-9.1 -y --force-yes' do
action :nothing
end.run_action(:run)我相信你是在试图解决订购问题时这么做的(那根本就不存在)。
第二,厨师正在做你想做的事情,并按照食谱中声明的顺序运行每个资源。如果在Converging 3 resources行之后查看日志,您将看到它使用action :nothing执行execute,然后是template,最后是service。
在此之前,您还可以看到,它在编译时运行您的execute资源,并且没有安装任何包,因为"postgresql-9.1 is already the newest version“(在日志中也清楚地说明了)。
第三点,您的菜谱可能失败了,因为postgresql-9.1包没有创建您期望它的目录:"Parent directory /etc/postgres/9.1/main does not exist“。
第四,安装软件包的惯用方法是使用 resource
package "postgresql-9.1" do
action :install
end我的建议是:登录您要部署此配方的机器,确保安装了postgresql-9.1包(如果没有安装),确保这是您需要的包,然后找出该特定操作系统的pg_hba.conf文件位于何处。然后,修复您的template资源以指向正确的位置。
https://stackoverflow.com/questions/22412729
复制相似问题