2013-05-20 30 views
0

我需要顯示在ec2上運行的服務器信息。我設法將它們顯示爲json,但現在我只需要顯示某些字段。以下顯示我如何顯示statusCodeRunType。類似的概念適用於其他領域。如何在grails的這種情況下使用map?

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

,但不知道如何添加值當我得到他們直通代碼

+1

您可以編輯您的問題補充那種你所期望得到的地圖是形狀後更新? –

+0

那麼,你想要一個地圖列表?這很難看到你有什麼,你想要什麼... –

+0

是的,我想你必須最終使用地圖列表。請參閱下面的答案。 – dmahapatro

回答

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

更新的問題

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的collectinject功能可以過度簡化邏輯。

+0

StatusCode和Value5 r不同的字段,我想我很困惑你。 Value5是runtype。 –

+0

您可以在問題中顯示一個結構化的虛擬地圖,以瞭解您想如何獲得最終結果? – dmahapatro

+0

類似於我在那裏的地圖 –