【问题标题】:Chef set attribute from library code/definition厨师从库代码/定义中设置属性
【发布时间】:2015-03-29 07:07:30
【问题描述】:

快速上下文:我想编写一个根据实例所在的 AWS 区域动态更改的配方。我想安装 CodeDeploy 代理,它根据实例所在的区域从 S3 存储桶下载。因此,我需要一个设置为区域的属性

AWS 公共食谱有执行此操作的代码,但未设置为属性:

def instance_availability_zone
  @@instance_availability_zone ||= query_instance_availability_zone
end
...
 def query_instance_availability_zone
  availability_zone = open('http://169.254.169.254/latest/meta-data/placement/availability-zone/', options = { proxy: false }) { |f| f.gets }
  fail 'Cannot find availability zone!' unless availability_zone
  Chef::Log.debug("Instance's availability zone is #{availability_zone}")
  availability_zone
end

它甚至可以在同一个类中以某种方式使用我想要的格式

def create_aws_interface(aws_interface)
  begin
    require 'aws-sdk'
    rescue LoadError
    Chef::Log.error("Missing gem 'aws-sdk'. Use the default aws recipe to install it first.")
  end
  region = instance_availability_zone
  region = region[0, region.length - 1]
...

所以我想将上面的区域设置为属性 node['was']['region'] 或类似的,但我缺乏这样做的技能。我想我需要把它放在一个定义中,然后以某种方式调用它?

问题总结:如何通过运行 ruby​​ 代码(来自库文件)在 chef 中设置属性?

这是食谱:https://github.com/opscode-cookbooks/aws

【问题讨论】:

  • node.set['was']['region']='value' 呢?
  • 如果我不能让它工作,那就是后备。我真的更喜欢能够使用运行列表来处理 AWS 实例并完成它。另外,如果有人忘记执行此操作,那么 CodeDeploy 将无法工作,并且很难调试。

标签: ruby chef-infra cookbook


【解决方案1】:

你可以让 ohai 做这项工作。

node[ec2][placement_availability_zone] 由 ohai 设置。您只需要从整个 AZ 字符串中解析出该区域。

node[ec2][placement_availability_zone].match(/.*-\d/) 会成功的,我相信。

如果您使用的是 VPC 节点,则需要为 ohai 添加 ec2 提示。这可以通过在引导节点时传递 --hint ec2 来最轻松地完成。

【讨论】:

  • 非常好,这是一个完全不同的解决方案。如果您编辑答案以包含依赖项以使其正常工作,那么我会将其标记为正确。依赖项是 1) 需要 sigar gem,因此您的食谱也需要 chef_gem 'sigar' 2) 文件 /etc/chef/ohai/hints/ec2.json 需要存在于服务器上才能进行检测。这是由knife ec2 server create自动创建的,但不是其他方式,需要通过其他方式(如用户数据或云形成模板)添加。
  • 这看起来也可能存在错误。 tickets.opscode.com/browse/OHAI-489。这在很久以前就解决了,但我在 ohai 8.1.1 上遇到了这个问题
  • 您在哪里看到需要 sigar 宝石?我已经使用这种方法一年了,没有发生任何事故,而且我从来没有加入任何厨师宝石。
  • 我刚刚用刀 ec2 启动了一个实例,然后运行了 ohai -l debug。我没有在我的食谱中得到价值,所以不得不用 ohai 进行调试。我不断得到looks_like_ec2? == false 在 oh 输出中带有一条消息说 sigar 无法在上面加载。当我在我的食谱中加入一个 chef_gem 'sigar' 时,我开始得到looks_like_ec2? == 真。
  • 你使用的是什么操作系统?
猜你喜欢
  • 2015-05-08
  • 1970-01-01
  • 2014-03-10
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多