Chef 设置库中的属性 code/definition
Chef set attribute from library code/definition
快速上下文:我想编写一个根据实例所在的 AWS 区域动态变化的配方。我想安装 CodeDeploy 代理,它根据实例的区域从 S3 存储桶下载。因此,我需要一个设置为 region
的属性
AWS public 说明书有执行此操作的代码,但未设置属性:
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
它甚至在相同的 class 中使用,以某种方式获得我想要的格式的区域
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]
...
所以我想将上面的区域设置为属性节点['was']['region']之类的,但我缺乏这样做的技巧。我想我需要把它放在一个定义中然后以某种方式调用它?
问题总结:如何通过 运行 ruby 代码(来自库文件)在 chef 中设置属性?
你可以让 ohai 来做这些工作。
node[ec2][placement_availability_zone]
由ohai设置。您只需要从整个 AZ 字符串中解析出该区域。
我相信 node[ec2][placement_availability_zone].match(/.*-\d/)
会成功的。
如果您使用的是 VPC 节点,则需要为 ohai 添加 ec2 提示。这可以通过在引导节点时传递 --hint ec2
来最容易地实现。
快速上下文:我想编写一个根据实例所在的 AWS 区域动态变化的配方。我想安装 CodeDeploy 代理,它根据实例的区域从 S3 存储桶下载。因此,我需要一个设置为 region
的属性AWS public 说明书有执行此操作的代码,但未设置属性:
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
它甚至在相同的 class 中使用,以某种方式获得我想要的格式的区域
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]
...
所以我想将上面的区域设置为属性节点['was']['region']之类的,但我缺乏这样做的技巧。我想我需要把它放在一个定义中然后以某种方式调用它?
问题总结:如何通过 运行 ruby 代码(来自库文件)在 chef 中设置属性?
你可以让 ohai 来做这些工作。
node[ec2][placement_availability_zone]
由ohai设置。您只需要从整个 AZ 字符串中解析出该区域。
node[ec2][placement_availability_zone].match(/.*-\d/)
会成功的。
如果您使用的是 VPC 节点,则需要为 ohai 添加 ec2 提示。这可以通过在引导节点时传递 --hint ec2
来最容易地实现。