Skip to content

Commit a86ff60

Browse files
authored
feat(baremetal): add support for private network (#1451)
1 parent 52f31ff commit a86ff60

File tree

1 file changed

+334
-0
lines changed

1 file changed

+334
-0
lines changed

api/baremetal/v1/baremetal_sdk.go

Lines changed: 334 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,42 @@ func (enum *ListServerEventsRequestOrderBy) UnmarshalJSON(data []byte) error {
151151
return nil
152152
}
153153

154+
type ListServerPrivateNetworksRequestOrderBy string
155+
156+
const (
157+
// ListServerPrivateNetworksRequestOrderByCreatedAtAsc is [insert doc].
158+
ListServerPrivateNetworksRequestOrderByCreatedAtAsc = ListServerPrivateNetworksRequestOrderBy("created_at_asc")
159+
// ListServerPrivateNetworksRequestOrderByCreatedAtDesc is [insert doc].
160+
ListServerPrivateNetworksRequestOrderByCreatedAtDesc = ListServerPrivateNetworksRequestOrderBy("created_at_desc")
161+
// ListServerPrivateNetworksRequestOrderByUpdatedAtAsc is [insert doc].
162+
ListServerPrivateNetworksRequestOrderByUpdatedAtAsc = ListServerPrivateNetworksRequestOrderBy("updated_at_asc")
163+
// ListServerPrivateNetworksRequestOrderByUpdatedAtDesc is [insert doc].
164+
ListServerPrivateNetworksRequestOrderByUpdatedAtDesc = ListServerPrivateNetworksRequestOrderBy("updated_at_desc")
165+
)
166+
167+
func (enum ListServerPrivateNetworksRequestOrderBy) String() string {
168+
if enum == "" {
169+
// return default value if empty
170+
return "created_at_asc"
171+
}
172+
return string(enum)
173+
}
174+
175+
func (enum ListServerPrivateNetworksRequestOrderBy) MarshalJSON() ([]byte, error) {
176+
return []byte(fmt.Sprintf(`"%s"`, enum)), nil
177+
}
178+
179+
func (enum *ListServerPrivateNetworksRequestOrderBy) UnmarshalJSON(data []byte) error {
180+
tmp := ""
181+
182+
if err := json.Unmarshal(data, &tmp); err != nil {
183+
return err
184+
}
185+
186+
*enum = ListServerPrivateNetworksRequestOrderBy(ListServerPrivateNetworksRequestOrderBy(tmp).String())
187+
return nil
188+
}
189+
154190
type ListServersRequestOrderBy string
155191

156192
const (
@@ -427,6 +463,46 @@ func (enum *ServerPingStatus) UnmarshalJSON(data []byte) error {
427463
return nil
428464
}
429465

466+
type ServerPrivateNetworkStatus string
467+
468+
const (
469+
// ServerPrivateNetworkStatusUnknown is [insert doc].
470+
ServerPrivateNetworkStatusUnknown = ServerPrivateNetworkStatus("unknown")
471+
// ServerPrivateNetworkStatusAttaching is [insert doc].
472+
ServerPrivateNetworkStatusAttaching = ServerPrivateNetworkStatus("attaching")
473+
// ServerPrivateNetworkStatusAttached is [insert doc].
474+
ServerPrivateNetworkStatusAttached = ServerPrivateNetworkStatus("attached")
475+
// ServerPrivateNetworkStatusError is [insert doc].
476+
ServerPrivateNetworkStatusError = ServerPrivateNetworkStatus("error")
477+
// ServerPrivateNetworkStatusDetaching is [insert doc].
478+
ServerPrivateNetworkStatusDetaching = ServerPrivateNetworkStatus("detaching")
479+
// ServerPrivateNetworkStatusLocked is [insert doc].
480+
ServerPrivateNetworkStatusLocked = ServerPrivateNetworkStatus("locked")
481+
)
482+
483+
func (enum ServerPrivateNetworkStatus) String() string {
484+
if enum == "" {
485+
// return default value if empty
486+
return "unknown"
487+
}
488+
return string(enum)
489+
}
490+
491+
func (enum ServerPrivateNetworkStatus) MarshalJSON() ([]byte, error) {
492+
return []byte(fmt.Sprintf(`"%s"`, enum)), nil
493+
}
494+
495+
func (enum *ServerPrivateNetworkStatus) UnmarshalJSON(data []byte) error {
496+
tmp := ""
497+
498+
if err := json.Unmarshal(data, &tmp); err != nil {
499+
return err
500+
}
501+
502+
*enum = ServerPrivateNetworkStatus(ServerPrivateNetworkStatus(tmp).String())
503+
return nil
504+
}
505+
430506
type ServerStatus string
431507

432508
const (
@@ -619,6 +695,12 @@ type ListServerEventsResponse struct {
619695
Events []*ServerEvent `json:"events"`
620696
}
621697

698+
type ListServerPrivateNetworksResponse struct {
699+
ServerPrivateNetworks []*ServerPrivateNetwork `json:"server_private_networks"`
700+
701+
TotalCount uint32 `json:"total_count"`
702+
}
703+
622704
// ListServersResponse: list servers response
623705
type ListServersResponse struct {
624706
// TotalCount: total count of matching servers
@@ -869,6 +951,28 @@ type ServerOption struct {
869951
ExpiresAt *time.Time `json:"expires_at"`
870952
}
871953

954+
// ServerPrivateNetwork: server private network
955+
type ServerPrivateNetwork struct {
956+
// ID: the private network ID
957+
ID string `json:"id"`
958+
// ProjectID: the private network project ID
959+
ProjectID string `json:"project_id"`
960+
// ServerID: the server ID
961+
ServerID string `json:"server_id"`
962+
// PrivateNetworkID: the private network ID
963+
PrivateNetworkID string `json:"private_network_id"`
964+
// Vlan: the VLAN ID associated to the private network
965+
Vlan *uint32 `json:"vlan"`
966+
// Status: the configuration status of the private network
967+
//
968+
// Default value: unknown
969+
Status ServerPrivateNetworkStatus `json:"status"`
970+
// CreatedAt: the private network creation date
971+
CreatedAt *time.Time `json:"created_at"`
972+
// UpdatedAt: the date the private network was last modified
973+
UpdatedAt *time.Time `json:"updated_at"`
974+
}
975+
872976
// ServerRescueServer: server. rescue server
873977
type ServerRescueServer struct {
874978
// User: rescue user name
@@ -877,6 +981,10 @@ type ServerRescueServer struct {
877981
Password string `json:"password"`
878982
}
879983

984+
type SetServerPrivateNetworksResponse struct {
985+
ServerPrivateNetworks []*ServerPrivateNetwork `json:"server_private_networks"`
986+
}
987+
880988
// Setting: setting
881989
type Setting struct {
882990
// ID: ID of the setting
@@ -2200,6 +2308,213 @@ func (s *API) GetOS(req *GetOSRequest, opts ...scw.RequestOption) (*OS, error) {
22002308
return &resp, nil
22012309
}
22022310

2311+
type AddServerPrivateNetworkRequest struct {
2312+
// Zone:
2313+
//
2314+
// Zone to target. If none is passed will use default zone from the config
2315+
Zone scw.Zone `json:"-"`
2316+
// ServerID: the ID of the server
2317+
ServerID string `json:"-"`
2318+
// PrivateNetworkID: the ID of the private network
2319+
PrivateNetworkID string `json:"private_network_id"`
2320+
}
2321+
2322+
// AddServerPrivateNetwork: add a server to a private network
2323+
func (s *API) AddServerPrivateNetwork(req *AddServerPrivateNetworkRequest, opts ...scw.RequestOption) (*ServerPrivateNetwork, error) {
2324+
var err error
2325+
2326+
if req.Zone == "" {
2327+
defaultZone, _ := s.client.GetDefaultZone()
2328+
req.Zone = defaultZone
2329+
}
2330+
2331+
if fmt.Sprint(req.Zone) == "" {
2332+
return nil, errors.New("field Zone cannot be empty in request")
2333+
}
2334+
2335+
if fmt.Sprint(req.ServerID) == "" {
2336+
return nil, errors.New("field ServerID cannot be empty in request")
2337+
}
2338+
2339+
scwReq := &scw.ScalewayRequest{
2340+
Method: "POST",
2341+
Path: "/baremetal/v1/zones/" + fmt.Sprint(req.Zone) + "/servers/" + fmt.Sprint(req.ServerID) + "/private-networks",
2342+
Headers: http.Header{},
2343+
}
2344+
2345+
err = scwReq.SetBody(req)
2346+
if err != nil {
2347+
return nil, err
2348+
}
2349+
2350+
var resp ServerPrivateNetwork
2351+
2352+
err = s.client.Do(scwReq, &resp, opts...)
2353+
if err != nil {
2354+
return nil, err
2355+
}
2356+
return &resp, nil
2357+
}
2358+
2359+
type SetServerPrivateNetworksRequest struct {
2360+
// Zone:
2361+
//
2362+
// Zone to target. If none is passed will use default zone from the config
2363+
Zone scw.Zone `json:"-"`
2364+
// ServerID: the ID of the server
2365+
ServerID string `json:"-"`
2366+
// PrivateNetworkIDs: the IDs of the private networks
2367+
PrivateNetworkIDs []string `json:"private_network_ids"`
2368+
}
2369+
2370+
// SetServerPrivateNetworks: set multiple private networks on a server
2371+
func (s *API) SetServerPrivateNetworks(req *SetServerPrivateNetworksRequest, opts ...scw.RequestOption) (*SetServerPrivateNetworksResponse, error) {
2372+
var err error
2373+
2374+
if req.Zone == "" {
2375+
defaultZone, _ := s.client.GetDefaultZone()
2376+
req.Zone = defaultZone
2377+
}
2378+
2379+
if fmt.Sprint(req.Zone) == "" {
2380+
return nil, errors.New("field Zone cannot be empty in request")
2381+
}
2382+
2383+
if fmt.Sprint(req.ServerID) == "" {
2384+
return nil, errors.New("field ServerID cannot be empty in request")
2385+
}
2386+
2387+
scwReq := &scw.ScalewayRequest{
2388+
Method: "PUT",
2389+
Path: "/baremetal/v1/zones/" + fmt.Sprint(req.Zone) + "/servers/" + fmt.Sprint(req.ServerID) + "/private-networks",
2390+
Headers: http.Header{},
2391+
}
2392+
2393+
err = scwReq.SetBody(req)
2394+
if err != nil {
2395+
return nil, err
2396+
}
2397+
2398+
var resp SetServerPrivateNetworksResponse
2399+
2400+
err = s.client.Do(scwReq, &resp, opts...)
2401+
if err != nil {
2402+
return nil, err
2403+
}
2404+
return &resp, nil
2405+
}
2406+
2407+
type ListServerPrivateNetworksRequest struct {
2408+
// Zone:
2409+
//
2410+
// Zone to target. If none is passed will use default zone from the config
2411+
Zone scw.Zone `json:"-"`
2412+
// OrderBy: the sort order for the returned private networks
2413+
//
2414+
// Default value: created_at_asc
2415+
OrderBy ListServerPrivateNetworksRequestOrderBy `json:"-"`
2416+
// Page: the page number for the returned private networks
2417+
Page *int32 `json:"-"`
2418+
// PageSize: the maximum number of private networks per page
2419+
PageSize *uint32 `json:"-"`
2420+
// ServerID: filter private networks by server ID
2421+
ServerID *string `json:"-"`
2422+
// PrivateNetworkID: filter private networks by private network ID
2423+
PrivateNetworkID *string `json:"-"`
2424+
// OrganizationID: filter private networks by organization ID
2425+
OrganizationID *string `json:"-"`
2426+
// ProjectID: filter private networks by project ID
2427+
ProjectID *string `json:"-"`
2428+
}
2429+
2430+
// ListServerPrivateNetworks: list the private networks of a server
2431+
func (s *API) ListServerPrivateNetworks(req *ListServerPrivateNetworksRequest, opts ...scw.RequestOption) (*ListServerPrivateNetworksResponse, error) {
2432+
var err error
2433+
2434+
if req.Zone == "" {
2435+
defaultZone, _ := s.client.GetDefaultZone()
2436+
req.Zone = defaultZone
2437+
}
2438+
2439+
defaultPageSize, exist := s.client.GetDefaultPageSize()
2440+
if (req.PageSize == nil || *req.PageSize == 0) && exist {
2441+
req.PageSize = &defaultPageSize
2442+
}
2443+
2444+
query := url.Values{}
2445+
parameter.AddToQuery(query, "order_by", req.OrderBy)
2446+
parameter.AddToQuery(query, "page", req.Page)
2447+
parameter.AddToQuery(query, "page_size", req.PageSize)
2448+
parameter.AddToQuery(query, "server_id", req.ServerID)
2449+
parameter.AddToQuery(query, "private_network_id", req.PrivateNetworkID)
2450+
parameter.AddToQuery(query, "organization_id", req.OrganizationID)
2451+
parameter.AddToQuery(query, "project_id", req.ProjectID)
2452+
2453+
if fmt.Sprint(req.Zone) == "" {
2454+
return nil, errors.New("field Zone cannot be empty in request")
2455+
}
2456+
2457+
scwReq := &scw.ScalewayRequest{
2458+
Method: "GET",
2459+
Path: "/baremetal/v1/zones/" + fmt.Sprint(req.Zone) + "/server-private-networks",
2460+
Query: query,
2461+
Headers: http.Header{},
2462+
}
2463+
2464+
var resp ListServerPrivateNetworksResponse
2465+
2466+
err = s.client.Do(scwReq, &resp, opts...)
2467+
if err != nil {
2468+
return nil, err
2469+
}
2470+
return &resp, nil
2471+
}
2472+
2473+
type DeleteServerPrivateNetworkRequest struct {
2474+
// Zone:
2475+
//
2476+
// Zone to target. If none is passed will use default zone from the config
2477+
Zone scw.Zone `json:"-"`
2478+
// ServerID: the ID of the server
2479+
ServerID string `json:"-"`
2480+
// PrivateNetworkID: the ID of the private network
2481+
PrivateNetworkID string `json:"-"`
2482+
}
2483+
2484+
// DeleteServerPrivateNetwork: delete a private network
2485+
func (s *API) DeleteServerPrivateNetwork(req *DeleteServerPrivateNetworkRequest, opts ...scw.RequestOption) error {
2486+
var err error
2487+
2488+
if req.Zone == "" {
2489+
defaultZone, _ := s.client.GetDefaultZone()
2490+
req.Zone = defaultZone
2491+
}
2492+
2493+
if fmt.Sprint(req.Zone) == "" {
2494+
return errors.New("field Zone cannot be empty in request")
2495+
}
2496+
2497+
if fmt.Sprint(req.ServerID) == "" {
2498+
return errors.New("field ServerID cannot be empty in request")
2499+
}
2500+
2501+
if fmt.Sprint(req.PrivateNetworkID) == "" {
2502+
return errors.New("field PrivateNetworkID cannot be empty in request")
2503+
}
2504+
2505+
scwReq := &scw.ScalewayRequest{
2506+
Method: "DELETE",
2507+
Path: "/baremetal/v1/zones/" + fmt.Sprint(req.Zone) + "/servers/" + fmt.Sprint(req.ServerID) + "/private-networks/" + fmt.Sprint(req.PrivateNetworkID) + "",
2508+
Headers: http.Header{},
2509+
}
2510+
2511+
err = s.client.Do(scwReq, nil, opts...)
2512+
if err != nil {
2513+
return err
2514+
}
2515+
return nil
2516+
}
2517+
22032518
// UnsafeGetTotalCount should not be used
22042519
// Internal usage only
22052520
func (r *ListServersResponse) UnsafeGetTotalCount() uint32 {
@@ -2313,3 +2628,22 @@ func (r *ListOSResponse) UnsafeAppend(res interface{}) (uint32, error) {
23132628
r.TotalCount += uint32(len(results.Os))
23142629
return uint32(len(results.Os)), nil
23152630
}
2631+
2632+
// UnsafeGetTotalCount should not be used
2633+
// Internal usage only
2634+
func (r *ListServerPrivateNetworksResponse) UnsafeGetTotalCount() uint32 {
2635+
return r.TotalCount
2636+
}
2637+
2638+
// UnsafeAppend should not be used
2639+
// Internal usage only
2640+
func (r *ListServerPrivateNetworksResponse) UnsafeAppend(res interface{}) (uint32, error) {
2641+
results, ok := res.(*ListServerPrivateNetworksResponse)
2642+
if !ok {
2643+
return 0, errors.New("%T type cannot be appended to type %T", res, r)
2644+
}
2645+
2646+
r.ServerPrivateNetworks = append(r.ServerPrivateNetworks, results.ServerPrivateNetworks...)
2647+
r.TotalCount += uint32(len(results.ServerPrivateNetworks))
2648+
return uint32(len(results.ServerPrivateNetworks)), nil
2649+
}

0 commit comments

Comments
 (0)