Articles of 厨师独奏

为什么厨师食谱不能读取bash环境variables的值?

这是我的shell脚本的内容: export TARGET_ROLE=play vagrant up 我正在使用该脚本来导出环境variables,以便在厨师菜谱中设置一些variables role = ENV['TARGET_ROLE'] Chef::Log.info("Using role #{role}") node.override[:mainapp][:target_role] = role seq = ENV['SEQ'] Chef::Log.info("Using seq #{seq}") node.override[:mainapp][:server_seq] = seq 以下是我在日志中看到的内容: ==> default: [2015-09-14T07:22:35+00:00] DEBUG: Found recipe mainapp_common_env in cookbook mainapp ==> default: [2015-09-14T07:22:35+00:00] INFO: Using role ==> default: [2015-09-14T07:22:35+00:00] INFO: Using seq 我做错了什么?

如何运行一个厨师食谱?

使用Ansible和Puppet安装软件是可能的,通过从galaxy或puppetforge下载一个angular色并运行它无主。 目标 目标是安装MongoDB使用主厨无主。 我只想下载一本食谱并运行它。 尝试 knife cookbook site download mongodb3保存在/ knife cookbook site download mongodb3 焦油被提取 基于这个文档,我尝试使用chef-client –local -o recipe['mongodb3']来运行食谱,但是它导致: [2016-11-18T10:35:28+01:00] WARN: No config file found or specified on command line, using command line options. [2016-11-18T10:35:28+01:00] WARN: No cookbooks directory found at or above current directory. Assuming /home/user. Starting Chef Client, version 12.15.19 [2016-11-18T10:36:05+01:00] WARN: […]

允许使用“部署”用户进行编写

我目前对厨师和Capistrano是新手。 我正在使用Capistrano 3.x版来部署Rails 4应用程序。 我已经用厨师独奏成功引导了一个服务器。 我正在使用的一本食谱是Nginx。 回到我的简单的Rails 4应用程序,我试图运行这个命令来检查我的部署的状态: cap production deploy:check 但是,它会抛出一些错误: DEBUG [05e580a4] Command: /usr/bin/env mkdir -pv /var/www/shared /var/www/releases DEBUG [05e580a4] mkdir: cannot create directory `/var/www': Permission denied DEBUG [05e580a4] mkdir: cannot create directory `/var/www': Permission denied 我使用Capistrano的deploy用户,并在我的厨师节点configuration,我speficied deploy用户。 我也可以使用deploy用户login我的实例。 有没有适当的方法来解决厨师或卡皮斯特拉诺的权限?

多次使用variables执行厨师资源

考虑下面的代码: node["cloudwatch"]["alarms"].each do |metric,keys| script_name = "/root/.cloudwatch/create_cloudwatch_alarm-#{metric}.sh" template script_name do source "cloudwatch/create_cloudwatch_EC2_alarm.sh.erb" owner "root" group "root" mode "0655" variables( :metric => metric, :description => keys["description"], :statistic => keys["statistic"], :comparison => keys["comparison"], :threshold => keys["threshold"], :evalperiods => keys["evalperiods"], :period => keys["period"] ) notifies :run, "bash[populate-create_alarms]", :immediately end bash "populate-create_alarms" do user "root" cwd "/root/.cloudwatch/" code <<-EOH […]

如何解决berks和chef-solo之间的菜谱命名不符?

这个答案的后续。 跑厨师独奏: sudo chef-solo -c config.rb -j config.json Starting Chef Client, version 12.16.42 resolving cookbooks for run list: ["terraform"] ================================================================================ Error Resolving Cookbooks for Run List: ================================================================================ Missing Cookbooks: —————— No such cookbook: terraform Expanded Run List: —————— * terraform Platform: ——— x86_64-linux 使用berkshelf安装的食谱包含版本后缀 user@host ~ $ ls ~/.berkshelf/cookbooks/ terraform-0.5.3 如果将terraform-0.5.3重命名为terraform并再次运行chef-solo,则会findterraform cookbook,但是找不到另一个: Missing Cookbooks: —————— […]

厨师和软件包与长期运行的版本

我正在尝试与厨师和我的服务器configuration转移到它。 我遇到的一个障碍是如何处理必须手动编译和安装的软件包(configure,make,make install),但是要永远编译。 我不想阻止服务器启动时间,只是因为一个依赖需要永远构build。 具体用例:wkhtmltopdf。 具有完整function的Wkhtmltopdf需要一个自定义/修补的QT,它需要FOREVER编译。 下面是我看到的选项:1)在每次启动时使用chef编译软件包(Con:永远启动服务器)2)编译软件包一次,tar和它们。 然后下载包并安装它。 (Con:不适用于具有不同操作系统/硬件的机器)3)编译一次,只保留在一个基本的图像和厨师(厨师:包不是厨师) 有任何想法吗?

当我没有完全控制服务器时,我还可以使用Chef(等)吗?

我想更好地控制我的部署环境,但是我与IT部门共享系统pipe理责任,IT部门拥有自己的(不完全自动的)进程,用于引导VM实例,pipe理组织用户和执行安全更新。 即使系统的初始状态超出了我的控制范围,并且由于厨师外部的安全更新(也可能还有其他手动干预)而定期更换,我仍然可以从使用厨师(可能是Chef-Solo)中受益吗? 我不能在IT部门引入不同的工作stream程。 他们的职责: 提供硬件和虚拟机 安装具有“基本function集”的操作系统(目前是SLES 11) 从相同的SLES版本应用安全更新 pipe理任何组织用户的访问权限 备份 我的职责: 安装和pipe理应用程序依赖关系(使用策略来selectSLES分发包) 将安全更新应用于不属于SLES发行版的已安装的任何内容 configuration所需的服务 部署应用程序 据我所知,这与主厨背后的一个完全控制的环境背道而驰,并且会为生产环境之间以及他们与我的分段环境(IT从不触及的本地VM)之间的分歧留出空间。 使用像厨师这样的工具还是值得的“麻烦”? 我的工作stream程如何与完全控制的环境有所不同?

Ruby / Chef的include_recipe和从父文件知道variables?

我正在试图在一个包含的文件中使用一个局部variables。 我得到的是没有定义的错误。 我不确定一个这样做的方法,是吗? 我有一个配方文件夹: recipes/ development.rb testing.rb config.rb development.rb username = "vagrant" static = [] django = ["project1", "project2"] include_recipe "server::config" # <– Trying to use static and django in there. config.rb static.each do |vhost| # <– How do I get the "static" var in here? … end django.each do |vhost| # <– How do […]

如何“复制”服务器?

我有一个EC2和数字海洋服务器,我想在本地重新创build它们(相同的configuration文件和一切)。 当地我的意思是虚拟的盒子(stream浪者)。 我已经开始通过厨师pipe理他们,但必须经过一段时间(时间嘎吱嘎吱)。 我的厨师食谱不再与服务器同步。 任何方式,我可以逆向工程呢? 我试过蓝图,但无法得到它的安装应用程序的权利。

为什么厨师,傀儡,无赖,盐等?

devops工具生态系统令我感到困惑。 服务器编排/pipe理空间中的每个人都在使用自己的专有格式,而不是使用shell脚本。 Ansible有他们的YAML游戏手册,Puppet有它的类/graphics语言,salt像ansible有某种YAML格式,厨师是一个embedded的Ruby DSL。 在所有这些方法中,我最喜欢厨师,因为它做的是最简单的事情。 所以我想一个好处是当你使用这些工具之一时,对机群的可视性更好,但是这与实际的configuration和configuration组件是正交的。 我不明白为什么每个人都试图用YAML来重新发明shell脚本,因为往往不是ssh -t就是我需要做的事情,以及一些shell脚本的库。 这些脚本通常打包为自包含的tar文件,并且足够小而且足够简单,可以根据需要进行混合和匹配。 除了bash ,它们具有零依赖关系,几乎可以在任何地方工作。 那么为什么这样一个简单的解决scheme不足以胜任真人,傀儡,厨师等呢? 通过用其他格式replacebash脚本,所有这些解决scheme能获得什么?