Tag: 厨师

访问ruby块内的厨师资源

我一直试图在厨师文档和谷歌中找到答案,但我无法想出任何东西。 我不是一个ruby家伙,所以答案可能源于我接近“厨师足够ruby”的问题。 这就是我想要做的事情:在我的deploy资源中,在before_migrate属性中,我想在我当前的配方中执行资源。 我目前正在做的是将资源填充到块本身,但我知道必须有更好的方法来实现它。 before_migrate do template “#{app_root}/#{applet_name}/local_settings.py” do source “local_settings.py.erb” owner app_config[‘user’] group app_config[‘group’] variables( :database_name => app_config[‘postgresql’][‘database_name’], :user => app_config[‘postgresql’][‘user’], :password => app_config[‘postgresql’][‘password’] ) action :create end end 我的目标是什么 before_migrate do “template #{app_root}/#{applet_name}/local_settings.py”.execute end 所以我可以重复使用该模板代码。 谢谢!

有没有办法将资源的属性解析延迟到“执行”阶段?

我有两个LWRP。 第一部分涉及创建磁盘卷,格式化它并将其安装在虚拟机上,我们将此资源cloud_volume 。 第二个资源(它的作用并不重要)需要一个UUID用于新格式化的卷,这是一个必需的属性,我们将这个资源称为foobar 。 资源cloud_volume和foobar用于如下的配方中。 volumes.each do |mount_point, volume| cloud_volume “#{mount_point}” do size volume[‘size’] label volume[‘label’] action [:create, :initialize] end foobar “#{mount_point}” do disk_uuid node[:volumes][mount_point][:uuid] # This is set by cloud_volume action [:do_stuff] end end 所以,当我做一个厨师运行时,我得到一个Required argument disk_identifier is missing! 例外。 在做了一些挖掘之后,我发现配方分两个阶段进行处理,即编译阶段和执行阶段。 看起来问题是在编译时,因为这是node[:volumes][mount_point][:uuid]未设置的时间点。 不幸的是,我不能使用OpsCode在这里的技巧,因为通知正在cloud_volume LWRP中使用(因此它将落入文档中显示的反模式) 所以,经过这一切,我的问题是,有没有办法解决在编译时知道disk_uuid值的要求?

Chef – 用动态变量创建模板?

我对厨师食谱有点挑战。 我是厨师的新手,所以请耐心等待。 第1步:我的厨师食谱安装Ruby Passenger,然后编译Passenger nginx模块和Nginx。 # Install passenger and nginx module bash “Install Passenger” do code < 0 } end # Install passenger # Note that we have to explicitly include the RVM script otherwise it won’t setup the environment correctly bash “Install passenger nginx module and nginx from source” do code <<-EOF source /usr/local/rvm/scripts/rvm […]

在厨师执行期间在本机扩展包之后安装gem

虽然在安装本机软件包之前安装了gem,但我尝试在大厨配方中安装雾gem,因此gem安装失败 package “libxslt-dev” package “libxml2-dev” chef_gem “fog” 这是输出 [Thu, 14 Mar 2013 13:04:30 +0000] INFO: Processing chef_gem[fog] action install (ebs4000::update_volumes line 23) [Thu, 14 Mar 2013 13:04:52 +0000] ERROR: Running exception handlers [Thu, 14 Mar 2013 13:04:52 +0000] FATAL: Saving node information to /var/cache/chef/failed-run-data.json [Thu, 14 Mar 2013 13:04:52 +0000] ERROR: Exception handlers complete [Thu, […]

如何使用Chef设置环境变量?

这是一个类似的问题,但无法管理它:我想简单地设置一个env变量,然后使用它: execute “start zookeeper” do cwd “/opt/zookeeper-3.4.5/bin” command “./zkServer.sh start” environment “JVMFLAGS” => “-Xmx#{heap_jvm} -Xms#{heap_jvm}” user “root” action :run end 我也尝试使用bash “export JVMFLAGS=’-blabla'”但仍然运行sh而没有设置变量。 是否存在阻止我的sh脚本检查变量的问题? 我可以像模板一样使用sh并替换JVMFLAGS的发生…但我想检查是否有更好的解决方案..

Chef Ruby循环遍历.erb模板文件中的属性

所以这可能有点令人困惑,但请耐心等待。 简而言之,我希望使用某个键值循环所有属性,然后在值不为空时将它们插入模板中。 这是我的代码: 属性: # === Default file Configurations # default[‘elasticsearch’][‘default’][‘ES_USER’] = ” default[‘elasticsearch’][‘default’][‘ES_GROUP’] = ” default[‘elasticsearch’][‘default’][‘ES_HEAP_SIZE’] = ” default[‘elasticsearch’][‘default’][‘MAX_OPEN_FILES’] = ” default[‘elasticsearch’][‘default’][‘MAX_LOCKED_MEMORY’] = ‘unlimited’ default[‘elasticsearch’][‘default’][‘MAX_MAP_COUNT’] = ” default[‘elasticsearch’][‘default’][‘LOG_DIR’] = ‘/var/log/elasticsearch’ default[‘elasticsearch’][‘default’][‘DATA_DIR’] = ‘/var/lib/elasticsearch’ default[‘elasticsearch’][‘default’][‘WORK_DIR’] = ‘/tmp/elasticsearch’ default[‘elasticsearch’][‘default’][‘CONF_DIR’] = ‘/etc/elasticsearch’ default[‘elasticsearch’][‘default’][‘CONF_FILE’] = ‘/etc/elasticsearch/elasticsearch.yml’ default[‘elasticsearch’][‘default’][‘RESTART_ON_UPGRADE’] = ” 模板: = 输出(希望): MAX_LOCKED_MEMORY=unlimited LOG_DIR=/var/log/elasticsearch DATA_DIR=/var/lib/elasticsearch WORK_DIR=/tmp/elasticsearch CONF_DIR=/etc/elasticsearch CONF_FILE=/etc/elasticsearch/elasticsearch.yml […]

在ruby课中调用刀

我想围绕刀创建一个很好的包装类,以允许程序以可读的方式运行刀命令。 我目前正在尝试使用chef gem中的knife.rb文件作为一些成功的指南。 但是,我在关闭编辑器时遇到了问题。 如果我运行以下代码: require ‘chef/knife’ knife = Chef::Knife.new knife.run([‘client’, ‘create’, ‘new-client’], ‘–disable-editing’) 它会导致以下错误: NoMethodError: undefined method `merge!’ for “–disable-editing”:String 任何人对如何成功地有任何想法? 是否存在一个已经存在的库,可以满足我的需要?

rbenv应该在系统范围内安装还是在用户级安装?

我正在建立一个流浪汉设置,其中一部分是安装rbenv。 我正在使用图书管理员厨师管理我所有的厨师食谱,并安装了rbenv和ruby-build。 但是,当我尝试ssh到我的Vagrant VM并输入ruby -v我得到了标准的系统安装的ruby 1.8.7 (2012-02-08 patchlevel 358) [x86_64-linux] 。 考虑到可能没有安装rbenv,我尝试运行rbenv versions ,但事实上安装了rbenv: vagrant@precise64:~$ rbenv versions * system (set by /opt/rbenv/version) 那么我试过rbenv install [version] : vagrant@precise64:~$ rbenv install 1.9.3-p327 […] BUILD FAILED […] test -z “/opt/rbenv/versions/1.9.3-p327/include” || /bin/mkdir -p “/opt/rbenv/versions/1.9.3-p327/include” /bin/mkdir: cannot create directory `/opt/rbenv/versions/1.9.3-p327′: Permission denied 失败, Permission denied 。 我尝试用sudo重新安装: sudo rbenv […]

Chef和ruby模板 – 如何循环键值对?

1)我有一个数据包如下: “zookeeper”:{ “server1″:”111.111.111.111”, “server2″:”222.222.222.222” }, 2)在我的食谱中,我得到哈希如下。 data_bag(“mydb”) db = data_bag_item(“mydb”, “rtb”) ZOOKEEPER = db[‘zookeeper’] 3)同样在我的食谱中我有一个模板如下: template “/etc/zookeeper/conf/zoo.cfg” do path “/etc/zookeeper/conf/” source “zoo.cfg.erb” owner “root” group “root” mode “0644” variables :zookeeper => #{ZOOKEEPER} end 4)我需要让我的模板看起来像这样 server.1=111.111.111.111:2888:3888 server.2=222.222.222.222:2888:3888 我的问题是这个。 如何将哈希传递给模板,以便循环哈希并创建temlplate? 我不是一个强大的ruby编码器。 例如: count = 1 for server, ipaddress in zookeeper: server.count=ipaddress:2888:3888 count = count + 1

厨师和erb模板。 如何使用布尔代码块

我是Chef,ruby,ruby DSL和erb的新手。 我来自python。 在ruby erb模板中,我想做这样的事情。 ALL OF MY NGINX TEXT ALL OF MY REDIS TEXT 很明显,我错过了正确的语法。 谢谢