我正在尝试为厨师编写一本公共Aws食谱的包装食谱。我正在制作一个安装CodeDeploy代理的配方,它可以根据区域而改变。我已经编写了几个库来帮助我这样做,但是当我的包装菜谱中的库取决于原始菜谱中的库时,我会陷入困境。我不确定我是否需要在这里做一个require + include(如果我这样做,我不知道要求的路径)。
我的metadata.rb文件中有'依赖'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
答案 0 :(得分:0)
您可能需要使用chef-cache中的已知路径以及cookbook中库的已知路径。
这样的事情应该做:
require File.join(Chef::Config['chef_repo_path'],'cookbooks/aws/libraries/ec2_region')