1// This file was automatically generated. DO NOT EDIT. 2// If you have any remark or suggestion do not hesitate to open an issue. 3 4// Package applesilicon provides methods and message types of the applesilicon v1alpha1 API. 5package applesilicon 6 7import ( 8 "bytes" 9 "encoding/json" 10 "fmt" 11 "net" 12 "net/http" 13 "net/url" 14 "strings" 15 "time" 16 17 "github.com/scaleway/scaleway-sdk-go/internal/errors" 18 "github.com/scaleway/scaleway-sdk-go/internal/marshaler" 19 "github.com/scaleway/scaleway-sdk-go/internal/parameter" 20 "github.com/scaleway/scaleway-sdk-go/namegenerator" 21 "github.com/scaleway/scaleway-sdk-go/scw" 22) 23 24// always import dependencies 25var ( 26 _ fmt.Stringer 27 _ json.Unmarshaler 28 _ url.URL 29 _ net.IP 30 _ http.Header 31 _ bytes.Reader 32 _ time.Time 33 _ = strings.Join 34 35 _ scw.ScalewayRequest 36 _ marshaler.Duration 37 _ scw.File 38 _ = parameter.AddToQuery 39 _ = namegenerator.GetRandomName 40) 41 42// API: apple Mac mini M1 as a service 43// 44// Scaleway Apple silicon M1 as-a-Service is built using the latest generation of Apple Mac mini hardware (fifth generation). 45// 46// These dedicated Mac mini M1s are designed for developing, building, testing, and signing applications for Apple devices, including iPhones, iPads, Mac computers and much more. 47// 48// Get set to explore, learn and build on a dedicated Mac mini M1 with more performance and speed than you ever thought possible. 49// 50// **Apple silicon as a Service comes with a minimum allocation period of 24 hours**. 51// 52// Mac mini and macOS are trademarks of Apple Inc., registered in the U.S. and other countries and regions. 53// IOS is a trademark or registered trademark of Cisco in the U.S. and other countries and is used by Apple under license. 54// Scaleway is not affiliated with Apple Inc. 55// 56type API struct { 57 client *scw.Client 58} 59 60// NewAPI returns a API object from a Scaleway client. 61func NewAPI(client *scw.Client) *API { 62 return &API{ 63 client: client, 64 } 65} 66 67type ListServersRequestOrderBy string 68 69const ( 70 // ListServersRequestOrderByCreatedAtAsc is [insert doc]. 71 ListServersRequestOrderByCreatedAtAsc = ListServersRequestOrderBy("created_at_asc") 72 // ListServersRequestOrderByCreatedAtDesc is [insert doc]. 73 ListServersRequestOrderByCreatedAtDesc = ListServersRequestOrderBy("created_at_desc") 74) 75 76func (enum ListServersRequestOrderBy) String() string { 77 if enum == "" { 78 // return default value if empty 79 return "created_at_asc" 80 } 81 return string(enum) 82} 83 84func (enum ListServersRequestOrderBy) MarshalJSON() ([]byte, error) { 85 return []byte(fmt.Sprintf(`"%s"`, enum)), nil 86} 87 88func (enum *ListServersRequestOrderBy) UnmarshalJSON(data []byte) error { 89 tmp := "" 90 91 if err := json.Unmarshal(data, &tmp); err != nil { 92 return err 93 } 94 95 *enum = ListServersRequestOrderBy(ListServersRequestOrderBy(tmp).String()) 96 return nil 97} 98 99type ServerStatus string 100 101const ( 102 // ServerStatusUnknownStatus is [insert doc]. 103 ServerStatusUnknownStatus = ServerStatus("unknown_status") 104 // ServerStatusStarting is [insert doc]. 105 ServerStatusStarting = ServerStatus("starting") 106 // ServerStatusReady is [insert doc]. 107 ServerStatusReady = ServerStatus("ready") 108 // ServerStatusError is [insert doc]. 109 ServerStatusError = ServerStatus("error") 110 // ServerStatusRebooting is [insert doc]. 111 ServerStatusRebooting = ServerStatus("rebooting") 112 // ServerStatusUpdating is [insert doc]. 113 ServerStatusUpdating = ServerStatus("updating") 114 // ServerStatusLocking is [insert doc]. 115 ServerStatusLocking = ServerStatus("locking") 116 // ServerStatusLocked is [insert doc]. 117 ServerStatusLocked = ServerStatus("locked") 118 // ServerStatusUnlocking is [insert doc]. 119 ServerStatusUnlocking = ServerStatus("unlocking") 120 // ServerStatusReinstalling is [insert doc]. 121 ServerStatusReinstalling = ServerStatus("reinstalling") 122) 123 124func (enum ServerStatus) String() string { 125 if enum == "" { 126 // return default value if empty 127 return "unknown_status" 128 } 129 return string(enum) 130} 131 132func (enum ServerStatus) MarshalJSON() ([]byte, error) { 133 return []byte(fmt.Sprintf(`"%s"`, enum)), nil 134} 135 136func (enum *ServerStatus) UnmarshalJSON(data []byte) error { 137 tmp := "" 138 139 if err := json.Unmarshal(data, &tmp); err != nil { 140 return err 141 } 142 143 *enum = ServerStatus(ServerStatus(tmp).String()) 144 return nil 145} 146 147type ServerTypeStock string 148 149const ( 150 // ServerTypeStockUnknownStock is [insert doc]. 151 ServerTypeStockUnknownStock = ServerTypeStock("unknown_stock") 152 // ServerTypeStockNoStock is [insert doc]. 153 ServerTypeStockNoStock = ServerTypeStock("no_stock") 154 // ServerTypeStockLowStock is [insert doc]. 155 ServerTypeStockLowStock = ServerTypeStock("low_stock") 156 // ServerTypeStockHighStock is [insert doc]. 157 ServerTypeStockHighStock = ServerTypeStock("high_stock") 158) 159 160func (enum ServerTypeStock) String() string { 161 if enum == "" { 162 // return default value if empty 163 return "unknown_stock" 164 } 165 return string(enum) 166} 167 168func (enum ServerTypeStock) MarshalJSON() ([]byte, error) { 169 return []byte(fmt.Sprintf(`"%s"`, enum)), nil 170} 171 172func (enum *ServerTypeStock) UnmarshalJSON(data []byte) error { 173 tmp := "" 174 175 if err := json.Unmarshal(data, &tmp); err != nil { 176 return err 177 } 178 179 *enum = ServerTypeStock(ServerTypeStock(tmp).String()) 180 return nil 181} 182 183// ListOSResponse: list os response 184type ListOSResponse struct { 185 // TotalCount: total number of os 186 TotalCount uint32 `json:"total_count"` 187 // Os: list of OS 188 Os []*OS `json:"os"` 189} 190 191// ListServerTypesResponse: list server types response 192type ListServerTypesResponse struct { 193 // ServerTypes: the available server types 194 ServerTypes []*ServerType `json:"server_types"` 195} 196 197// ListServersResponse: list servers response 198type ListServersResponse struct { 199 // TotalCount: the total number of servers 200 TotalCount uint32 `json:"total_count"` 201 // Servers: the paginated returned servers 202 Servers []*Server `json:"servers"` 203} 204 205// OS: os 206type OS struct { 207 // ID: the OS unique ID 208 ID string `json:"id"` 209 // Name: the OS name 210 Name string `json:"name"` 211 // Label: the OS name as it should be displayed 212 Label string `json:"label"` 213 // ImageURL: URL of the image 214 ImageURL string `json:"image_url"` 215 // CompatibleServerTypes: list of compatible server types 216 CompatibleServerTypes []string `json:"compatible_server_types"` 217} 218 219// Server: server 220type Server struct { 221 // ID: UUID of the server 222 ID string `json:"id"` 223 // Type: type of the server 224 Type string `json:"type"` 225 // Name: name of the server 226 Name string `json:"name"` 227 // ProjectID: project this server is associated with 228 ProjectID string `json:"project_id"` 229 // OrganizationID: organization this server is associated with 230 OrganizationID string `json:"organization_id"` 231 // IP: iPv4 address of the server 232 IP net.IP `json:"ip"` 233 // VncURL: URL of the VNC 234 VncURL string `json:"vnc_url"` 235 // Status: current status of the server 236 // 237 // Default value: unknown_status 238 Status ServerStatus `json:"status"` 239 // CreatedAt: the date at which the server was created 240 CreatedAt *time.Time `json:"created_at"` 241 // UpdatedAt: the date at which the server was last updated 242 UpdatedAt *time.Time `json:"updated_at"` 243 // DeletableAt: the date at which the server was last deleted 244 DeletableAt *time.Time `json:"deletable_at"` 245 // Zone: the zone of the server 246 Zone scw.Zone `json:"zone"` 247} 248 249// ServerType: server type 250type ServerType struct { 251 // CPU: CPU description 252 CPU *ServerTypeCPU `json:"cpu"` 253 // Disk: size of the local disk of the server 254 Disk *ServerTypeDisk `json:"disk"` 255 // Name: name of the type 256 Name string `json:"name"` 257 // Memory: size of memory available 258 Memory *ServerTypeMemory `json:"memory"` 259 // Stock: current stock 260 // 261 // Default value: unknown_stock 262 Stock ServerTypeStock `json:"stock"` 263 // MinimumLeaseDuration: minimum duration of the lease in seconds 264 // 265 // Minimum duration of the lease in seconds (example. 3.4s). 266 MinimumLeaseDuration *scw.Duration `json:"minimum_lease_duration"` 267} 268 269type ServerTypeCPU struct { 270 Name string `json:"name"` 271 272 CoreCount uint32 `json:"core_count"` 273} 274 275type ServerTypeDisk struct { 276 Capacity scw.Size `json:"capacity"` 277 278 Type string `json:"type"` 279} 280 281type ServerTypeMemory struct { 282 Capacity scw.Size `json:"capacity"` 283 284 Type string `json:"type"` 285} 286 287// Service API 288 289type GetServiceInfoRequest struct { 290 Zone scw.Zone `json:"-"` 291} 292 293func (s *API) GetServiceInfo(req *GetServiceInfoRequest, opts ...scw.RequestOption) (*scw.ServiceInfo, error) { 294 var err error 295 296 if req.Zone == "" { 297 defaultZone, _ := s.client.GetDefaultZone() 298 req.Zone = defaultZone 299 } 300 301 if fmt.Sprint(req.Zone) == "" { 302 return nil, errors.New("field Zone cannot be empty in request") 303 } 304 305 scwReq := &scw.ScalewayRequest{ 306 Method: "GET", 307 Path: "/apple-silicon/v1alpha1/zones/" + fmt.Sprint(req.Zone) + "", 308 Headers: http.Header{}, 309 } 310 311 var resp scw.ServiceInfo 312 313 err = s.client.Do(scwReq, &resp, opts...) 314 if err != nil { 315 return nil, err 316 } 317 return &resp, nil 318} 319 320type ListServerTypesRequest struct { 321 Zone scw.Zone `json:"-"` 322} 323 324// ListServerTypes: list server types 325// 326// List all server types technical details. 327func (s *API) ListServerTypes(req *ListServerTypesRequest, opts ...scw.RequestOption) (*ListServerTypesResponse, error) { 328 var err error 329 330 if req.Zone == "" { 331 defaultZone, _ := s.client.GetDefaultZone() 332 req.Zone = defaultZone 333 } 334 335 if fmt.Sprint(req.Zone) == "" { 336 return nil, errors.New("field Zone cannot be empty in request") 337 } 338 339 scwReq := &scw.ScalewayRequest{ 340 Method: "GET", 341 Path: "/apple-silicon/v1alpha1/zones/" + fmt.Sprint(req.Zone) + "/server-types", 342 Headers: http.Header{}, 343 } 344 345 var resp ListServerTypesResponse 346 347 err = s.client.Do(scwReq, &resp, opts...) 348 if err != nil { 349 return nil, err 350 } 351 return &resp, nil 352} 353 354type GetServerTypeRequest struct { 355 Zone scw.Zone `json:"-"` 356 // ServerType: server type identifier 357 ServerType string `json:"-"` 358} 359 360// GetServerType: get a server type 361// 362// Get a server technical details. 363func (s *API) GetServerType(req *GetServerTypeRequest, opts ...scw.RequestOption) (*ServerType, error) { 364 var err error 365 366 if req.Zone == "" { 367 defaultZone, _ := s.client.GetDefaultZone() 368 req.Zone = defaultZone 369 } 370 371 if fmt.Sprint(req.Zone) == "" { 372 return nil, errors.New("field Zone cannot be empty in request") 373 } 374 375 if fmt.Sprint(req.ServerType) == "" { 376 return nil, errors.New("field ServerType cannot be empty in request") 377 } 378 379 scwReq := &scw.ScalewayRequest{ 380 Method: "GET", 381 Path: "/apple-silicon/v1alpha1/zones/" + fmt.Sprint(req.Zone) + "/server-type/" + fmt.Sprint(req.ServerType) + "", 382 Headers: http.Header{}, 383 } 384 385 var resp ServerType 386 387 err = s.client.Do(scwReq, &resp, opts...) 388 if err != nil { 389 return nil, err 390 } 391 return &resp, nil 392} 393 394type CreateServerRequest struct { 395 Zone scw.Zone `json:"-"` 396 // Name: create a server with this given name 397 Name string `json:"name"` 398 // ProjectID: create a server in the given project ID 399 ProjectID string `json:"project_id"` 400 // Type: create a server of the given type 401 Type string `json:"type"` 402} 403 404// CreateServer: create a server 405// 406// Create a server. 407func (s *API) CreateServer(req *CreateServerRequest, opts ...scw.RequestOption) (*Server, error) { 408 var err error 409 410 if req.ProjectID == "" { 411 defaultProjectID, _ := s.client.GetDefaultProjectID() 412 req.ProjectID = defaultProjectID 413 } 414 415 if req.Zone == "" { 416 defaultZone, _ := s.client.GetDefaultZone() 417 req.Zone = defaultZone 418 } 419 420 if req.Name == "" { 421 req.Name = namegenerator.GetRandomName("as") 422 } 423 424 if fmt.Sprint(req.Zone) == "" { 425 return nil, errors.New("field Zone cannot be empty in request") 426 } 427 428 scwReq := &scw.ScalewayRequest{ 429 Method: "POST", 430 Path: "/apple-silicon/v1alpha1/zones/" + fmt.Sprint(req.Zone) + "/servers", 431 Headers: http.Header{}, 432 } 433 434 err = scwReq.SetBody(req) 435 if err != nil { 436 return nil, err 437 } 438 439 var resp Server 440 441 err = s.client.Do(scwReq, &resp, opts...) 442 if err != nil { 443 return nil, err 444 } 445 return &resp, nil 446} 447 448type ListServersRequest struct { 449 Zone scw.Zone `json:"-"` 450 // OrderBy: the sort order of the returned servers 451 // 452 // Default value: created_at_asc 453 OrderBy ListServersRequestOrderBy `json:"-"` 454 // ProjectID: list only servers of this project ID 455 ProjectID *string `json:"-"` 456 // OrganizationID: list only servers of this organization ID 457 OrganizationID *string `json:"-"` 458 // Page: a positive integer to choose the page to return 459 Page *int32 `json:"-"` 460 // PageSize: a positive integer lower or equal to 100 to select the number of items to return 461 // 462 // Default value: 50 463 PageSize *uint32 `json:"-"` 464} 465 466// ListServers: list all servers 467// 468// List all servers. 469func (s *API) ListServers(req *ListServersRequest, opts ...scw.RequestOption) (*ListServersResponse, error) { 470 var err error 471 472 if req.Zone == "" { 473 defaultZone, _ := s.client.GetDefaultZone() 474 req.Zone = defaultZone 475 } 476 477 defaultPageSize, exist := s.client.GetDefaultPageSize() 478 if (req.PageSize == nil || *req.PageSize == 0) && exist { 479 req.PageSize = &defaultPageSize 480 } 481 482 query := url.Values{} 483 parameter.AddToQuery(query, "order_by", req.OrderBy) 484 parameter.AddToQuery(query, "project_id", req.ProjectID) 485 parameter.AddToQuery(query, "organization_id", req.OrganizationID) 486 parameter.AddToQuery(query, "page", req.Page) 487 parameter.AddToQuery(query, "page_size", req.PageSize) 488 489 if fmt.Sprint(req.Zone) == "" { 490 return nil, errors.New("field Zone cannot be empty in request") 491 } 492 493 scwReq := &scw.ScalewayRequest{ 494 Method: "GET", 495 Path: "/apple-silicon/v1alpha1/zones/" + fmt.Sprint(req.Zone) + "/servers", 496 Query: query, 497 Headers: http.Header{}, 498 } 499 500 var resp ListServersResponse 501 502 err = s.client.Do(scwReq, &resp, opts...) 503 if err != nil { 504 return nil, err 505 } 506 return &resp, nil 507} 508 509// UnsafeGetTotalCount should not be used 510// Internal usage only 511func (r *ListServersResponse) UnsafeGetTotalCount() uint32 { 512 return r.TotalCount 513} 514 515// UnsafeAppend should not be used 516// Internal usage only 517func (r *ListServersResponse) UnsafeAppend(res interface{}) (uint32, error) { 518 results, ok := res.(*ListServersResponse) 519 if !ok { 520 return 0, errors.New("%T type cannot be appended to type %T", res, r) 521 } 522 523 r.Servers = append(r.Servers, results.Servers...) 524 r.TotalCount += uint32(len(results.Servers)) 525 return uint32(len(results.Servers)), nil 526} 527 528type ListOSRequest struct { 529 Zone scw.Zone `json:"-"` 530 // Page: a positive integer to choose the page to return 531 Page *int32 `json:"-"` 532 // PageSize: a positive integer lower or equal to 100 to select the number of items to return 533 // 534 // Default value: 50 535 PageSize *uint32 `json:"-"` 536 // ServerType: list of compatible server type 537 ServerType *string `json:"-"` 538 // Name: filter os by name (for eg. "11.1" will return "11.1.2" and "11.1" but not "12") 539 Name *string `json:"-"` 540} 541 542// ListOS: list all Operating System (OS) 543// 544// List all Operating System (OS). 545func (s *API) ListOS(req *ListOSRequest, opts ...scw.RequestOption) (*ListOSResponse, error) { 546 var err error 547 548 if req.Zone == "" { 549 defaultZone, _ := s.client.GetDefaultZone() 550 req.Zone = defaultZone 551 } 552 553 defaultPageSize, exist := s.client.GetDefaultPageSize() 554 if (req.PageSize == nil || *req.PageSize == 0) && exist { 555 req.PageSize = &defaultPageSize 556 } 557 558 query := url.Values{} 559 parameter.AddToQuery(query, "page", req.Page) 560 parameter.AddToQuery(query, "page_size", req.PageSize) 561 parameter.AddToQuery(query, "server_type", req.ServerType) 562 parameter.AddToQuery(query, "name", req.Name) 563 564 if fmt.Sprint(req.Zone) == "" { 565 return nil, errors.New("field Zone cannot be empty in request") 566 } 567 568 scwReq := &scw.ScalewayRequest{ 569 Method: "GET", 570 Path: "/apple-silicon/v1alpha1/zones/" + fmt.Sprint(req.Zone) + "/os", 571 Query: query, 572 Headers: http.Header{}, 573 } 574 575 var resp ListOSResponse 576 577 err = s.client.Do(scwReq, &resp, opts...) 578 if err != nil { 579 return nil, err 580 } 581 return &resp, nil 582} 583 584// UnsafeGetTotalCount should not be used 585// Internal usage only 586func (r *ListOSResponse) UnsafeGetTotalCount() uint32 { 587 return r.TotalCount 588} 589 590// UnsafeAppend should not be used 591// Internal usage only 592func (r *ListOSResponse) UnsafeAppend(res interface{}) (uint32, error) { 593 results, ok := res.(*ListOSResponse) 594 if !ok { 595 return 0, errors.New("%T type cannot be appended to type %T", res, r) 596 } 597 598 r.Os = append(r.Os, results.Os...) 599 r.TotalCount += uint32(len(results.Os)) 600 return uint32(len(results.Os)), nil 601} 602 603type GetOSRequest struct { 604 Zone scw.Zone `json:"-"` 605 // OsID: UUID of the OS you want to get 606 OsID string `json:"-"` 607} 608 609// GetOS: get an Operating System (OS) 610// 611// Get an Operating System (OS). 612func (s *API) GetOS(req *GetOSRequest, opts ...scw.RequestOption) (*OS, error) { 613 var err error 614 615 if req.Zone == "" { 616 defaultZone, _ := s.client.GetDefaultZone() 617 req.Zone = defaultZone 618 } 619 620 if fmt.Sprint(req.Zone) == "" { 621 return nil, errors.New("field Zone cannot be empty in request") 622 } 623 624 if fmt.Sprint(req.OsID) == "" { 625 return nil, errors.New("field OsID cannot be empty in request") 626 } 627 628 scwReq := &scw.ScalewayRequest{ 629 Method: "GET", 630 Path: "/apple-silicon/v1alpha1/zones/" + fmt.Sprint(req.Zone) + "/os/" + fmt.Sprint(req.OsID) + "", 631 Headers: http.Header{}, 632 } 633 634 var resp OS 635 636 err = s.client.Do(scwReq, &resp, opts...) 637 if err != nil { 638 return nil, err 639 } 640 return &resp, nil 641} 642 643type GetServerRequest struct { 644 Zone scw.Zone `json:"-"` 645 // ServerID: UUID of the server you want to get 646 ServerID string `json:"-"` 647} 648 649// GetServer: get a server 650// 651// Get a server. 652func (s *API) GetServer(req *GetServerRequest, opts ...scw.RequestOption) (*Server, error) { 653 var err error 654 655 if req.Zone == "" { 656 defaultZone, _ := s.client.GetDefaultZone() 657 req.Zone = defaultZone 658 } 659 660 if fmt.Sprint(req.Zone) == "" { 661 return nil, errors.New("field Zone cannot be empty in request") 662 } 663 664 if fmt.Sprint(req.ServerID) == "" { 665 return nil, errors.New("field ServerID cannot be empty in request") 666 } 667 668 scwReq := &scw.ScalewayRequest{ 669 Method: "GET", 670 Path: "/apple-silicon/v1alpha1/zones/" + fmt.Sprint(req.Zone) + "/servers/" + fmt.Sprint(req.ServerID) + "", 671 Headers: http.Header{}, 672 } 673 674 var resp Server 675 676 err = s.client.Do(scwReq, &resp, opts...) 677 if err != nil { 678 return nil, err 679 } 680 return &resp, nil 681} 682 683type UpdateServerRequest struct { 684 Zone scw.Zone `json:"-"` 685 // ServerID: UUID of the server you want to update 686 ServerID string `json:"-"` 687 // Name: updated name for your server 688 Name *string `json:"name"` 689} 690 691// UpdateServer: update a server 692// 693// Update a server. 694func (s *API) UpdateServer(req *UpdateServerRequest, opts ...scw.RequestOption) (*Server, error) { 695 var err error 696 697 if req.Zone == "" { 698 defaultZone, _ := s.client.GetDefaultZone() 699 req.Zone = defaultZone 700 } 701 702 if fmt.Sprint(req.Zone) == "" { 703 return nil, errors.New("field Zone cannot be empty in request") 704 } 705 706 if fmt.Sprint(req.ServerID) == "" { 707 return nil, errors.New("field ServerID cannot be empty in request") 708 } 709 710 scwReq := &scw.ScalewayRequest{ 711 Method: "PATCH", 712 Path: "/apple-silicon/v1alpha1/zones/" + fmt.Sprint(req.Zone) + "/servers/" + fmt.Sprint(req.ServerID) + "", 713 Headers: http.Header{}, 714 } 715 716 err = scwReq.SetBody(req) 717 if err != nil { 718 return nil, err 719 } 720 721 var resp Server 722 723 err = s.client.Do(scwReq, &resp, opts...) 724 if err != nil { 725 return nil, err 726 } 727 return &resp, nil 728} 729 730type DeleteServerRequest struct { 731 Zone scw.Zone `json:"-"` 732 // ServerID: UUID of the server you want to delete 733 ServerID string `json:"-"` 734} 735 736// DeleteServer: delete a server 737// 738// Delete a server. 739func (s *API) DeleteServer(req *DeleteServerRequest, opts ...scw.RequestOption) error { 740 var err error 741 742 if req.Zone == "" { 743 defaultZone, _ := s.client.GetDefaultZone() 744 req.Zone = defaultZone 745 } 746 747 if fmt.Sprint(req.Zone) == "" { 748 return errors.New("field Zone cannot be empty in request") 749 } 750 751 if fmt.Sprint(req.ServerID) == "" { 752 return errors.New("field ServerID cannot be empty in request") 753 } 754 755 scwReq := &scw.ScalewayRequest{ 756 Method: "DELETE", 757 Path: "/apple-silicon/v1alpha1/zones/" + fmt.Sprint(req.Zone) + "/servers/" + fmt.Sprint(req.ServerID) + "", 758 Headers: http.Header{}, 759 } 760 761 err = s.client.Do(scwReq, nil, opts...) 762 if err != nil { 763 return err 764 } 765 return nil 766} 767 768type RebootServerRequest struct { 769 Zone scw.Zone `json:"-"` 770 // ServerID: UUID of the server you want to reboot 771 ServerID string `json:"-"` 772} 773 774// RebootServer: reboot a server 775// 776// Reboot a server. 777func (s *API) RebootServer(req *RebootServerRequest, opts ...scw.RequestOption) (*Server, error) { 778 var err error 779 780 if req.Zone == "" { 781 defaultZone, _ := s.client.GetDefaultZone() 782 req.Zone = defaultZone 783 } 784 785 if fmt.Sprint(req.Zone) == "" { 786 return nil, errors.New("field Zone cannot be empty in request") 787 } 788 789 if fmt.Sprint(req.ServerID) == "" { 790 return nil, errors.New("field ServerID cannot be empty in request") 791 } 792 793 scwReq := &scw.ScalewayRequest{ 794 Method: "POST", 795 Path: "/apple-silicon/v1alpha1/zones/" + fmt.Sprint(req.Zone) + "/servers/" + fmt.Sprint(req.ServerID) + "/reboot", 796 Headers: http.Header{}, 797 } 798 799 err = scwReq.SetBody(req) 800 if err != nil { 801 return nil, err 802 } 803 804 var resp Server 805 806 err = s.client.Do(scwReq, &resp, opts...) 807 if err != nil { 808 return nil, err 809 } 810 return &resp, nil 811} 812 813type ReinstallServerRequest struct { 814 Zone scw.Zone `json:"-"` 815 // ServerID: UUID of the server you want to reinstall 816 ServerID string `json:"-"` 817} 818 819// ReinstallServer: reinstall a server 820// 821// Reinstall a server. 822func (s *API) ReinstallServer(req *ReinstallServerRequest, opts ...scw.RequestOption) (*Server, error) { 823 var err error 824 825 if req.Zone == "" { 826 defaultZone, _ := s.client.GetDefaultZone() 827 req.Zone = defaultZone 828 } 829 830 if fmt.Sprint(req.Zone) == "" { 831 return nil, errors.New("field Zone cannot be empty in request") 832 } 833 834 if fmt.Sprint(req.ServerID) == "" { 835 return nil, errors.New("field ServerID cannot be empty in request") 836 } 837 838 scwReq := &scw.ScalewayRequest{ 839 Method: "POST", 840 Path: "/apple-silicon/v1alpha1/zones/" + fmt.Sprint(req.Zone) + "/servers/" + fmt.Sprint(req.ServerID) + "/reinstall", 841 Headers: http.Header{}, 842 } 843 844 err = scwReq.SetBody(req) 845 if err != nil { 846 return nil, err 847 } 848 849 var resp Server 850 851 err = s.client.Do(scwReq, &resp, opts...) 852 if err != nil { 853 return nil, err 854 } 855 return &resp, nil 856} 857