Tag: 厨师

访问Chef Library中的节点属性

我想创建一个Chef库: 提供一些命名空间函数 访问节点的属性 该库旨在与外部系统连接并从那里检索一些输入。 我需要访问节点属性以允许用户覆盖从外部系统接收的输入: 期望的用法(食谱) inputs = MyLib.get_inputs 图书馆(我现在拥有的) 这是受那些文档的启发。 class Chef::Recipe::MyLib def self.get_inputs override_inputs = node.fetch(:mylib, Hash.new).fetch(:override_inputs, nil) unless override_inputs.nil? return override_inputs end # Do stuff and return inputs (no problem here) # … end end 问题 现在我得到: undefined local variable or method `node’ for Chef::Recipe::Scalr:Class

如何检查Chef中是否存在文件夹?

这是我的代码: if !::File.exist?(“#{node[‘iis’][‘home’]}\\backup\\BkpB4Chef”) windows_batch “Backup IIS Config” do code <<-EOH "#{node['iis']['home']}"\\appcmd add backup BkpB4Chef EOH end end 它总是说文件存在并执行循环。

使用Ruby / Chef Recipe for Vagrant导入Mysql数据库

我正在编写一个自动设置开发环境的厨师脚本。 我可以创建一个数据库并授予权限,但我试图找到一种方法将mysql转储文件导入刚刚创建的数据库。 我授予访问权限的代码是 ruby_block “Execute grants” do block do require ‘rubygems’ Gem.clear_paths require ‘mysql’ m = Mysql.new(‘localhost’, “root”, node[:mysql][:server_root_password]) m.query(“GRANT ALL ON *.* TO ‘root’@’10.0.0.1’ IDENTIFIED BY ‘#{node[:mysql][:server_root_password]}'”) m.query(‘FLUSH PRIVILEGES’) end end 我希望我能够执行以下查询#m.query(“-u root -p root db_name < /project/db/import.sql") 但只是给了我一个错误。 我没有做太多的Ruby,所以很难弄明白。 谁知道我怎么做到这一点?

如何匹配前五个字符的路径

我必须到达位置/var/log/acpchef/commv123 ,其中123可以更改为456 。 我累了Dir.glob 。 我需要/var/log/acpchef/commv*** 。 我的执行将在mixlibshellout 。 begin cwd_kernel = Dir.glob(‘/var/cache/acpchef/commv***’) cmd = Mixlib::ShellOut.new(“commandrun”, :cwd => cwd_kernel) cmd.run_command log ‘run’ end

如何从Chef cookbook中的库访问当前节点?

我正在尝试为厨师食谱编写一个库,简化了一些常见搜索。 例如,我希望能够在cookbook/libraries/library.rb执行类似的操作,然后在同一个cookbook中的配方中使用它: module Example def self.search_attribute(attribute_name) return search(:nodes, node[attribute_name]) end end 问题是,在Chef库文件中, node对象或searchfunction都不可用。 使用Chef::Search::Query.new().search(…)似乎可以Chef::Search::Query.new().search(…) ,但我找不到任何可以访问node 。 由此产生的错误是: undefined local variable or method `node’ for Example:Module 使用Chef 10.16.4。

/ usr / bin / env ruby​​_noexec_wrapper失败,没有文件或目录

当我尝试启动chef-solr作为服务时,它失败并出现以下错误 # service chef-solr start Starting chef-solr: /usr/bin/env: ruby_noexec_wrapper: No such file or directory [FAILED] 但是当我从命令行手动运行它时,它已成功运行 # chef-solr -d -c /etc/chef/solr.rb -L /var/log/chef/solr.log -P /var/run/chef/solr.pid # echo $? 0 # ps -ef | grep chef root 2691 1 12 04:19 ? 00:00:01 java -Xmx256M -Xms256M -Dsolr.data.dir=/var/lib/chef/solr/data -Dsolr.solr.home=/var/lib/chef/solr/home -jar /var/lib/chef/solr/jetty/start.jar 这是我的rvm信息 # rvm info ruby-1.9.3-p194: system: […]

如何使用Chef懒惰地评估任意变量

我正在编写一个Chef配方来安装我们的应用程序代码并执行它。 配方需要特别关注此代码最终的目录(用于运行模板,设置日志转发等)。 因此,目录本身会在不同的食谱中出现在很多地方。 我试图获取/定义一个变量,所以我可以在我的资源块中使用字符串插值重新使用它。 这非常简单: home = node[‘etc’][‘passwd’][node[‘nodejs’][‘user’]][‘dir’] 一个示例用法是运行npm install同时告诉它在主目录中插入repo下载,如下所示: execute “npm install” do command “npm install #{prefix}#{app} –prefix #{home}” end 除了定义home变量的第一个块将在编译时运行。 在新的服务器上,我的nodejs用户帐户可能尚不存在,这是一个问题,给出了一个 NoMethodError undefined method ‘[]’ for nil:NilClass 我有一些解决方法,但我想要一个特定的解决方案,使home变量只在配方执行时获取,而不是编译时。 解决方法1 动态评估ruby块内的home变量,如下所示: ruby_block “fetch home dir” do block do home = node[‘etc’][‘passwd’][node[‘nodejs’][‘user’]][‘dir’] end end 这似乎没有实际效果,当你尝试做类似这样的事情时, 为Chef :: Resource :: Directory提供一个NoMethodError未定义方法的主页 : directory “.npm” do path […]

如何使用Ruby块在Chef recipe中分配变量

我正在尝试在Chef配方中动态执行Ruby逻辑,并相信实现这一目标的最佳方法是使用块。 我无法将块内分配的变量传输到主厨配方的主代码中。 这是我试过的: ruby_block “Create list” do block do to_use ||= [] node[‘hosts’].each do |host| system( “#{path}/command –all” \ ” | awk ‘{print $2; print $3}'” \ ” | grep #{host} > /dev/null” ) unless $? == 0 to_use << host end end node['hosts'] = to_use.join(',') end action :create end execute "Enable on hosts" do […]

Ruby代码块和Chef

我是Ruby和Chef的新手。 我一直试图绕过语法并做一些研究,但我相信大家都知道,除非你知道术语,否则很难找到你想要的东西。 我已经阅读了Ruby代码块,但是Chef代码块仍然让我感到困惑。 我看到这样的事情: log “a debug string” do level :debug end 这会在日志中添加“调试字符串”。 从我所看到的情况来看,在我看来它应该表示为: log do |message| #some logic end Chef将这些视为资源。 有人可以帮助解释语法差异并给我一些术语,我可以从中开始教育自己吗?

如何在命令行中捕获值并添加到配方?

我是Chef和Ruby的新手 我需要在命令行上将两个变量传递给Chef,并在配方中提供这些变量。 我如何捕捉这些价值并将其送到厨师手中? 我需要这样的东西: before_deploy command execute param1 param2 deploy{ param1/param2} param1和param2在运行时从命令行获取其值。