2
我正在嘗試爲廚師的公衆Aws食譜寫一個包裝食譜。我正在製作一個安裝CodeDeploy代理的配方,它可以根據地區進行更改。我寫了幾個庫來幫助我做到這一點,但是當我的包裝食譜中的庫取決於原始食譜中的庫時,我陷入了困境。我不確定是否需要在這裏做一個require + include(如果我這樣做,我不知道需求的路徑)。廚師圖書館其他食譜圖書館依賴
我在我的metadata.rb文件中有'depends「aws」'。
我該如何正確設置依賴關係才能正常工作?此刻我得到這樣的錯誤
undefined method `instance_availability_zone' for Chef::Resource::RemoteFile
或者我在做這個完全錯誤?
這裏是有問題的庫
module Opscode
module Aws
module Ec2
module Region
# require '?????' # Do I need this?
# include Opscode::Aws::Ec2 # Do I need this?
def instance_region
# query instance region comes from Opscode::Aws::Ec2
# this is the dependency.
# Using Opscode::Aws::Ec2.instance_availability_zone doesn't
# work either.
@@instance_region ||= query_instance_region
end
def query_instance_region
region = instance_availability_zone
region = region[0, region.length - 1]
region
end
end
end
end
end
這個庫的作品,因爲我知道需要路徑
require File.join(File.dirname(__FILE__), 'ec2_region')
module Opscode
module Aws
module CodeDeploy
include Opscode::Aws::Ec2::Region
def codedeploy_region_url
@@region_url ||= query_codedeploy_region_url
end
def query_codedeploy_region_url
region = instance_region
codeDeployPath = "https://s3.amazonaws.com/aws-codedeploy-#{region}/latest/codedeploy-agent.noarch.rpm"
codeDeployPath
end
end
end
end
而這裏的食譜
Chef::Resource::RemoteFile.send(:include, Opscode::Aws::CodeDeploy)
remote_file "#{Chef::Config[:file_cache_path]}/codedeploy-agent.rpm" do
source codedeploy_region_url
end
謝謝,這似乎工作(與::配置,而不是::配置)。一般來說有沒有更好的方法來做到這一點?當Chef擁有自己的結構和加載庫的方式時,使用像普通ruby這樣的文件路徑似乎很有趣。我認爲Chef可能有某種內置的方法來查找庫依賴關係,特別是對於像這樣的子模塊。 – yoshiwaan 2015-03-25 16:13:41
事實上,是一個錯字,爲糾正編輯 – Tensibai 2015-03-25 16:14:36