我是新手厨师,面临一个问题.
每次我运行任何刀具菜单命令,我必须明确提供使用-o /path/to/cookbook
其他菜谱的路径它会错误地说没有找到烹饪书.请找到以下命令:
$ knife cookbook upload getting-started
ERROR: Could not find cookbook getting-started in your cookbook path, skipping it
ERROR: Failed to upload 1 cookbook.
$ knife cookbook upload getting-started -o /home/chefuser/chef11/chef-repo/cookbooks/
Uploading getting-started [0.4.0]
Uploaded 1 cookbook.
Run Code Online (Sandbox Code Playgroud)
问题:
我想知道/列出cookbook的默认搜索路径,并且需要知道如何修改它.
另外,为什么它没有看菜谱路径,我必须明确提供它?
谢谢.
当使用vagrant和chef作为供应者时,我收到了这个警告:
[web] Chef 11.12.2 Omnibus package is already installed.
[web] Running provisioner: chef_solo...
Generating chef JSON and uploading...
Running chef-solo...
stdin: is not a tty
[2014-04-10T14:48:46+00:00] INFO: Forking chef instance to converge...
[2014-04-10T14:48:46+00:00] WARN:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
SSL validation of HTTPS requests is …
Run Code Online (Sandbox Code Playgroud) 我正在设置一个简单的流浪盒,厨师独奏作为供应者.一切都很顺利,直到我尝试在笔记本电脑上运行它.机器很好,但是当它配置时会吐出一些错误.
我对厨师比较新鲜,我不太清楚我在看什么.任何帮助都非常感谢.
错误
==> default: [2016-05-20T00:27:27+00:00] INFO: GET /organizations/chef/nodes/vagrant-ebebf4d0
==> default: [2016-05-20T00:27:27+00:00] INFO: #<ChefZero::RestErrorResponse: 404: Object not found: chefzero://localhost:8889/nodes/vagrant-ebebf4d0>
Run Code Online (Sandbox Code Playgroud)
全栈跟踪
default: /tmp/vagrant-chef/fc2e73022d67a62fdf8d4974c11d0294/cookbooks => C:/Projects/new-vagrant/provision/cookbooks
==> default: Running provisioner: chef_solo...
default: Installing Chef (latest)...
==> default: Generating chef JSON and uploading...
==> default: Running chef-solo...
==> default: stdin: is not a tty
==> default: [2016-05-20T00:27:25+00:00] INFO: Started chef-zero at chefzero://localhost:8889 with repository at /tmp/vagrant-chef/fc2e73022d67a62fdf8d4974c11d0294
==> default: One version per cookbook
==> default: [2016-05-20T00:27:25+00:00] INFO: Forking chef instance to converge...
==> default: …
Run Code Online (Sandbox Code Playgroud) 我正在为一个流浪盒的厨师食谱挣扎.我正在使用厨师独奏.
我对Ruby不太满意(我之前从未使用过它),所以如果我vagrant provision
每次都要做的话,编写我的食谱的过程会很长.
有没有办法调试特定的食谱?甚至来自虚拟机shell.
我已经看到chef-shell
存在(http://docs.opscode.com/chef_shell.html),当我进入虚拟机时我可以启动它(它可以工作),但我无法理解如何加载我的食谱和测试它们.
我正在尝试在centos盒子上安装最新版本的php并且正在努力.
我一直在看的食谱是opscode:https://github.com/opscode-cookbooks/php
它看起来不像我可以使用它安装PHP 5.5.
要手动安装,我只需执行以下操作(在centos 6.4上):
rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
yum install php55w php55w-opcache
Run Code Online (Sandbox Code Playgroud)
这如何转化为使用chef(solo)来安装php 5.5?
离厨师一段时间后,我正在回到它,以满足我所有的服务器需求.几年前我已经使用它了一段时间并且喜欢它,但最近有其他人做了操作部分.
但我仍然在努力寻找一个非常好的起始设置(本地Vagrant + Chef)来配合开发.单独使用Vagrant是一件轻而易举的事情,使用起来非常简单,并且可以相当快速地开发服务器设置.但是一旦我不得不离开Vagrant进行实际部署,它就会再次变得烦人.我总是不能使用Vagrant盒子,但Rackspace甚至是某个地方的实际硬件盒子.
现在我这样做:
针对Vagrant进行开发,尝试尽可能少地在Vagrantfile中进行实际配置
暂存并实际部署服务器:
使用Rackspace Cloud(至少升级)与Knife Solo
这已经不是那么糟糕了,但仍然有一些有时非常烦人的故障:
除此之外,我不得不遗憾地发现,厨师食谱已广泛发展成为一个不相容和自以为是的文物的丛林.有时甚至很难通过默认配方工作来获得基本设置.我很惊讶很多基础知识几乎没有涉及:
让sshd + iptables的组合工作花了我一天的研究,然后仍然修改默认模板让它工作 - 而我期望它几乎是任何服务器的起点.此外,似乎没有任何默认的厨师 - 用户工作流程.到目前为止我发现的所有内容都以root身份运行或需要进行相当多的修改.最后但并非最不重要的是,厨师(在ubuntu 12.04上)仍然使用ruby 1.8.7,它在短短几个月内即将达到终点.
可能是因为我没有找到合适的资源来涵盖我目前仍在努力或满意的所有要点,但似乎还有很多方法可以改进它.
那么,流浪汉+厨师如何在真实环境中工作(除了本地虚拟盒子之外)对你有用,还有哪些陷阱需要注意?
似乎它开始疯狂地通过本地流动的所有自动引导,但是一旦你超越了那些东西变得非常混乱.如果人们也使用这样的设置可以给我一些如何解决上述问题的指示,我会很高兴.我不介意付出一些努力让它全部按照我的预期运行,但也许我已经走错了部分,只是让自己更难以实际需要;)
目前简短的总结是:Vagrand + ChefSolo(KnifeSolo)非常棒,但为了正常工作,整个引导部分需要我们在应用烹饪书之前使用自定义的部分来获得适当的系统基础 - 这些都需要谨慎从丛林中挑选出来.
Progess/Update Notes
(*1):只是想出来,纯粹靠运气给它一个镜头,显然可以在一个Vagrantfile中添加多个提供机制:
config.vm.provision :shell, path: 'bootstrap.ubuntu-12.04.2-server-amd64.sh'
config.vm.provision :chef_solo do |chef|
...
end
Run Code Online (Sandbox Code Playgroud)
由于首先执行shell,我可以将它用作Vagrant服务器的自定义预处理,同时仍然使用Chef-Solo进行实际安装.好极了.仍然需要看看它最终会有多大用处,但现在有一点缺失的步骤可以让流程保持一致.
我正在使用Test Kitchen来测试一本食谱.我想指定将要安装的Chef solo的版本号.如何指定版本号?
我正在通过peepcode的Chef教程,到目前为止一切顺利.由于某种原因,使用模板变量时出现故障.这个例子是针对nginx的.
在nginx/attributes/nginx.rb中我有:
default[:nginx][:worker_processes] = 4
Run Code Online (Sandbox Code Playgroud)
在nginx.conf.erb模板中我指的是:
worker_processes <%= @node[:nginx][:worker_processes] %>;
Run Code Online (Sandbox Code Playgroud)
以下是我运行chef-solo的错误:
Template Context:
-----------------
on line #2
1: user www-data;
2: worker_processes <%= @node[:nginx][:worker_processes] %>;
3:
4: error_log /var/log/nginx/error.log;
5: pid /var/run/nginx.pid;
[2013-07-14T19:46:36+02:00] ERROR: Running exception handlers
[2013-07-14T19:46:36+02:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated
[2013-07-14T19:46:36+02:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[2013-07-14T19:46:36+02:00] FATAL: Chef::Mixin::Template::TemplateError: undefined method `[]' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
错误输出的其他部分:
Starting Chef Client, version 11.4.4
Compiling Cookbooks...
Converging 3 resources
Recipe: nginx::default
* package[nginx] action install (up …
Run Code Online (Sandbox Code Playgroud) 我有2个烹饪书名为mycookbook,版本0.1.0和0.1.1在厨师服务器上.现在我想使用chef-client只运行cookbook mycookbook 0.1.1版.我该怎么做呢 ?
我试图有条件地运行vagrant-berkshelf插件.默认情况下,vagrant up
即使当前的流浪者操作不是配置运行,启用插件也会导致Berkshelf在每一个上解析和供应烹饪书(这是一个相对昂贵的操作).例如,我希望Berkshelf在我运行时运行:
vagrant up
第一次,或 vagrant reload --provision
.来源暗示应该有一种方法来查询Vagrant本身以确定它是否是供应运行.具体来说,应该有一种方法可以挂钩@env[:provision_enabled]
或者vagrant.actions.vm.provision
,但我无法弄清楚如何在Vagrantfile本身内执行此操作.
这个方法实际上是绑定到Vagrant对象吗?如果没有,那么在哪里?我怎么能反省呢?
作为一种解决方法,我尝试在Chef块中移动Berkshelf插件,意图它只在Chef配置器执行时运行.例如:
Vagrant.configure(2) do |config|
config.berkshelf.enabled = false
config.vm.provision :chef_solo do |chef|
config.berkshelf.enabled = true
end
end
Run Code Online (Sandbox Code Playgroud)
然而,Berkshelf仍然运行每次我vagrant up
还是vagrant reload
,这是不期望的行为.每次运行时,烹饪书仍然可以解决和销售.考虑以下省略的输出:
==>默认:更新Vagrant的Berkshelf ...
==>默认:解决cookbook依赖...
==>默认:使用karaf(0.2.1)
==>默认:将karaf(0.2.1)提供给/ Users /富/ .berkshelf /游民,berkshelf /货架/ berkshelf20160215-19428-unzcx1默认/ karaf
有一个模糊的相关问题,其中接受的答案是一个丑陋的黑客,它寻找.vagrant/machines/default/virtualbox/action_provision或类似的存在,但它不是这个问题的完全重复,因为它没有解决如何以编程方式通过运行时对象或API Vagrant公开查询Vagrant的内部状态.它可能包含基于文件系统信号量的实用(如果是kludgey)答案,但它没有回答我实际问的问题.
chef-solo ×10
chef-infra ×8
vagrant ×6
provisioning ×2
ruby ×2
berkshelf ×1
knife ×1
sysadmin ×1
test-kitchen ×1
variables ×1