type Server struct {
*sacloud.Server
ZoneName string
}
// 全ゾーンに対してFindを実行、結果をマージする
var result []*Server
zones := []string { "is1a", "is1b", "tk1a" }
for _ , zone := range zones {
searched, err := serverOp.Find(ctx, zone, ...)
for _ , server := range searched.Servers {
result = append(result, &Server{
Server: server,
ZoneName: zone,
})
}
}
// 後続処理
from:
現在は一部のリソースを除きAPIのレスポンスにゾーン名がない。 このため、クライアント側でリクエスト先ゾーン名を保持する独自のstructを定義して対応している。
sakuraclodu_exporterでの例
全ゾーンに対してAPIを呼び、戻り値をマージして利用したい。 後続処理ではゾーン名を利用したい。
これをlibsacloud側でサポートしたい。
libsacloud v2での実装
APIモデルに直接ゾーン名を持たせる場合、現在のmapconvを用いてAPIからの戻り値を変換する方法だけだと実現できないため別途仕組みを実装する必要があり面倒。 また、sacloud.xxxFindResultなどのように
Count
などの検索結果メタデータとしてAPIモデルの外側に持たせる方法もあるが、現在のsacloud.xxxAPIのシグニチャを大幅に変えないといけないためこれも面倒。このため、当面は直接的な対応を行わない。 (
utils
パッケージなどでラップした型を返す実装を行う可能性はあるが未定)