1

我正在尝试在 Chef 配方中使用 AWS OpsWorks 上实例的 IP,代码如下所示:

variables(
  :db_host => (node[:scraper][:db_host] rescue nil),
  :db_user => (node[:scraper][:db_user] rescue nil),
  :db_pass => (node[:scraper][:db_pass] rescue nil),
  :db_name => (node[:scraper][:db_name] rescue nil),
  :beanstalk_host => (node[:opsworks][:layers][:admin][:instances].first[:private_ip])
)

但我得到一个TypeError - Symbol as array index错误。

我不是 Ruby 开发人员,所以我对尝试什么有点迷茫。甚至文档也列出了该语法:

以下示例获取 HAProxy 层的第一个实例的私有 IP 地址: node[:opsworks][:layers][:lb][:instances].first[:private_ip]

当我记录node[:opsworks][:layers][:admin][:instances].first我得到的值时:

["admin1", {"elastic_ip"=>"54.221.245....

4

1 回答 1

1

错误是正确的:您不能将符号用作数组索引。

根据你最后一行的输出,因为它以 a 开头[,所以它是一个数组。

很可能您正在尝试使用符号在数组的第二个位置索引字典:private_ip。在这种情况下,正确的行是

node[:opsworks][:layers][:admin][:instances].first[1][:private_ip]

你需要在脑海中一步一步走。如果node[:opsworks][:layers][:admin][:instances].first返回

["admin1", {"elastic_ip"=>"54.221.245....}]

然后node[:opsworks][:layers][:admin][:instances].first[1]将返回

{"elastic_ip"=>"54.221.245....}
于 2013-09-05T22:52:11.997 回答