gpt4 book ai didi

ruby - Chef 库其他 Recipe 库依赖

转载 作者:太空宇宙 更新时间:2023-11-03 16:47:57 24 4
gpt4 key购买 nike

我正在尝试为 Chef 中的 Public Aws Recipe 编写包装 Recipe 。我正在制作一个安装 CodeDeploy 代理的配方,它可以根据地区而变化。我已经编写了几个库来帮助我做到这一点,但是当我的包装 Recipe 中的库依赖于原始 Recipe 中的库时,我陷入了困境。我不确定我是否需要在此处执行 require + include(如果需要,我不知道 require 的路径)。

我的 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

这是 Recipe

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-cache 到 cookbook 中库的已知路径。

应该这样做:

require File.join(Chef::Config['chef_repo_path'],'cookbooks/aws/libraries/ec2_region')

关于ruby - Chef 库其他 Recipe 库依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29244575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com