Articles of 厨师

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能获得什么?

通过从属性文件dynamic传递值创build厨师食谱

我创build了一个厨师食谱,其中提到了一个特定的rpm的安装。 这个rpm有一个版本号,需要从一个属性文件(它本身是dynamic创build的)dynamic加载。 这个厨师配方,然后需要加载到厨师服务器。 remote_file "Core_feature.rpm" do path "#{src_loc}core_feature_v91-2.noarch.rpm" 在这里, v91-2是需要通过读取属性文件dynamic进入配方的值。 这是可以实现的吗? 如果是的话,我该怎么去实现它(对ruby没有任何意见)!

在厨师运行期间,如何使用cookbook postgresql多次序列化postgresql.conf?

我创build了一个厨师食谱,做了一些事情,其中​​包括大量的数据导入PostgreSQL数据库。 我正在使用超市的'postgresql' 食谱 ,它允许我通过node['postgresql']['config']属性创build一个configuration文件。 我想在配方运行过程中更新postgresql.conf中的configuration,即在进行大的导入之前设置迎合大导入的值,随后在完成时更新这些值以便更好地满足日常的需求操作(特别是在导入之前, fsync和full_page_writes ' ,然后把这些' 打开 ')。 我创build了ruby_block资源,使我能够通过导入前后的通知来更新node.default['postgresql']['config']['fsync/full_page_write'] ,但这些更改没有序列化到postgresql。 conf,我猜是因为postgresql::server_conf已经在这个阶段运行了。 有没有一种方式,我可以发信号postgresql的食谱,我想node['postgresql']['config']在运行过程中多次序列化?

重新运行在厨师独奏执行块

我有一个运行外部安装脚本的执行块,我没有权力。 该安装脚本有时会立即做我想做的事情,在其他时间首先运行任意数量的更新,需要再次调用来进行实际的安装。 更新过程返回失败1,实际安装返回成功0.是否有一个优雅的方式来重新运行执行块,直到脚本返回0? 当然,我可以只将执行块的几个副本放入配方中,只有当创build的文件夹不存在时才运行,忽略运行是否成功。 但那将是难以置信的丑陋和黑客。

将超过6个EBS卷附加到EC2实例时遇到问题

我正在使用厨师创buildRAID10arrays。 上星期五上午(10/22)我可以在dev / sdz1-9上创build9个EBS卷的数组,没有任何问题 星期五晚上,我开始遇到了6个以上的EBS卷。 我把它归结为EC2的问题(可能超载),并在周末停止工作。 今天上午,问题仍在继续。 卷1-6附加罚款(例如/ dev / sdx1-6)。 之后的任何事情在同一个dev主要设备上永远处于“附着”状态。 然后,我可以使用/ dev / sdv1-6没有问题,但再次,不超过6在该主要设备上。 其他人注意到这样的行为? 我错过了什么吗?

在防火墙后面的厨师客户

我目前正在学习厨师。 到目前为止我所理解的是: 我必须在自己的服务器上安装厨师服务器或使用托pipe的厨师。 我必须在我想pipe理aka节点的服务器上安装chef-client(手动或使用knife bootstrap)。 我在我自己的PC上安装了几个厨师工具,可以用来pipe理节点,例如刀子。 现在在我的情况下,专长是节点在防火墙 /负载平衡器/代理之后。 节点可以通过NAT访问外部的服务器(http可以工作,我也可以configuration厨师特定的主机也可以)。 但是他们只能通过ssh隧道从外部联系。 真的有很多有关厨师的文档可用,但我没有find这些问题的答案: 使用刀时,在我自己的PC上手动设置ssh隧道还是厨师服务器需要联系节点时是否足够? 当使用刀,我可以configuration它自动设置一个SSH隧道? 当使用厨师服务器networking用户界面我可以configuration它通过SSH隧道连接到节点,或者我需要一个设置,我自己安装隧道,例如使用监视? 这是主办的厨师甚至可能吗? 而不是使用knife或web ui:我可以直接在使用chef-client的节点上发出相同的pipe理命令吗? 你会推荐什么解决scheme? 非常感谢您花时间帮助解答一个或多个相关问题

通过厨师引导服务器,并更改SSH端口

我有一套完整的配方,可以在Rackspace引导服务器,configuration和安装所有需要的configuration。 现在,我想更改SSH运行的默认端口。 这很容易做到,但问题是,如何告诉Knife在引导时使用22,而在注册节点上做所有其他事情时,如何使用非标准端口?

厨师食谱中的多个相关资源

我需要根据以前的执行结果来运行一些命令,这又取决于正在安装的一些软件包。 在第一次运行,我期望像这样: install package "XXX" get output from XXX for each line in output: if missing, use XXX to add if unknown, use XXX to delete 问题是,当我在配方的顶层执行逻辑时, get output包的get output部分将在package XXX安装之前发生。 我真的想通过使用ruby块(在处理资源时强制执行)来订购这些部分,但是似乎我无法将执行资源嵌套在ruby块资源中。 我怎样才能正确实现这一点? 配方是这样的: flavors_bag = data_bag_item('nova', 'flavors') cmd = Chef::ShellOut.new("nova-manage flavor list") flavors = cmd.run_command.stdout flavors_bag['spec'].each do |flavor| execute "nova-manage flavor create #{flavor['name']} #{flavor['ram']*1024} […]