Skip to content

Commit

Permalink
feat(k8s): expose ACL routes in SDK (#1546)
Browse files Browse the repository at this point in the history
Co-authored-by: Laure-di <[email protected]>
  • Loading branch information
scaleway-bot and Laure-di authored Nov 4, 2024
1 parent 31cb9ac commit a6e1bf5
Show file tree
Hide file tree
Showing 5 changed files with 300 additions and 0 deletions.
88 changes: 88 additions & 0 deletions packages/clients/src/api/k8s/v1/api.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,20 @@ import {
POOL_TRANSIENT_STATUSES,
} from './content.gen'
import {
marshalAddClusterACLRulesRequest,
marshalCreateClusterRequest,
marshalCreatePoolRequest,
marshalSetClusterACLRulesRequest,
marshalSetClusterTypeRequest,
marshalUpdateClusterRequest,
marshalUpdatePoolRequest,
marshalUpgradeClusterRequest,
marshalUpgradePoolRequest,
unmarshalAddClusterACLRulesResponse,
unmarshalCluster,
unmarshalExternalNode,
unmarshalExternalNodeAuth,
unmarshalListClusterACLRulesResponse,
unmarshalListClusterAvailableTypesResponse,
unmarshalListClusterAvailableVersionsResponse,
unmarshalListClusterTypesResponse,
Expand All @@ -34,14 +38,18 @@ import {
unmarshalNode,
unmarshalNodeMetadata,
unmarshalPool,
unmarshalSetClusterACLRulesResponse,
unmarshalVersion,
} from './marshalling.gen'
import type {
AddClusterACLRulesRequest,
AddClusterACLRulesResponse,
AuthExternalNodeRequest,
Cluster,
CreateClusterRequest,
CreateExternalNodeRequest,
CreatePoolRequest,
DeleteACLRuleRequest,
DeleteClusterRequest,
DeleteNodeRequest,
DeletePoolRequest,
Expand All @@ -53,6 +61,8 @@ import type {
GetNodeRequest,
GetPoolRequest,
GetVersionRequest,
ListClusterACLRulesRequest,
ListClusterACLRulesResponse,
ListClusterAvailableTypesRequest,
ListClusterAvailableTypesResponse,
ListClusterAvailableVersionsRequest,
Expand All @@ -74,6 +84,8 @@ import type {
RebootNodeRequest,
ReplaceNodeRequest,
ResetClusterAdminTokenRequest,
SetClusterACLRulesRequest,
SetClusterACLRulesResponse,
SetClusterTypeRequest,
UpdateClusterRequest,
UpdatePoolRequest,
Expand Down Expand Up @@ -351,6 +363,82 @@ export class API extends ParentAPI {
unmarshalCluster,
)

protected pageOfListClusterACLRules = (
request: Readonly<ListClusterACLRulesRequest>,
) =>
this.client.fetch<ListClusterACLRulesResponse>(
{
method: 'GET',
path: `/k8s/v1/regions/${validatePathParam('region', request.region ?? this.client.settings.defaultRegion)}/clusters/${validatePathParam('clusterId', request.clusterId)}/acls`,
urlParams: urlParams(
['page', request.page],
[
'page_size',
request.pageSize ?? this.client.settings.defaultPageSize,
],
),
},
unmarshalListClusterACLRulesResponse,
)

/**
* List ACLs. List ACLs for a specific cluster.
*
* @param request - The request {@link ListClusterACLRulesRequest}
* @returns A Promise of ListClusterACLRulesResponse
*/
listClusterACLRules = (request: Readonly<ListClusterACLRulesRequest>) =>
enrichForPagination('rules', this.pageOfListClusterACLRules, request)

/**
* Add new ACLs. Add new ACL rules for a specific cluster.
*
* @param request - The request {@link AddClusterACLRulesRequest}
* @returns A Promise of AddClusterACLRulesResponse
*/
addClusterACLRules = (request: Readonly<AddClusterACLRulesRequest>) =>
this.client.fetch<AddClusterACLRulesResponse>(
{
body: JSON.stringify(
marshalAddClusterACLRulesRequest(request, this.client.settings),
),
headers: jsonContentHeaders,
method: 'POST',
path: `/k8s/v1/regions/${validatePathParam('region', request.region ?? this.client.settings.defaultRegion)}/clusters/${validatePathParam('clusterId', request.clusterId)}/acls`,
},
unmarshalAddClusterACLRulesResponse,
)

/**
* Set new ACLs. Set new ACL rules for a specific cluster.
*
* @param request - The request {@link SetClusterACLRulesRequest}
* @returns A Promise of SetClusterACLRulesResponse
*/
setClusterACLRules = (request: Readonly<SetClusterACLRulesRequest>) =>
this.client.fetch<SetClusterACLRulesResponse>(
{
body: JSON.stringify(
marshalSetClusterACLRulesRequest(request, this.client.settings),
),
headers: jsonContentHeaders,
method: 'PUT',
path: `/k8s/v1/regions/${validatePathParam('region', request.region ?? this.client.settings.defaultRegion)}/clusters/${validatePathParam('clusterId', request.clusterId)}/acls`,
},
unmarshalSetClusterACLRulesResponse,
)

/**
* Delete an existing ACL.
*
* @param request - The request {@link DeleteACLRuleRequest}
*/
deleteACLRule = (request: Readonly<DeleteACLRuleRequest>) =>
this.client.fetch<void>({
method: 'DELETE',
path: `/k8s/v1/regions/${validatePathParam('region', request.region ?? this.client.settings.defaultRegion)}/acls/${validatePathParam('aclId', request.aclId)}`,
})

protected pageOfListPools = (request: Readonly<ListPoolsRequest>) =>
this.client.fetch<ListPoolsResponse>(
{
Expand Down
9 changes: 9 additions & 0 deletions packages/clients/src/api/k8s/v1/index.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
export { API } from './api.gen'
export * from './content.gen'
export type {
ACLRule,
ACLRuleRequest,
AddClusterACLRulesRequest,
AddClusterACLRulesResponse,
AuthExternalNodeRequest,
AutoscalerEstimator,
AutoscalerExpander,
Expand All @@ -24,6 +28,7 @@ export type {
CreateExternalNodeRequest,
CreatePoolRequest,
CreatePoolRequestUpgradePolicy,
DeleteACLRuleRequest,
DeleteClusterRequest,
DeleteNodeRequest,
DeletePoolRequest,
Expand All @@ -36,6 +41,8 @@ export type {
GetNodeRequest,
GetPoolRequest,
GetVersionRequest,
ListClusterACLRulesRequest,
ListClusterACLRulesResponse,
ListClusterAvailableTypesRequest,
ListClusterAvailableTypesResponse,
ListClusterAvailableVersionsRequest,
Expand Down Expand Up @@ -68,6 +75,8 @@ export type {
ReplaceNodeRequest,
ResetClusterAdminTokenRequest,
Runtime,
SetClusterACLRulesRequest,
SetClusterACLRulesResponse,
SetClusterTypeRequest,
UpdateClusterRequest,
UpdateClusterRequestAutoUpgrade,
Expand Down
96 changes: 96 additions & 0 deletions packages/clients/src/api/k8s/v1/marshalling.gen.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ import {
} from '../../../bridge'
import type { DefaultValues } from '../../../bridge'
import type {
ACLRule,
ACLRuleRequest,
AddClusterACLRulesRequest,
AddClusterACLRulesResponse,
Cluster,
ClusterAutoUpgrade,
ClusterAutoscalerConfig,
Expand All @@ -25,6 +29,7 @@ import type {
ExternalNode,
ExternalNodeAuth,
ExternalNodeCoreV1Taint,
ListClusterACLRulesResponse,
ListClusterAvailableTypesResponse,
ListClusterAvailableVersionsResponse,
ListClusterTypesResponse,
Expand All @@ -38,6 +43,8 @@ import type {
NodeMetadataCoreV1Taint,
Pool,
PoolUpgradePolicy,
SetClusterACLRulesRequest,
SetClusterACLRulesResponse,
SetClusterTypeRequest,
UpdateClusterRequest,
UpdateClusterRequestAutoUpgrade,
Expand Down Expand Up @@ -257,6 +264,35 @@ export const unmarshalNode = (data: unknown): Node => {
} as Node
}

const unmarshalACLRule = (data: unknown): ACLRule => {
if (!isJSONObject(data)) {
throw new TypeError(
`Unmarshalling the type 'ACLRule' failed as data isn't a dictionary.`,
)
}

return {
description: data.description,
id: data.id,
ip: data.ip,
scalewayRanges: data.scaleway_ranges,
} as ACLRule
}

export const unmarshalAddClusterACLRulesResponse = (
data: unknown,
): AddClusterACLRulesResponse => {
if (!isJSONObject(data)) {
throw new TypeError(
`Unmarshalling the type 'AddClusterACLRulesResponse' failed as data isn't a dictionary.`,
)
}

return {
rules: unmarshalArrayOfObject(data.rules, unmarshalACLRule),
} as AddClusterACLRulesResponse
}

const unmarshalExternalNodeCoreV1Taint = (
data: unknown,
): ExternalNodeCoreV1Taint => {
Expand Down Expand Up @@ -313,6 +349,21 @@ export const unmarshalExternalNodeAuth = (data: unknown): ExternalNodeAuth => {
} as ExternalNodeAuth
}

export const unmarshalListClusterACLRulesResponse = (
data: unknown,
): ListClusterACLRulesResponse => {
if (!isJSONObject(data)) {
throw new TypeError(
`Unmarshalling the type 'ListClusterACLRulesResponse' failed as data isn't a dictionary.`,
)
}

return {
rules: unmarshalArrayOfObject(data.rules, unmarshalACLRule),
totalCount: data.total_count,
} as ListClusterACLRulesResponse
}

const unmarshalClusterType = (data: unknown): ClusterType => {
if (!isJSONObject(data)) {
throw new TypeError(
Expand Down Expand Up @@ -487,6 +538,41 @@ export const unmarshalNodeMetadata = (data: unknown): NodeMetadata => {
} as NodeMetadata
}

export const unmarshalSetClusterACLRulesResponse = (
data: unknown,
): SetClusterACLRulesResponse => {
if (!isJSONObject(data)) {
throw new TypeError(
`Unmarshalling the type 'SetClusterACLRulesResponse' failed as data isn't a dictionary.`,
)
}

return {
rules: unmarshalArrayOfObject(data.rules, unmarshalACLRule),
} as SetClusterACLRulesResponse
}

const marshalACLRuleRequest = (
request: ACLRuleRequest,
defaults: DefaultValues,
): Record<string, unknown> => ({
description: request.description,
...resolveOneOf<string | boolean>([
{ param: 'ip', value: request.ip },
{ param: 'scaleway_ranges', value: request.scalewayRanges },
]),
})

export const marshalAddClusterACLRulesRequest = (
request: AddClusterACLRulesRequest,
defaults: DefaultValues,
): Record<string, unknown> => ({
acls:
request.acls !== undefined
? request.acls.map(elt => marshalACLRuleRequest(elt, defaults))
: undefined,
})

const marshalMaintenanceWindow = (
request: MaintenanceWindow,
defaults: DefaultValues,
Expand Down Expand Up @@ -657,6 +743,16 @@ export const marshalCreatePoolRequest = (
zone: request.zone ?? defaults.defaultZone,
})

export const marshalSetClusterACLRulesRequest = (
request: SetClusterACLRulesRequest,
defaults: DefaultValues,
): Record<string, unknown> => ({
acls:
request.acls !== undefined
? request.acls.map(elt => marshalACLRuleRequest(elt, defaults))
: undefined,
})

export const marshalSetClusterTypeRequest = (
request: SetClusterTypeRequest,
defaults: DefaultValues,
Expand Down
Loading

0 comments on commit a6e1bf5

Please sign in to comment.