如何在Ruby中的CLI命令中合并一个数组

时间:2017-07-05 23:47:48

标签: arrays ruby amazon-web-services

我很难在ruby中的AWS cli命令中实现一个数组。 我有一组帐户,我想从特定帐号获取特定政策的政策版本详细信息。我想循环显示帐号并获取帐号的具体政策详情。

这是我的当前代码,当我硬编码帐号

时,它有效
require 'aws-sdk'
require 'json'
require 'rest-client'

puts "Here is the current version of the CloudHealth Policy"

accnt  = [899163431116, 2382308203823, 8989089089080]
puts "here is the zero index" 
puts accnt [0]
j = `aws iam get-policy-version --policy-arn arn:aws:iam::899163431116:policy/cloudhealth-access-policy --version-id v2 --profile jo`
my_hash = JSON.parse(j)
puts JSON.pretty_generate my_hash["PolicyVersion"]

我想收集阵列的意思,所以我可以通过cli命令中的硬编码通过accnt数字循环

 require 'aws-sdk'
require 'json'
require 'rest-client'

puts "Here is the current version of the CloudHealth Policy"

accnt = [899163431116, 2382308203823, 8989089089080]
puts "here is the zero index" 
puts accnt[0]
j = `aws iam get-policy-version --policy-arn arn:aws:iam::accnt[0]:policy/cloudhealth-access-policy --version-id v2 --profile jo`
my_hash = JSON.parse(j)
puts JSON.pretty_generate my_hash["PolicyVersion"]

1 个答案:

答案 0 :(得分:1)

如果你想插值,你需要请求插值:

j = `aws ... arn:aws:iam::#{accnt[0]}:policy...`

如果您使用#{...}表示法来指示您希望扩展该部分,则仅对字符串进行插值。在你的案例accnt[0]中只是纯文本,它是字符串的一部分。

您可能希望将代码扩展为更像这样:

accnt.each do |id|
  j = `aws ... arn:aws:iam::#{id}:policy...`
  # ...Other code relating to parsing/printing for this round
end

不要忘记AWS Ruby库可以执行命令行aws工具可以执行的所有操作,因此可能不需要在此处使用shell。 Aws::IAM::Policy课程应该能够得到你需要的东西。