如何拆分 Chef .erb 文件中的 AWS OpsWork 输出字符串。?
How to Split the AWS OpsWork output string in Chef .erb file.?
这是我要实现的目标:
我有一个厨师 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
请帮我解决这个问题。
您似乎在遍历实例并在调用每个实例时让自己感到困惑 private_ip
。试试这个:
<% node[:opsworks][:layers][:mylayer][:instances].each do |instance| %>
- "<%= instance['private_ip'] %>"
<% end %>
正如在 IRC 上提到的,实例数据看起来可能是一个散列,因此您需要同时获取键和值,然后从值中获取 private_ip:
<% node[:opsworks][:layers][:mylayer][:instances].each do |instance_name, instance_data| %>
- "<%= instance_data['private_ip'] %>"
<% end %>
这是我要实现的目标:
我有一个厨师 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
请帮我解决这个问题。
您似乎在遍历实例并在调用每个实例时让自己感到困惑 private_ip
。试试这个:
<% node[:opsworks][:layers][:mylayer][:instances].each do |instance| %>
- "<%= instance['private_ip'] %>"
<% end %>
正如在 IRC 上提到的,实例数据看起来可能是一个散列,因此您需要同时获取键和值,然后从值中获取 private_ip:
<% node[:opsworks][:layers][:mylayer][:instances].each do |instance_name, instance_data| %>
- "<%= instance_data['private_ip'] %>"
<% end %>