Skip to content

Commit 03f1793

Browse files
feat(baremetal): add private network API (#169)
Co-authored-by: Vincent Germain <[email protected]>
1 parent 098e518 commit 03f1793

File tree

5 files changed

+320
-2
lines changed

5 files changed

+320
-2
lines changed

packages/clients/src/api/baremetal/v1/api.gen.ts

Lines changed: 149 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import {
1313
marshalAddOptionServerRequest,
1414
marshalCreateServerRequest,
1515
marshalInstallServerRequest,
16+
marshalPrivateNetworkApiAddServerPrivateNetworkRequest,
17+
marshalPrivateNetworkApiSetServerPrivateNetworksRequest,
1618
marshalRebootServerRequest,
1719
marshalStartBMCAccessRequest,
1820
marshalStartServerRequest,
@@ -26,12 +28,15 @@ import {
2628
unmarshalListOffersResponse,
2729
unmarshalListOptionsResponse,
2830
unmarshalListServerEventsResponse,
31+
unmarshalListServerPrivateNetworksResponse,
2932
unmarshalListServersResponse,
3033
unmarshalListSettingsResponse,
3134
unmarshalOS,
3235
unmarshalOffer,
3336
unmarshalOption,
3437
unmarshalServer,
38+
unmarshalServerPrivateNetwork,
39+
unmarshalSetServerPrivateNetworksResponse,
3540
unmarshalSetting,
3641
} from './marshalling.gen'
3742
import type {
@@ -57,15 +62,22 @@ import type {
5762
ListOptionsResponse,
5863
ListServerEventsRequest,
5964
ListServerEventsResponse,
65+
ListServerPrivateNetworksResponse,
6066
ListServersRequest,
6167
ListServersResponse,
6268
ListSettingsRequest,
6369
ListSettingsResponse,
6470
OS,
6571
Offer,
6672
Option,
73+
PrivateNetworkApiAddServerPrivateNetworkRequest,
74+
PrivateNetworkApiDeleteServerPrivateNetworkRequest,
75+
PrivateNetworkApiListServerPrivateNetworksRequest,
76+
PrivateNetworkApiSetServerPrivateNetworksRequest,
6777
RebootServerRequest,
6878
Server,
79+
ServerPrivateNetwork,
80+
SetServerPrivateNetworksResponse,
6981
Setting,
7082
StartBMCAccessRequest,
7183
StartServerRequest,
@@ -715,3 +727,140 @@ export class BaremetalV1GenAPI extends API {
715727
unmarshalOS,
716728
)
717729
}
730+
731+
/** Elastic Metal Private Network API. */
732+
export class BaremetalPrivateNetworkV1GenAPI extends API {
733+
/** Lists the available zones of the API. */
734+
public static readonly LOCALITIES: Zone[] = ['fr-par-2']
735+
736+
/**
737+
* Add a server to a private network
738+
*
739+
* @param request - The request {@link PrivateNetworkApiAddServerPrivateNetworkRequest}
740+
* @returns A Promise of ServerPrivateNetwork
741+
*/
742+
addServerPrivateNetwork = (
743+
request: Readonly<PrivateNetworkApiAddServerPrivateNetworkRequest>,
744+
) =>
745+
this.client.fetch<ServerPrivateNetwork>(
746+
{
747+
body: JSON.stringify(
748+
marshalPrivateNetworkApiAddServerPrivateNetworkRequest(
749+
request,
750+
this.client.settings,
751+
),
752+
),
753+
headers: jsonContentHeaders,
754+
method: 'POST',
755+
path: `/baremetal/v1/zones/${validatePathParam(
756+
'zone',
757+
request.zone ?? this.client.settings.defaultZone,
758+
)}/servers/${validatePathParam(
759+
'serverId',
760+
request.serverId,
761+
)}/private-networks`,
762+
},
763+
unmarshalServerPrivateNetwork,
764+
)
765+
766+
/**
767+
* Set multiple private networks on a server
768+
*
769+
* @param request - The request {@link PrivateNetworkApiSetServerPrivateNetworksRequest}
770+
* @returns A Promise of SetServerPrivateNetworksResponse
771+
*/
772+
setServerPrivateNetworks = (
773+
request: Readonly<PrivateNetworkApiSetServerPrivateNetworksRequest>,
774+
) =>
775+
this.client.fetch<SetServerPrivateNetworksResponse>(
776+
{
777+
body: JSON.stringify(
778+
marshalPrivateNetworkApiSetServerPrivateNetworksRequest(
779+
request,
780+
this.client.settings,
781+
),
782+
),
783+
headers: jsonContentHeaders,
784+
method: 'PUT',
785+
path: `/baremetal/v1/zones/${validatePathParam(
786+
'zone',
787+
request.zone ?? this.client.settings.defaultZone,
788+
)}/servers/${validatePathParam(
789+
'serverId',
790+
request.serverId,
791+
)}/private-networks`,
792+
},
793+
unmarshalSetServerPrivateNetworksResponse,
794+
)
795+
796+
protected pageOfListServerPrivateNetworks = (
797+
request: Readonly<PrivateNetworkApiListServerPrivateNetworksRequest> = {},
798+
) =>
799+
this.client.fetch<ListServerPrivateNetworksResponse>(
800+
{
801+
method: 'GET',
802+
path: `/baremetal/v1/zones/${validatePathParam(
803+
'zone',
804+
request.zone ?? this.client.settings.defaultZone,
805+
)}/server-private-networks`,
806+
urlParams: urlParams(
807+
['order_by', request.orderBy ?? 'created_at_asc'],
808+
[
809+
'organization_id',
810+
request.organizationId ??
811+
this.client.settings.defaultOrganizationId,
812+
],
813+
['page', request.page],
814+
[
815+
'page_size',
816+
request.pageSize ?? this.client.settings.defaultPageSize,
817+
],
818+
['private_network_id', request.privateNetworkId],
819+
[
820+
'project_id',
821+
request.projectId ?? this.client.settings.defaultProjectId,
822+
],
823+
['server_id', request.serverId],
824+
),
825+
},
826+
unmarshalListServerPrivateNetworksResponse,
827+
)
828+
829+
/**
830+
* List the private networks of a server
831+
*
832+
* @param request - The request {@link PrivateNetworkApiListServerPrivateNetworksRequest}
833+
* @returns A Promise of ListServerPrivateNetworksResponse
834+
*/
835+
listServerPrivateNetworks = (
836+
request: Readonly<PrivateNetworkApiListServerPrivateNetworksRequest> = {},
837+
) =>
838+
enrichForPagination(
839+
'serverPrivateNetworks',
840+
this.pageOfListServerPrivateNetworks,
841+
request,
842+
)
843+
844+
/**
845+
* Delete a private network
846+
*
847+
* @param request - The request
848+
* {@link PrivateNetworkApiDeleteServerPrivateNetworkRequest}
849+
*/
850+
deleteServerPrivateNetwork = (
851+
request: Readonly<PrivateNetworkApiDeleteServerPrivateNetworkRequest>,
852+
) =>
853+
this.client.fetch<void>({
854+
method: 'DELETE',
855+
path: `/baremetal/v1/zones/${validatePathParam(
856+
'zone',
857+
request.zone ?? this.client.settings.defaultZone,
858+
)}/servers/${validatePathParam(
859+
'serverId',
860+
request.serverId,
861+
)}/private-networks/${validatePathParam(
862+
'privateNetworkId',
863+
request.privateNetworkId,
864+
)}`,
865+
})
866+
}

packages/clients/src/api/baremetal/v1/content.gen.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,21 @@
11
// This file was automatically generated. DO NOT EDIT.
22
// If you have any remark or suggestion do not hesitate to open an issue.
3-
import type { ServerInstallStatus, ServerStatus } from './types.gen'
3+
import type {
4+
ServerInstallStatus,
5+
ServerPrivateNetworkStatus,
6+
ServerStatus,
7+
} from './types.gen'
48

59
/** Lists transient statutes of the enum {@link ServerInstallStatus}. */
610
export const SERVER_INSTALL_TRANSIENT_STATUSES: ServerInstallStatus[] = [
711
'to_install',
812
'installing',
913
]
1014

15+
/** Lists transient statutes of the enum {@link ServerPrivateNetworkStatus}. */
16+
export const SERVER_PRIVATE_NETWORK_TRANSIENT_STATUSES: ServerPrivateNetworkStatus[] =
17+
['attaching', 'detaching']
18+
1119
/** Lists transient statutes of the enum {@link ServerStatus}. */
1220
export const SERVER_TRANSIENT_STATUSES: ServerStatus[] = [
1321
'delivering',
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1-
export { BaremetalV1UtilsAPI as API } from './api.utils'
1+
export {
2+
BaremetalPrivateNetworkV1GenAPI as PrivateNetworkAPI,
3+
BaremetalV1UtilsAPI as API
4+
} from './api.utils'
25
export * from './content.gen'
36
export * from './types.gen'

packages/clients/src/api/baremetal/v1/marshalling.gen.ts

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import type {
2323
ListOffersResponse,
2424
ListOptionsResponse,
2525
ListServerEventsResponse,
26+
ListServerPrivateNetworksResponse,
2627
ListServersResponse,
2728
ListSettingsResponse,
2829
Memory,
@@ -32,13 +33,17 @@ import type {
3233
OfferOptionOffer,
3334
Option,
3435
PersistentMemory,
36+
PrivateNetworkApiAddServerPrivateNetworkRequest,
37+
PrivateNetworkApiSetServerPrivateNetworksRequest,
3538
RaidController,
3639
RebootServerRequest,
3740
Server,
3841
ServerEvent,
3942
ServerInstall,
4043
ServerOption,
44+
ServerPrivateNetwork,
4145
ServerRescueServer,
46+
SetServerPrivateNetworksResponse,
4247
Setting,
4348
StartBMCAccessRequest,
4449
StartServerRequest,
@@ -326,6 +331,25 @@ const unmarshalServerEvent = (data: unknown) => {
326331
} as ServerEvent
327332
}
328333

334+
export const unmarshalServerPrivateNetwork = (data: unknown) => {
335+
if (!isJSONObject(data)) {
336+
throw new TypeError(
337+
`Unmarshalling the type 'ServerPrivateNetwork' failed as data isn't a dictionary.`,
338+
)
339+
}
340+
341+
return {
342+
createdAt: unmarshalDate(data.created_at),
343+
id: data.id,
344+
privateNetworkId: data.private_network_id,
345+
projectId: data.project_id,
346+
serverId: data.server_id,
347+
status: data.status,
348+
updatedAt: unmarshalDate(data.updated_at),
349+
vlan: data.vlan,
350+
} as ServerPrivateNetwork
351+
}
352+
329353
export const unmarshalSetting = (data: unknown) => {
330354
if (!isJSONObject(data)) {
331355
throw new TypeError(
@@ -420,6 +444,22 @@ export const unmarshalListServerEventsResponse = (data: unknown) => {
420444
} as ListServerEventsResponse
421445
}
422446

447+
export const unmarshalListServerPrivateNetworksResponse = (data: unknown) => {
448+
if (!isJSONObject(data)) {
449+
throw new TypeError(
450+
`Unmarshalling the type 'ListServerPrivateNetworksResponse' failed as data isn't a dictionary.`,
451+
)
452+
}
453+
454+
return {
455+
serverPrivateNetworks: unmarshalArrayOfObject(
456+
data.server_private_networks,
457+
unmarshalServerPrivateNetwork,
458+
),
459+
totalCount: data.total_count,
460+
} as ListServerPrivateNetworksResponse
461+
}
462+
423463
export const unmarshalListServersResponse = (data: unknown) => {
424464
if (!isJSONObject(data)) {
425465
throw new TypeError(
@@ -446,6 +486,21 @@ export const unmarshalListSettingsResponse = (data: unknown) => {
446486
} as ListSettingsResponse
447487
}
448488

489+
export const unmarshalSetServerPrivateNetworksResponse = (data: unknown) => {
490+
if (!isJSONObject(data)) {
491+
throw new TypeError(
492+
`Unmarshalling the type 'SetServerPrivateNetworksResponse' failed as data isn't a dictionary.`,
493+
)
494+
}
495+
496+
return {
497+
serverPrivateNetworks: unmarshalArrayOfObject(
498+
data.server_private_networks,
499+
unmarshalServerPrivateNetwork,
500+
),
501+
} as SetServerPrivateNetworksResponse
502+
}
503+
449504
const marshalCreateServerRequestInstall = (
450505
request: CreateServerRequestInstall,
451506
defaults: DefaultValues,
@@ -505,6 +560,20 @@ export const marshalInstallServerRequest = (
505560
user: request.user,
506561
})
507562

563+
export const marshalPrivateNetworkApiAddServerPrivateNetworkRequest = (
564+
request: PrivateNetworkApiAddServerPrivateNetworkRequest,
565+
defaults: DefaultValues,
566+
): Record<string, unknown> => ({
567+
private_network_id: request.privateNetworkId,
568+
})
569+
570+
export const marshalPrivateNetworkApiSetServerPrivateNetworksRequest = (
571+
request: PrivateNetworkApiSetServerPrivateNetworksRequest,
572+
defaults: DefaultValues,
573+
): Record<string, unknown> => ({
574+
private_network_ids: request.privateNetworkIds,
575+
})
576+
508577
export const marshalRebootServerRequest = (
509578
request: RebootServerRequest,
510579
defaults: DefaultValues,

0 commit comments

Comments
 (0)