0

我需要显示在 ec2 上运行的服务器信息。我已经设法将它们显示为 json,但现在我只需要显示某些字段。下面显示了我如何显示statusCodeand 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"]

但不确定当我通过代码获取值时如何向地图添加值

4

2 回答 2

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 ]
  }
}

更新问题后更新

于 2013-05-20T14:35:48.917 回答
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 ]
           }
      }

请注意,内部循环已简化。我不确定它是否符合您的用例场景,因为存在内部循环。如果您认为地图需要在循环内向下移动一级,那么您也需要在列表中维护一个键值对(或地图)列表。

collect使用 groovy和inject功能可以过度简化逻辑。

于 2013-05-20T14:30:55.200 回答