sacloud / libsacloud

[Deprecated] Library for SAKURA Cloud API with Go
Apache License 2.0
18 stars 13 forks source link

参照系APIの戻り値にゾーン名がない #560

Closed yamamoto-febc closed 3 years ago

yamamoto-febc commented 4 years ago

from:

現在は一部のリソースを除きAPIのレスポンスにゾーン名がない。 このため、クライアント側でリクエスト先ゾーン名を保持する独自のstructを定義して対応している。

sakuraclodu_exporterでの例

全ゾーンに対してAPIを呼び、戻り値をマージして利用したい。 後続処理ではゾーン名を利用したい。

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,
        })
    }
}

// 後続処理

これをlibsacloud側でサポートしたい。

libsacloud v2での実装

APIモデルに直接ゾーン名を持たせる場合、現在のmapconvを用いてAPIからの戻り値を変換する方法だけだと実現できないため別途仕組みを実装する必要があり面倒。 また、sacloud.xxxFindResultなどのようにCountなどの検索結果メタデータとしてAPIモデルの外側に持たせる方法もあるが、現在のsacloud.xxxAPIのシグニチャを大幅に変えないといけないためこれも面倒。

このため、当面は直接的な対応を行わない。 (utilsパッケージなどでラップした型を返す実装を行う可能性はあるが未定)

yamamoto-febc commented 3 years ago

v3開発開始時に再オープンする。