2016-02-04 41 views
0

首先我爲我的英語和我的建議表示歉意,我是Go的新手。 我試圖得到我的opsworks棧上的所有stackId的列表, 或者像我一樣使用ruby sdk給出堆棧名並獲取stackid,以便我可以使用其他服務調用,但現在我試圖獲取他們都熟悉sdk。aws-sdk-go describeStacks()試圖獲得stackids列表或從堆棧名稱獲取stackid

func main() { 

     svc := opsworks.New(session.New(&aws.Config{ 
       Region:  aws.String("us-east-1"), 
       Credentials: credentials.NewSharedCredentials("", "development"), 
     })) 


     resp, err := svc.DescribeStacks() 
     if err != nil { 
       fmt.Println(err.Error()) 
       return 
     }  

     fmt.Println(resp) 
} 

我省略「PARAMS」的原因是因爲這樣的: http://docs.aws.amazon.com/sdk-for-go/api/service/opsworks.html#type-DescribeStacksInput ,說:「來描述指定的堆疊ID的數組如果省略該參數,DescribeStacks返回的描述。每一堆「。

O不斷收到或「沒有足夠的參數調用svc.DescribeStacks」 或「alidationException:請不提供參數或一個或多個堆棧ID」或「!v(PANIC =反射:調用reflect.Value 。接口在零值)「

所以我嘗試了很多方法..不只是我粘貼在這裏..這就是爲什麼差異結果...改爲()爲(無)等..省略參數,所以我可以得到所有堆棧的列表。 我確定很愚蠢,有什麼想法?我有谷歌搜索等,但所有的例子是爲EC2或S3 ...

+1

調用'svc.DescribeStacks(nil)'適用於我。您是否正確設置了您的憑證? – fl0cke

+0

似乎是這樣,我在〜/ .aws /憑證中有不同的配置文件,這就是爲什麼要這樣使用它。 – cfernandezlinux

+0

這是我得到的(零)%!v(PANIC =反射:調用reflect.Value.Interface的零值)爲什麼適合你而不適合我?沒有什麼在那個錯誤告訴我任何東西 – cfernandezlinux

回答

0

得到了迴應,在主github問題的網站工作。

我看到謝謝澄清。您在180498284中列出的示例實際上是獲取所有堆棧ID列表的最佳方式。

要從響應中檢索單個堆棧ID,請使用opsworks.DescribeStacksOutput結構的字段。這個結構有一個字段Stacks,它是opsworks.Stack結構列表。 StackId是這個結構體上的一個字段。

resp, err := svc.DescribeStacks(nil) 
if err != nil { 
    return err 
} 

for _, stack := range resp.Stacks { 
    stackName := aws.StringValue(stack.Name) 
    if stackName == owstackname { 
     fmt.Printf("found %s stackid\n", stackName) 
     fmt.Println(aws.StringValue(stack.StackId)) 
    } 
} 

aws.StringValue函數是用於將SDK的輸入/輸出結構的字符串指針類型轉換爲值的幫助器。它還可以防止值返回到零,返回空字符串。