标签: cookbook

如何查询节点上的cookbook版本?

使用案例: DevOps团队不久前推出了一个节点,我的团队想知道run_list中使用的一个/几个cookbook的版本是什么.我们的DevOps团队正在进行消防,因此我们希望找到一种自给自足的方法.

命令已尝试: knife cookbook show COOKBOOK提供所有可能的版本,但不指定正在使用的版本.

knife node show NODE 显示所有烹饪书,但没有附加版本信息.

问:是否有一个命令(类似的东西来knife search,ohai)查询厨师服务器部署在节点上的版本?

cookbook chef-infra chef-recipe knife

16
推荐指数
3
解决办法
1万
查看次数

通过Vagrant + Chef安装多个软件包

我刚刚发现了Vagrant + Chef,我正在尝试创建一个简单的方法来在节点上安装多个包.我认为这样的东西可以工作(我完全是新的红宝石):

# (From cookbooks/MY_COOCKBOOK/recipes/default.rb)
# Install required packages
%w{build-essential libncurses5-dev openssl libssl-dev}.each do |pkg|
  package pkg do
    action :install
  end
end
Run Code Online (Sandbox Code Playgroud)

但是这失败了以下错误:

[default] [Thu, 17 Mar 2011 06:24:27 -0700] INFO: Installing package[libssl-dev] version 0.9.8k-7ubuntu8.5
: stdout
[default] /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/mixin/command.rb:184:in `handle_command_failures': stderr
[default] : : stderr
[default] apt-get -q -y install libssl-dev=0.9.8k-7ubuntu8.5 returned 100, expected 0: stderr
[default]  (: stderr
[default] Chef::Exceptions::Exec: stderr
[default] )
: stderr
[default]   from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/mixin/command.rb:131:in `run_command'
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/mixin/command.rb:199:in `run_command_with_systems_locale'
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/provider/package/apt.rb:68:in `install_package'
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/provider/package.rb:60:in `action_install' …
Run Code Online (Sandbox Code Playgroud)

cookbook chef-infra vagrant

15
推荐指数
1
解决办法
1万
查看次数

如何在厨师ruby_block中要求我的库

我正在开发一本食谱来部署一个简单的ROR应用程序.我写了一个app_helper.rb并把它放到我的cookbook的libraries目录中,这里是内容:

module AppHelper

    def self.find_gem
      if File.exists?("/usr/local/rvm/bin/rvm")
        return `/usr/local/rvm/bin/rvm default exec which gem`.chomp
      else
        return "/usr/bin/gem"
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

在recipes/default.rb中,我将上面的模块混合到Chef :: Recipe类中

class Chef::Recipe
  include AppHelper
end
Run Code Online (Sandbox Code Playgroud)

如您所知,可以从配方的任何位置调用find_gem函数.

当我试图在我的ruby_block中使用find_gem函数时,如下所示:

ruby_block "find gem" do
   block do
    gem_bin = Chef::Recipe::find_gem
    # or gem_bin = find_gem
  end
end
Run Code Online (Sandbox Code Playgroud)

我得到了一个N​​oMethodError:未定义的方法'find_gem'.

还尝试将模块混合到Chef :: Resource :: RubyBlock中,它既不起作用也不起作用.

class Chef::Resource::RubyBlock
  include AppHelper
end

ruby_block "find gem" do
   block do
    gem_bin = Chef::Resource::RubyBlock::find_gem
    # or gem_bin = find_gem
  end
end
Run Code Online (Sandbox Code Playgroud)

有没有办法从ruby_block调用模块中的函数?或者是否有一个厨师变量来定位库中的文件,以便我能够在ruby_block中需要该模块.

谢谢!

cookbook chef-infra

15
推荐指数
1
解决办法
2万
查看次数

如何在Cloudant/CouchDB中使用我的sql知识?

一些对查询SQL数据库有很好了解的开发人员很难在Cloudant/CouchDB中实现等效的查询模式.

这些开发人员如何将他们的SQL知识转换为Cloudant/CouchDB?

sql couchdb recipe cookbook cloudant

12
推荐指数
1
解决办法
3554
查看次数

Chef - 测试cookbook_file存在

有没有办法测试厨师食谱中是否存在给定的cookbook_file?我想做类似以下的事情:

cookbook_file "/etc/cron.d/#{service}" do
  source "etc/cron.d/#{service}"
  owner "root"
  group "root"
  mode "0644"
end
Run Code Online (Sandbox Code Playgroud)

如果文件"etc/cron.d/{service_name}"不存在则不会失败,因为我可能在计算机上运行了许多服务,但只有部分服务具有关联的cron作业.

我不想有一大堆服务来接受像cron那样的工作

['service_1', 'service_2', ...],
Run Code Online (Sandbox Code Playgroud)

因为那似乎相当脆弱.理想情况下,我希望有一个目录,其中包含需要它们的服务的cron作业,并且如果这些文件不存在,则配方不会失败.我正在寻找什么?

cookbook chef-infra

11
推荐指数
1
解决办法
6390
查看次数

解决和下载厨师食谱依赖关系

假设我想使用社区食谱(即http://community.opscode.com/cookbooks/gerrit).所以我将使用'knife cookbook site download'下载并上传到我当地的厨师服务器.我需要为每个直接和瞬态依赖重复此步骤.

是否有单个命令或工具来解析/下载食谱的所有直接和瞬态依赖性?

cookbook chef-infra knife

10
推荐指数
3
解决办法
1万
查看次数

你如何模块化厨师食谱?

下面是一个工作配方示例,它循环遍历一系列网站名称,并使用createIisWebsite()函数在IIS中创建它们.

def createIisWebsite(websiteName)
    iis_site websiteName do
      protocol :http
      port 80
      path "#{node['iis']['docroot']}/#{websiteName}"
      host_header  "#{websiteName}.test.kermit.a-aws.co.uk"
      action [:add,:start]
    end
end
Run Code Online (Sandbox Code Playgroud) 在我们的实际解决方案中,此数据存储在其他位置并通过Web API访问.
websiteNames = ["website-2", "website-3", "website-4"]

for websiteName in websiteNames do
    createIisWebsite websiteName
end
Run Code Online (Sandbox Code Playgroud)

现在我希望能够从本Cookbook中的多个配方中调用createIisWebsite()函数.

我试过把它扔进一个帮助模块(库).在那里,我无法获得对iis_site的引用.

我已经尝试将函数移动到default.rb然后执行include_recipe":: default".这似乎也不起作用.

我得到一个"在Windows版本6.2.9200上找不到createIisWebsite的资源"

我采用这种方法的原因是因为我希望有一个包含每个Web服务器集群的网站列表的配方.我觉得我没有采取最好的练习路线.

有任何想法吗?

ruby cookbook chef-infra chef-recipe

7
推荐指数
1
解决办法
6224
查看次数

什么是在特定的时间间隔内运行chef-client的最佳方式

目前我正在使用开源厨师,并且安装了大量客户端节点客户端.我希望厨师客户在特定的时间间隔内运行.任何好的食谱都在那里配置它.

cookbook chef-infra

6
推荐指数
2
解决办法
1万
查看次数

厨师食谱版删除,或更新特定版本

我有一个食谱的悠久历史,有一个应用程序的配方,并不断修改.它达到了食谱版本为226的程度.我想知道如何将文件上传到特定的食谱版本.我感谢您的帮助!

version cookbook chef-infra knife

6
推荐指数
1
解决办法
8244
查看次数

如何将环境变量传递给.kitchen.yml中的测试厨房

我正在尝试开发一本食谱,使一个烧瓶应用程序与gunicorn和nginx一起工作.我已经成功到应用程序运行良好的本地sqlite数据库,请参阅我的食谱https://github.com/harrywang/flasky-cookbook.烧瓶应用程序使用环境变量发送电子邮件,例如:MAIL_USERNAME = os.environ.get('MAIL_USERNAME'),如何在厨房汇聚期间使用测试厨房将这些环境变量传递给ubuntu虚拟机?

cookbook chef-infra flask gunicorn test-kitchen

6
推荐指数
2
解决办法
5866
查看次数