【问题标题】:How to Split the AWS OpsWork output string in Chef .erb file.?如何拆分 Chef .erb 文件中的 AWS OpsWork 输出字符串。?
【发布时间】:2015-11-23 00:28:31
【问题描述】:

这是我想要实现的目标:

我有一个包含以下语句的厨师 erb 文件:

<% node[:opsworks][:layers][:mylayer][:instances].each do |private_ip| %>
- "<%= private_ip %>"
<% end %>

哪个产生了输出:

"["mylayer2", {"public_dns_name"=>nil, 
"private_dns_name"=>"ip-10-0-1-157.us-west-1.compute.internal", 
"backends"=>2, "ip"=>nil, 
"private_ip"=>"10.0.1.157",     
"instance_type"=>"t2.micro", 
"status"=>"online", 
"id"=>"ba33dad5-c294-44ab-bdb5-d292e02e0658", 
"aws_instance_id"=>"i-a93bb169", 
"elastic_ip"=>nil, 
"created_at"=>"2015-08-26T11:58:03+00:00", 
"booted_at"=>"2015-08-26T11:58:45+00:00", 
"region"=>"us-west-1", "availability_zone"=>"us-west-1a",
"infrastructure_class"=>"ec2"}]"

"["mylayer1", {"public_dns_name"=>nil, 
"private_dns_name"=>"ip-10-0-1-253.us-west-1.compute.internal", 
"backends"=>2, "ip"=>nil, 
"private_ip"=>"10.0.1.253", 
"instance_type"=>"t2.micro", 
"status"=>"online", 
"id"=>"be6e9645-ef12-416b-9401-e7379c3f85e1", 
"aws_instance_id"=>"i-b90c9b79", 
"elastic_ip"=>nil, 
"created_at"=>"2015-08-28T08:39:42+00:00", 
"booted_at"=>"2015-08-28T08:41:05+00:00", 
"region"=>"us-west-1", 
"availability_zone"=>"us-west-1a", 
"infrastructure_class"=>"ec2"}]"

它正在生成所有实例信息,但我需要像(仅私有 IP)这样的输出:

  • 10.0.1.157
  • 10.0.1.253

请帮我解决这个问题。

【问题讨论】:

  • 我的 Chef erb 文件内容为: - ""

标签: ruby chef-recipe aws-opsworks


【解决方案1】:

正如 IRC 中提到的,实例数据看起来可能是一个哈希,因此您可能希望同时获取键和值,然后从值中获取 private_ip:

<% node[:opsworks][:layers][:mylayer][:instances].each do |instance_name, instance_data| %>
- "<%= instance_data['private_ip'] %>"
<% end %>

【讨论】:

    【解决方案2】:

    看起来您通过迭代您的实例并在您这样做时调用每个实例private_ip 让自己感到困惑。试试这个:

    <% node[:opsworks][:layers][:mylayer][:instances].each do |instance| %>
    - "<%= instance['private_ip'] %>"
    <% end %>
    

    【讨论】:

    • 它不起作用:Chef::Mixin::Template::TemplateError(没有将符号隐式转换为整数)在第 4 行:2:storm.zookeeper.servers:3: 4: - "" 5: 6:
    • 仍然 - 相同的错误:Chef::Mixin::Template::TemplateError(没有将字符串隐式转换为整数)在第 4 行:2:storm.zookeeper.servers:3: 4: - "" 5: 6: (erubis):4:in []' (erubis):4:in block (2 levels) in evaluate' (erubis):3 :in each' (erubis):3:in block in evaluate'
    • 谁能帮帮我?
    • 这里我的实例有不同的名称,而不管我需要获取私有 IP 的实例名称。希望这可以帮助您理解我的问题。 @IBam
    猜你喜欢
    • 2014-09-05
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多