我需要显示在ec2上运行的服务器信息。我已经设法将它们显示为json,但现在我只需要显示某些字段。以下显示了我如何显示statusCode
和RunType
。类似的概念适用于其他领域。
def check = reservations.each { Reservation reservation ->
reservation.instances.each() { Instance instance ->
def code = instance.state
def StatusCode = code.code
//Get other values
instance.tags.each() { Tag tag5 ->
def KeyName2 = tag5.key;
if (KeyName2 == 'RunType') {
def RunType = tag5.value;
}
}
}
instance.tags.each() { Tag tag2 ->
def KeyName2 = tag2.key;
if (KeyName2 == 'RunType') {
def value2 = tag2.value; }
}
instance.tags.each() { Tag tag3 ->
def KeyName3 = tag3.key;
if (KeyName3 == 'StartedBy') {
def value = tag3.value;
}
}
我想获得这样的东西在我的gsp页面中显示并为每个服务器循环它。
def map = [StatusCode:"80", RunType:"Always", value"test", value2:"abc"]
但是当我通过代码获取它们时,不确定如何向地图添加值
答案 0 :(得分:1)
您可以使用此功能:
def result = reservations.collectMany { reservation ->
reservation.instances.collect { instance ->
[ StatusCode: instance.code,
RunType : instance.tags.find { it.key == 'RunType' }?.value,
StartedBy : instance.tags.find { it.key == 'StartedBy' }?.value ]
}
}
更新问题后更新
答案 1 :(得分:0)
从代码看起来,statusCode可以有多个value5
。如果情况并非如此,那么您可以执行以下操作:
def myList = []
def check = reservations.each { Reservation reservation ->
reservation.instances.each() { Instance instance ->
def statusCode = instance.state?.code
def value5 = instance.tags?.find{it.key == 'RunType'}?.value
myList << ["StatusCode": statusCode, "RunType": value5 ]
}
}
注意内循环是简化的。我不确定它是否符合您的用例场景,因为存在内部循环。如果您认为地图需要在循环内向下移动一级,那么您还要在列表中维护一个键值对(或地图)的列表。
使用groovy的collect
和inject
功能可以过度简化逻辑。