我在菜谱中有一个default.rb文件,我正在尝试使用该文件引导一个ec2实例,并且正在尝试将我正在构建的本地虚拟环境中的站点包移至服务器上通过这本厨师食谱。
之所以这样,是因为我们的组织对如何将软件包放置到生产节点上非常严格,所以我实际上必须物理地移动我要使用的任何库。可能会有更好的方法来完成我想做的事情,而且我很愿意征求建议,但是目前,我遇到的问题是我不知道如何在其中引用本地目录foreach循环,因此它会继续尝试引用服务器上的文件夹,但是由于某种原因,我猜它尚未创建,即使我要查找的代码位于将其移动到那里的代码之后。
总体而言,我对该错误感到困惑,不胜感激,因为第一段代码应该将该文件夹移至该文件夹,所以为什么它不像该文件夹那样起作用,可以给出任何解释。
我的default.rb文件代码如下:
#
# Cookbook:: <cookbook_name>
# Recipe:: default
#
include_recipe "yum-epel"
# install packages
for dir in ["connector_1", "connector_2", "connector_3", "json_logger", "connector_4", "site-packages"] do
remote_directory "/usr/lib/python2.7/site-packages/#{dir}" do
source "app_packages/#{dir}"
files_mode "0655"
mode "0755"
end
end
# install required site packages
Dir.foreach('/usr/lib/python2.7/site-packages/site-packages/') do |dir|
next if not dir.end_with?('.dist-info')
remote_directory "/usr/lib/python2.7/#{dir}" do
source "app_packages/site-packages/#{dir}"
files_mode "0655"
mode "0755"
end
end
remote_directory "/home/app-automation/bin/app_deployment" do
source "app_deployment"
files_owner "app-automation"
files_group "app-automation"
files_mode "0660"
owner "app-automation"
group "app-automation"
mode "0770"
end
您正在将ruby代码与Chef dsl混合。它的行为与您期望的不同,因为包围\ wraps dsl厨师的Ruby代码如您所愿地在compile time and not on convergence time执行。