@@ -757,6 +757,7 @@ const (
757
757
ServerStatusOutOfStock = ServerStatus ("out_of_stock" )
758
758
ServerStatusOrdered = ServerStatus ("ordered" )
759
759
ServerStatusResetting = ServerStatus ("resetting" )
760
+ ServerStatusMigrating = ServerStatus ("migrating" )
760
761
)
761
762
762
763
func (enum ServerStatus ) String () string {
@@ -781,6 +782,7 @@ func (enum ServerStatus) Values() []ServerStatus {
781
782
"out_of_stock" ,
782
783
"ordered" ,
783
784
"resetting" ,
785
+ "migrating" ,
784
786
}
785
787
}
786
788
@@ -1294,6 +1296,9 @@ type Offer struct {
1294
1296
1295
1297
// Gpus: gPU specifications of the offer.
1296
1298
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"`
1297
1302
}
1298
1303
1299
1304
// Option: option.
@@ -1956,6 +1961,15 @@ func (r *ListSettingsResponse) UnsafeAppend(res interface{}) (uint32, error) {
1956
1961
return uint32 (len (results .Settings )), nil
1957
1962
}
1958
1963
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
+
1959
1973
// PrivateNetworkAPIAddServerPrivateNetworkRequest: private network api add server private network request.
1960
1974
type PrivateNetworkAPIAddServerPrivateNetworkRequest struct {
1961
1975
// 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
2833
2847
return & resp , nil
2834
2848
}
2835
2849
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
+
2836
2881
// ListOffers: List all available Elastic Metal server configurations.
2837
2882
func (s * API ) ListOffers (req * ListOffersRequest , opts ... scw.RequestOption ) (* ListOffersResponse , error ) {
2838
2883
var err error
0 commit comments