如何在Chef Recipe中访问metadata的source_url属性?
在Chef Recipe中访问metadata.rb里的source_url属性
嘿,这个问题我做Chef开发时刚好碰到过,其实Chef本身就提供了很直接的方式来获取元数据里的属性,不用绕弯路!
核心思路是通过Chef的运行上下文(run_context)获取当前食谱的元数据对象,然后直接读取source_url属性就行,具体代码示例如下:
# 在你的Recipe文件中添加这段代码 # 获取当前食谱的source_url cookbook_source_url = node.run_context.cookbook_collection[cookbook_name].metadata.source_url # 可以用日志输出验证结果 Chef::Log.info("当前食谱的源码仓库地址: #{cookbook_source_url}")
简单解释下这段代码的逻辑:
node.run_context.cookbook_collection:这是Chef运行时加载的所有食谱的集合[cookbook_name]:这是Chef内置的变量,自动指向当前正在执行的食谱名称,不用手动写死.metadata:拿到对应食谱的元数据对象,里面包含了metadata.rb里定义的所有属性.source_url:直接读取你需要的属性值
另外要注意,得确保你的metadata.rb里已经正确定义了这个属性,比如:
# metadata.rb中的示例定义 source_url 'https://github.com/your-username/your-chef-cookbook'
如果是在自定义资源或者其他非Recipe的Chef代码里,逻辑也是类似的,只要能拿到对应食谱的metadata对象就能读取这个属性。
内容的提问来源于stack exchange,提问作者ZedTuX
相关产品推荐
相关产品推荐

