Tag: 厨师

OpsWorks – 包含在自定义菜谱中的内容

我是厨师和AWS OpsWorks的新手。 我想创建一个自定义食谱,以便在生产中预编译资产,并使用随时随地设置cron作业。 我发现了一些关于预编译资产的东西,我也会想出cron部分,但我很困惑我的自定义厨师项目应该是什么样子。 它是一个完整的厨师独奏项目,将取代AWS OpsWorks的标准食谱,因此我将不得不从他们的github回购中复制东西? 或者我们和他们的食谱会合并吗? 如果是这样,我必须包含哪些目录和文件作为最低限度,例如执行“bundle exec when –update-crontab’foo’” 是否建议仅为烹饪书创建第二个项目,或者我可以将厨师文件放在我的rails结构的子目录中而不会混乱吗?

主厨deploy_resource私有repo,ssh部署密钥和ssh_wrapper

我有很多麻烦让我的厨师食谱克隆私人回购。 好吧,我昨天工作了,但是在我的Vagrant盒子里’cheffin’六次之后,我已经打破了它。 你可能猜到我是厨师新手。 在这里的deploy_resource指南之后,我创建了我的deploy.rb配方(缩写): deploy_branch “/var/www/html/ps” do repo git@github.com:simonmorley/private-v2.git ssh_wrapper “/tmp/.ssh/chef_ssh_deploy_wrapper.sh” branch “rails4” migrate false environment “RAILS_ENV” => node[:ps][:rails_env] purge_before_symlink %w{conf data log tmp public/system public/assets} create_dirs_before_symlink [] symlinks( # the arrow is sort of reversed: “conf” => “conf”, # current/conf -> shared/conf “data” => “data”, # current/data -> shared/data “log” => “log”, # current/log […]

如何使用Chef预编译资产?

OpsWorks不会在部署时预编译资产。 我在这个post中找到了这个食谱,但我认为它不完整,或者遗漏了一些东西,因为我收到了关于找不到release_path的错误。 precompile.rb: Chef::Log.info(“Running deploy/before_migrate.rb…”) Chef::Log.info(“Symlinking #{release_path}/public/assets to #{new_resource.deploy_to}/shared/assets”) link “#{release_path}/public/assets” do to “#{new_resource.deploy_to}/shared/assets” end rails_env = new_resource.environment[“RAILS_ENV”] Chef::Log.info(“Precompiling assets for RAILS_ENV=#{rails_env}…”) execute “rake assets:precompile” do cwd release_path command “bundle exec rake assets:precompile” environment “RAILS_ENV” => rails_env end 日志 : undefined local variable or method `release_path’ for …. 有任何想法吗? 我根本不认识厨师,我想在飞行中弄清楚这一点。

将文件从Chef客户端节点复制到工作站

我想知道如何将文件从客户端节点传输到远程计算机。 我已经检查过是否有可用的资源。 我发现最接近的是remote_file ,但它从远程位置获取文件并将其传输到客户端节点。 所以我通过编写一个执行自动scp的bash脚本尝试了另一个选项。 但我无法复制该文件,但厨师 – 客户端运行良好,没有显示任何错误。 这是我复制文件的脚本: #!/usr/bin/expect -f # connect via scp spawn scp “/tmp/testfile” chef-ws@10.232.110.113:/home/chef-ws/fileserver expect { -re “.*es.*o.*” { exp_send “yes\r” exp_continue } -re “.*sword.*” { exp_send “password\r” } } interact 我已将此脚本复制到cookbook’s templates目录中,作为automatecopy.erb ,然后在default.rb ,我有以下代码 template “/tmp/automatecopy” do source “automatecopy.erb” mode 0777 end execute “automatecopy” do command “/usr/bin/expect /tmp/automatecopy” timeout […]

如何将厨师食谱/食谱应用于多个节点?

以下是使用Chef将cookbook应用于节点的示例。 但没有人告诉过多个节点。 例如,我有一个akka应用程序,它传递了akka.cluster.seed-nodes参数。 所以算法应该是: 使用IP地址定义数组“IP”,如[192.168.1.1],[192.168.1.2],[192.168.1.3] 使用bootrapped ip地址定义空数组“bootsrapped” 开始迭代“IP” 使用当前ip调用knife bootstrap并使用“bootsrapped”值调用“pass” -Dakka.cluster.seed-nodes 在第二个数组中存储boostrapped ip 去3 因此,目标是编写一个可以应用于服务器的多个节点的脚本。 厨师怎么做?

厨师 – 独奏传递自定义json

我拼命想弄清楚如何在Chef-Solo中应用一些节点变量 。 否则我必须继续重新配置。 第1步 ,我登录配置框: $ vagrant ssh $ sudo chef-solo -o virtualenv::addsite -j /vagrant/resources/attr_test.json 第2步 ,我有一个JSON文件传递我尝试在配方中运行的数据。 我相信这有node.normal模式,它的优先级高于默认值? 这是我目前在attr_test.json中所拥有的 { “username”: “vagrant”, “params”: { “vhost”: “fake” }, “user”: { “name”: “vagrant” }, “overwrite_attributes”: { “username”: “vagrant” } } 这是配方,但我无法填充node.default数据。 的virtualenv /食谱/ addsite.rb bash ‘mkvirtualenv’ do cwd “/home/#{node.default[‘username’]}/projects/” user node.default[‘username’] environment ({ ‘HOME’ => ::Dir.home(node.default[‘username’]), ‘USER’ […]

Chef – ArgumentError:控制转义太短

我很乐意在下一期中获得任何帮助: 当我运行大量的食谱时(当我以不同的方式运行每个食谱时它不会失败),我有时会得到下一个错误: “ArgumentError:控制转义太短” 日志: [2016-03-15T15:41:55 + 01:00]信息:在重新引发exception之前运行排队延迟通知 [2016-03-15T15:41:55 + 01:00]错误:运行exception处理程序 [2016-03-15T15:41:55 + 01:00]错误:exception处理程序完成 [2016-03-15T15:41:55 + 01:00]致命:Stacktrace转储到c:/chef/chef-stacktrace.out [2016-03-15T15:41:55 + 01:00]致命:ArgumentError:控制转义太短 厨师,stacktrace.out: 生成于2016-03-14 15:56:29 +0100 ArgumentError:控制转义太短 C:/opscode/chef/embedded/apps/chef/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb:66:在’recipe_snippet’中 C:/opscode/chef/embedded/apps/chef/lib/chef/formatters/error_inspectors/resource_failure_inspector.rb:43:在’add_explanation’中 它随机发生,我无法找到解释,谢谢

使用Chef安装Postgres在Vagrant VM上的问题:未定义方法`ruby’用于Config:Module

这就是我的Vagrantfile样子: config.vm.provision :chef_solo do |chef| chef.cookbooks_path = “cookbooks” chef.json = { postgresql: { password: { postgres: ‘password’ } }, database: { create: [‘mydb’] }, ‘build-essential’ => { compiletime: true } } chef.run_list = [‘recipe[build-essential]’, ‘recipe[openssl]’, ‘recipe[postgresql::server]’, ‘recipe[database::postgresql]’] end 我也使用了precise32盒子。 当我的虚拟机启动后我的VM启动vagrant up ,我会得到很长的回溯,并显示错误消息: undefined method ruby’用于Config:Module`。 有没有人遇到过这个?

Chef条件资源参数

我正在通过Chef创建一个用户。 他的属性存储在数据包中: { “id”: “developer”, “home”: “/home/developer”, “shell”: “/bin/zsh”, “password”: “s3cr3t” } 食谱是: developer = data_bag_item(‘users’, ‘developer’) user developer[‘id’] do action :create supports :manage_home => true home developer[‘home’] comment developer[‘comment’] shell developer[‘shell’] password developer[‘password’] end 问题是如果节点上没有安装zsh ,我就无法以developer身份登录。 所以,我想有条件地为user资源应用参数,例如: user developer[‘id’] do action :create supports :manage_home => true home developer[‘home’] comment developer[‘comment’] if installed?(developer[‘shell’]) shell developer[‘shell’] […]

实际上,bluepill没有检测到进程已成功启动,因此创建了新进程

我有一个(EC2)Ubuntu服务器,其中bluepill正常工作以启动和监视resque进程(并且它在过去的其他节点上已经这样做了)。 我正在设置一个新节点,由于某种原因,在此节点上, bluepill无法识别进程已启动并正在运行,因此不断创建新节点。 造成这种情况的原因令我感到困惑。 2节点几乎相同; 它们都是由相同的chef脚本配置的EC2服务器。 确实,不工作的是“生产”而另一个是“分期”,但由于这一点几乎没有差别。 在我分叉github项目并开始插入更多监控之前的任何想法或建议,试图弄清楚发生了什么? 关于这个列表,有关bluepill和resque的问题一直在讨论,但正如我所说,这在我的登台服务器上工作正常,并且在早期的生产服务器上运行良好(尽管我会注意到这个新的生产服务器是ruby 1.9.3(vs 1.9.2)和rails 3.2(vs. 3.1))。 这是我的.pill文件(或者更具体地说,我的chef食谱的模板文件): ENV[“RAILS_ENV”] = “” ENV[“QUEUE”] = “*” Bluepill.application(“zmx_app”) do |app| app.working_dir = “/srv/zmx/current” app.uid = “root” app.gid = “root” 2.times do |i| app.process(“resque-#{i}”) do |process| process.group = “resque” process.start_command = “rake resque:work” process.pid_file = “/srv/zmx/current/tmp/pids/resque_workers-#{i}.pid” process.stop_command = “kill -QUIT {{PID}}” process.daemonize = […]