@@ -757,6 +757,7 @@ const (
757757 ServerStatusOutOfStock = ServerStatus ("out_of_stock" )
758758 ServerStatusOrdered = ServerStatus ("ordered" )
759759 ServerStatusResetting = ServerStatus ("resetting" )
760+ ServerStatusMigrating = ServerStatus ("migrating" )
760761)
761762
762763func (enum ServerStatus ) String () string {
@@ -781,6 +782,7 @@ func (enum ServerStatus) Values() []ServerStatus {
781782 "out_of_stock" ,
782783 "ordered" ,
783784 "resetting" ,
785+ "migrating" ,
784786 }
785787}
786788
@@ -1294,6 +1296,9 @@ type Offer struct {
12941296
12951297 // Gpus: gPU specifications of the offer.
12961298 Gpus []* GPU `json:"gpus"`
1299+
1300+ // MonthlyOfferID: exist only for hourly offers, to migrate to the monthly offer.
1301+ MonthlyOfferID * string `json:"monthly_offer_id"`
12971302}
12981303
12991304// Option: option.
@@ -1956,6 +1961,15 @@ func (r *ListSettingsResponse) UnsafeAppend(res interface{}) (uint32, error) {
19561961 return uint32 (len (results .Settings )), nil
19571962}
19581963
1964+ // MigrateServerToMonthlyOfferRequest: migrate server to monthly offer request.
1965+ type MigrateServerToMonthlyOfferRequest struct {
1966+ // Zone: zone to target. If none is passed will use default zone from the config.
1967+ Zone scw.Zone `json:"-"`
1968+
1969+ // ServerID: ID of the server.
1970+ ServerID string `json:"-"`
1971+ }
1972+
19591973// PrivateNetworkAPIAddServerPrivateNetworkRequest: private network api add server private network request.
19601974type PrivateNetworkAPIAddServerPrivateNetworkRequest struct {
19611975 // Zone: zone to target. If none is passed will use default zone from the config.
@@ -2833,6 +2847,37 @@ func (s *API) DeleteOptionServer(req *DeleteOptionServerRequest, opts ...scw.Req
28332847 return & resp , nil
28342848}
28352849
2850+ // MigrateServerToMonthlyOffer: Migrate server with hourly offer to monthly offer.
2851+ func (s * API ) MigrateServerToMonthlyOffer (req * MigrateServerToMonthlyOfferRequest , opts ... scw.RequestOption ) (* Server , error ) {
2852+ var err error
2853+
2854+ if req .Zone == "" {
2855+ defaultZone , _ := s .client .GetDefaultZone ()
2856+ req .Zone = defaultZone
2857+ }
2858+
2859+ if fmt .Sprint (req .Zone ) == "" {
2860+ return nil , errors .New ("field Zone cannot be empty in request" )
2861+ }
2862+
2863+ if fmt .Sprint (req .ServerID ) == "" {
2864+ return nil , errors .New ("field ServerID cannot be empty in request" )
2865+ }
2866+
2867+ scwReq := & scw.ScalewayRequest {
2868+ Method : "POST" ,
2869+ Path : "/baremetal/v1/zones/" + fmt .Sprint (req .Zone ) + "/servers/" + fmt .Sprint (req .ServerID ) + "/migrate-offer-monthly" ,
2870+ }
2871+
2872+ var resp Server
2873+
2874+ err = s .client .Do (scwReq , & resp , opts ... )
2875+ if err != nil {
2876+ return nil , err
2877+ }
2878+ return & resp , nil
2879+ }
2880+
28362881// ListOffers: List all available Elastic Metal server configurations.
28372882func (s * API ) ListOffers (req * ListOffersRequest , opts ... scw.RequestOption ) (* ListOffersResponse , error ) {
28382883 var err error
0 commit comments