import {z} from 'zod' export type AuditLoggingSettings = {enabled?: boolean | undefined}; export type UID = string; export type GlobalSecretKeySelector = {apiVersion?: string | undefined, fieldPath?: string | undefined, key?: string | undefined, kind?: string | undefined, name?: string | undefined, namespace?: string | undefined, resourceVersion?: string | undefined, uid?: UID | undefined}; export type AlibabaCloudSpec = {accessKeyId?: string | undefined, accessKeySecret?: string | undefined, credentialsReference?: GlobalSecretKeySelector | undefined}; export type AnexiaCloudSpec = {credentialsReference?: GlobalSecretKeySelector | undefined, token?: string | undefined}; export type AWSCloudSpec = {accessKeyId?: string | undefined, credentialsReference?: GlobalSecretKeySelector | undefined, instanceProfileName?: string | undefined, roleARN?: string | undefined, roleName?: string | undefined, routeTableId?: string | undefined, secretAccessKey?: string | undefined, securityGroupID?: string | undefined, vpcId?: string | undefined}; export type LBSKU = string; export type AzureCloudSpec = {assignAvailabilitySet?: boolean | undefined, availabilitySet?: string | undefined, clientID?: string | undefined, clientSecret?: string | undefined, credentialsReference?: GlobalSecretKeySelector | undefined, loadBalancerSKU?: LBSKU | undefined, resourceGroup?: string | undefined, routeTable?: string | undefined, securityGroup?: string | undefined, subnet?: string | undefined, subscriptionID?: string | undefined, tenantID?: string | undefined, vnet?: string | undefined, vnetResourceGroup?: string | undefined}; export type BringYourOwnCloudSpec = Record; export type DigitaloceanCloudSpec = {credentialsReference?: GlobalSecretKeySelector | undefined, token?: string | undefined}; export type FakeCloudSpec = {token?: string | undefined}; export type GCPCloudSpec = {credentialsReference?: GlobalSecretKeySelector | undefined, network?: string | undefined, serviceAccount?: string | undefined, subnetwork?: string | undefined}; export type HetznerCloudSpec = {credentialsReference?: GlobalSecretKeySelector | undefined, network?: string | undefined, token?: string | undefined}; export type KubevirtCloudSpec = {credentialsReference?: GlobalSecretKeySelector | undefined, kubeconfig?: string | undefined}; export type OpenstackCloudSpec = {applicationCredentialID?: string | undefined, applicationCredentialSecret?: string | undefined, credentialsReference?: GlobalSecretKeySelector | undefined, domain?: string | undefined, floatingIpPool?: string | undefined, network?: string | undefined, password?: string | undefined, routerID?: string | undefined, securityGroups?: string | undefined, subnetID?: string | undefined, tenant?: string | undefined, tenantID?: string | undefined, token?: string | undefined, useOctavia?: boolean | undefined, useToken?: boolean | undefined, username?: string | undefined}; export type PacketCloudSpec = {apiKey?: string | undefined, billingCycle?: string | undefined, credentialsReference?: GlobalSecretKeySelector | undefined, projectID?: string | undefined}; export type VSphereCredentials = {password?: string | undefined, username?: string | undefined}; export type VSphereCloudSpec = {credentialsReference?: GlobalSecretKeySelector | undefined, datastore?: string | undefined, datastoreCluster?: string | undefined, folder?: string | undefined, infraManagementUser?: VSphereCredentials | undefined, password?: string | undefined, resourcePool?: string | undefined, storagePolicy?: string | undefined, username?: string | undefined, vmNetName?: string | undefined}; export type CloudSpec = {alibaba?: AlibabaCloudSpec | undefined, anexia?: AnexiaCloudSpec | undefined, aws?: AWSCloudSpec | undefined, azure?: AzureCloudSpec | undefined, bringyourown?: BringYourOwnCloudSpec | undefined, dc?: string | undefined, digitalocean?: DigitaloceanCloudSpec | undefined, fake?: FakeCloudSpec | undefined, gcp?: GCPCloudSpec | undefined, hetzner?: HetznerCloudSpec | undefined, kubevirt?: KubevirtCloudSpec | undefined, openstack?: OpenstackCloudSpec | undefined, packet?: PacketCloudSpec | undefined, vsphere?: VSphereCloudSpec | undefined}; export type IPVSConfiguration = {strictArp?: boolean | undefined}; export type NetworkRanges = {cidrBlocks?: Array | undefined}; export type ClusterNetworkingConfig = {dnsDomain?: string | undefined, ipvs?: IPVSConfiguration | undefined, konnectivityEnabled?: boolean | undefined, nodeLocalDNSCacheEnabled?: boolean | undefined, pods?: NetworkRanges | undefined, proxyMode?: string | undefined, services?: NetworkRanges | undefined}; export type MachineNetworkingConfig = {cidr?: string | undefined, dnsServers?: Array | undefined, gateway?: string | undefined}; export type Quantity = Record; export type ResourceList = {[key: string]: Quantity}; export type ResourceRequirements = {limits?: ResourceList | undefined, requests?: ResourceList | undefined}; export type MLASettings = {loggingEnabled?: boolean | undefined, loggingResources?: ResourceRequirements | undefined, monitoringEnabled?: boolean | undefined, monitoringResources?: ResourceRequirements | undefined}; export type OIDCSettings = {clientId?: string | undefined, clientSecret?: string | undefined, extraScopes?: string | undefined, groupsClaim?: string | undefined, issuerUrl?: string | undefined, requiredClaim?: string | undefined, usernameClaim?: string | undefined}; export type OPAIntegrationSettings = {enabled?: boolean | undefined, experimentalEnableMutation?: boolean | undefined, webhookTimeoutSeconds?: number | undefined}; export type ServiceAccountSettings = {apiAudiences?: Array | undefined, issuer?: string | undefined, tokenVolumeProjectionEnabled?: boolean | undefined}; export type UpdateWindow = {length?: string | undefined, start?: string | undefined}; export type Semver = Record; export type ClusterSpec = {admissionPlugins?: Array | undefined, auditLogging?: AuditLoggingSettings | undefined, cloud?: CloudSpec | undefined, clusterNetwork?: ClusterNetworkingConfig | undefined, containerRuntime?: string | undefined, enableUserSSHKeyAgent?: boolean | undefined, machineNetworks?: Array | undefined, mla?: MLASettings | undefined, oidc?: OIDCSettings | undefined, opaIntegration?: OPAIntegrationSettings | undefined, podNodeSelectorAdmissionPluginConfig?: {[key: string]: string} | undefined, serviceAccount?: ServiceAccountSettings | undefined, updateWindow?: UpdateWindow | undefined, usePodNodeSelectorAdmissionPlugin?: boolean | undefined, usePodSecurityPolicyAdmissionPlugin?: boolean | undefined, version?: Semver | undefined}; export type ExternalCCMMigrationStatus = string; export type ClusterStatus = {externalCCMMigration?: ExternalCCMMigrationStatus | undefined, url?: string | undefined, version?: Semver | undefined}; export type Cluster = {annotations?: {[key: string]: string} | undefined, creationTimestamp?: string | undefined, credential?: string | undefined, deletionTimestamp?: string | undefined, id?: string | undefined, inheritedLabels?: {[key: string]: string} | undefined, labels?: {[key: string]: string} | undefined, name?: string | undefined, spec?: ClusterSpec | undefined, status?: ClusterStatus | undefined, type?: string | undefined}; export type AlibabaNodeSpec = {diskSize?: string | undefined, diskType?: string | undefined, instanceType?: string | undefined, internetMaxBandwidthOut?: string | undefined, labels?: {[key: string]: string} | undefined, vSwitchID?: string | undefined, zoneID?: string | undefined}; export type AnexiaNodeSpec = {cpus: number, diskSize: number, memory: number, templateID: string, vlanID: string}; export type AWSNodeSpec = {ami?: string | undefined, assignPublicIP?: boolean | undefined, availabilityZone?: string | undefined, diskSize: number, instanceType: string, isSpotInstance?: boolean | undefined, spotInstanceInterruptionBehavior?: string | undefined, spotInstanceMaxPrice?: string | undefined, spotInstancePersistentRequest?: boolean | undefined, subnetID?: string | undefined, tags?: {[key: string]: string} | undefined, volumeType: string}; export type AzureNodeSpec = {assignAvailabilitySet?: boolean | undefined, assignPublicIP?: boolean | undefined, dataDiskSize?: number | undefined, imageID?: string | undefined, osDiskSize?: number | undefined, size: string, tags?: {[key: string]: string} | undefined, zones?: Array | undefined}; export type DigitaloceanNodeSpec = {backups?: boolean | undefined, ipv6?: boolean | undefined, monitoring?: boolean | undefined, size: string, tags?: Array | undefined}; export type GCPNodeSpec = {customImage?: string | undefined, diskSize?: number | undefined, diskType?: string | undefined, labels?: {[key: string]: string} | undefined, machineType?: string | undefined, preemptible?: boolean | undefined, tags?: Array | undefined, zone?: string | undefined}; export type HetznerNodeSpec = {network?: string | undefined, type: string}; export type KubevirtNodeSpec = {cpus: string, memory: string, namespace: string, pvcSize: string, sourceURL: string, storageClassName: string}; export type OpenstackNodeSpec = {availabilityZone?: string | undefined, diskSize?: number | undefined, flavor: string, image: string, instanceReadyCheckPeriod?: string | undefined, instanceReadyCheckTimeout?: string | undefined, tags?: {[key: string]: string} | undefined, useFloatingIP?: boolean | undefined}; export type PacketNodeSpec = {instanceType: string, tags?: Array | undefined}; export type VSphereNodeSpec = {cpus?: number | undefined, diskSizeGB?: number | undefined, memory?: number | undefined, template?: string | undefined}; export type NodeCloudSpec = {alibaba?: AlibabaNodeSpec | undefined, anexia?: AnexiaNodeSpec | undefined, aws?: AWSNodeSpec | undefined, azure?: AzureNodeSpec | undefined, digitalocean?: DigitaloceanNodeSpec | undefined, gcp?: GCPNodeSpec | undefined, hetzner?: HetznerNodeSpec | undefined, kubevirt?: KubevirtNodeSpec | undefined, openstack?: OpenstackNodeSpec | undefined, packet?: PacketNodeSpec | undefined, vsphere?: VSphereNodeSpec | undefined}; export type CentOSSpec = {distUpgradeOnBoot?: boolean | undefined}; export type FlatcarSpec = {disableAutoUpdate?: boolean | undefined}; export type RHELSpec = {distUpgradeOnBoot?: boolean | undefined, rhelSubscriptionManagerPassword?: string | undefined, rhelSubscriptionManagerUser?: string | undefined, rhsmOfflineToken?: string | undefined}; export type SLESSpec = {distUpgradeOnBoot?: boolean | undefined}; export type UbuntuSpec = {distUpgradeOnBoot?: boolean | undefined}; export type OperatingSystemSpec = {centos?: CentOSSpec | undefined, flatcar?: FlatcarSpec | undefined, rhel?: RHELSpec | undefined, sles?: SLESSpec | undefined, ubuntu?: UbuntuSpec | undefined}; export type TaintSpec = {effect?: string | undefined, key?: string | undefined, value?: string | undefined}; export type NodeVersionInfo = {kubelet?: string | undefined}; export type NodeSpec = {cloud: NodeCloudSpec, labels?: {[key: string]: string} | undefined, operatingSystem: OperatingSystemSpec, sshUserName?: string | undefined, taints?: Array | undefined, versions: NodeVersionInfo}; export type NodeDeploymentSpec = {dynamicConfig?: boolean | undefined, paused?: boolean | undefined, replicas: number, template: NodeSpec}; export type MachineDeploymentStatus = {availableReplicas?: number | undefined, observedGeneration?: number | undefined, readyReplicas?: number | undefined, replicas?: number | undefined, unavailableReplicas?: number | undefined, updatedReplicas?: number | undefined}; export type NodeDeployment = {annotations?: {[key: string]: string} | undefined, creationTimestamp?: string | undefined, deletionTimestamp?: string | undefined, id?: string | undefined, name?: string | undefined, spec?: NodeDeploymentSpec | undefined, status?: MachineDeploymentStatus | undefined}; export type CreateClusterSpec = {cluster?: Cluster | undefined, nodeDeployment?: NodeDeployment | undefined}; export type CreateApiApiV1ProjectsProjectIdDcDcClustersArgs = {project_id: string, dc: string, body: CreateClusterSpec}; export type CreateApiApiV1ProjectsProjectIdDcDcClustersOptions = {baseUrl: string, apiKey?: string | undefined, fetch?: typeof fetch | undefined}; export const auditLoggingSettings = z.object({enabled: z.boolean().optional()}); export const uID = z.string(); export const globalSecretKeySelector = z.object({apiVersion: z.string().optional(), fieldPath: z.string().optional(), key: z.string().optional(), kind: z.string().optional(), name: z.string().optional(), namespace: z.string().optional(), resourceVersion: z.string().optional(), uid: uID.optional()}); export const alibabaCloudSpec = z.object({accessKeyId: z.string().optional(), accessKeySecret: z.string().optional(), credentialsReference: globalSecretKeySelector.optional()}); export const anexiaCloudSpec = z.object({credentialsReference: globalSecretKeySelector.optional(), token: z.string().optional()}); export const aWSCloudSpec = z.object({accessKeyId: z.string().optional(), credentialsReference: globalSecretKeySelector.optional(), instanceProfileName: z.string().optional(), roleARN: z.string().optional(), roleName: z.string().optional(), routeTableId: z.string().optional(), secretAccessKey: z.string().optional(), securityGroupID: z.string().optional(), vpcId: z.string().optional()}); export const lBSKU = z.string(); export const azureCloudSpec = z.object({assignAvailabilitySet: z.boolean().optional(), availabilitySet: z.string().optional(), clientID: z.string().optional(), clientSecret: z.string().optional(), credentialsReference: globalSecretKeySelector.optional(), loadBalancerSKU: lBSKU.optional(), resourceGroup: z.string().optional(), routeTable: z.string().optional(), securityGroup: z.string().optional(), subnet: z.string().optional(), subscriptionID: z.string().optional(), tenantID: z.string().optional(), vnet: z.string().optional(), vnetResourceGroup: z.string().optional()}); export const bringYourOwnCloudSpec = z.object({}); export const digitaloceanCloudSpec = z.object({credentialsReference: globalSecretKeySelector.optional(), token: z.string().optional()}); export const fakeCloudSpec = z.object({token: z.string().optional()}); export const gCPCloudSpec = z.object({credentialsReference: globalSecretKeySelector.optional(), network: z.string().optional(), serviceAccount: z.string().optional(), subnetwork: z.string().optional()}); export const hetznerCloudSpec = z.object({credentialsReference: globalSecretKeySelector.optional(), network: z.string().optional(), token: z.string().optional()}); export const kubevirtCloudSpec = z.object({credentialsReference: globalSecretKeySelector.optional(), kubeconfig: z.string().optional()}); export const openstackCloudSpec = z.object({applicationCredentialID: z.string().optional(), applicationCredentialSecret: z.string().optional(), credentialsReference: globalSecretKeySelector.optional(), domain: z.string().optional(), floatingIpPool: z.string().optional(), network: z.string().optional(), password: z.string().optional(), routerID: z.string().optional(), securityGroups: z.string().optional(), subnetID: z.string().optional(), tenant: z.string().optional(), tenantID: z.string().optional(), token: z.string().optional(), useOctavia: z.boolean().optional(), useToken: z.boolean().optional(), username: z.string().optional()}); export const packetCloudSpec = z.object({apiKey: z.string().optional(), billingCycle: z.string().optional(), credentialsReference: globalSecretKeySelector.optional(), projectID: z.string().optional()}); export const vSphereCredentials = z.object({password: z.string().optional(), username: z.string().optional()}); export const vSphereCloudSpec = z.object({credentialsReference: globalSecretKeySelector.optional(), datastore: z.string().optional(), datastoreCluster: z.string().optional(), folder: z.string().optional(), infraManagementUser: vSphereCredentials.optional(), password: z.string().optional(), resourcePool: z.string().optional(), storagePolicy: z.string().optional(), username: z.string().optional(), vmNetName: z.string().optional()}); export const cloudSpec = z.object({alibaba: alibabaCloudSpec.optional(), anexia: anexiaCloudSpec.optional(), aws: aWSCloudSpec.optional(), azure: azureCloudSpec.optional(), bringyourown: bringYourOwnCloudSpec.optional(), dc: z.string().optional(), digitalocean: digitaloceanCloudSpec.optional(), fake: fakeCloudSpec.optional(), gcp: gCPCloudSpec.optional(), hetzner: hetznerCloudSpec.optional(), kubevirt: kubevirtCloudSpec.optional(), openstack: openstackCloudSpec.optional(), packet: packetCloudSpec.optional(), vsphere: vSphereCloudSpec.optional()}); export const iPVSConfiguration = z.object({strictArp: z.boolean().optional()}); export const networkRanges = z.object({cidrBlocks: z.array(z.string()).optional()}); export const clusterNetworkingConfig = z.object({dnsDomain: z.string().optional(), ipvs: iPVSConfiguration.optional(), konnectivityEnabled: z.boolean().optional(), nodeLocalDNSCacheEnabled: z.boolean().optional(), pods: networkRanges.optional(), proxyMode: z.string().optional(), services: networkRanges.optional()}); export const machineNetworkingConfig = z.object({cidr: z.string().optional(), dnsServers: z.array(z.string()).optional(), gateway: z.string().optional()}); export const quantity = z.object({}); export const resourceList = z.record(z.string(), quantity); export const resourceRequirements = z.object({limits: resourceList.optional(), requests: resourceList.optional()}); export const mLASettings = z.object({loggingEnabled: z.boolean().optional(), loggingResources: resourceRequirements.optional(), monitoringEnabled: z.boolean().optional(), monitoringResources: resourceRequirements.optional()}); export const oIDCSettings = z.object({clientId: z.string().optional(), clientSecret: z.string().optional(), extraScopes: z.string().optional(), groupsClaim: z.string().optional(), issuerUrl: z.string().optional(), requiredClaim: z.string().optional(), usernameClaim: z.string().optional()}); export const oPAIntegrationSettings = z.object({enabled: z.boolean().optional(), experimentalEnableMutation: z.boolean().optional(), webhookTimeoutSeconds: z.number().int().optional()}); export const serviceAccountSettings = z.object({apiAudiences: z.array(z.string()).optional(), issuer: z.string().optional(), tokenVolumeProjectionEnabled: z.boolean().optional()}); export const updateWindow = z.object({length: z.string().optional(), start: z.string().optional()}); export const semver = z.object({}); export const clusterSpec = z.object({admissionPlugins: z.array(z.string()).optional(), auditLogging: auditLoggingSettings.optional(), cloud: cloudSpec.optional(), clusterNetwork: clusterNetworkingConfig.optional(), containerRuntime: z.string().optional(), enableUserSSHKeyAgent: z.boolean().optional(), machineNetworks: z.array(machineNetworkingConfig).optional(), mla: mLASettings.optional(), oidc: oIDCSettings.optional(), opaIntegration: oPAIntegrationSettings.optional(), podNodeSelectorAdmissionPluginConfig: z.record(z.string(), z.string()).optional(), serviceAccount: serviceAccountSettings.optional(), updateWindow: updateWindow.optional(), usePodNodeSelectorAdmissionPlugin: z.boolean().optional(), usePodSecurityPolicyAdmissionPlugin: z.boolean().optional(), version: semver.optional()}); export const externalCCMMigrationStatus = z.string(); export const clusterStatus = z.object({externalCCMMigration: externalCCMMigrationStatus.optional(), url: z.string().optional(), version: semver.optional()}); export const cluster = z.object({annotations: z.record(z.string(), z.string()).optional(), creationTimestamp: z.string().optional(), credential: z.string().optional(), deletionTimestamp: z.string().optional(), id: z.string().optional(), inheritedLabels: z.record(z.string(), z.string()).optional(), labels: z.record(z.string(), z.string()).optional(), name: z.string().optional(), spec: clusterSpec.optional(), status: clusterStatus.optional(), type: z.string().optional()}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Creates a cluster for the given project. * * POST /api/v1/projects/{project_id}/dc/{dc}/clusters */ export const createApiApiV1ProjectsProjectIdDcDcClusters = async (args: CreateApiApiV1ProjectsProjectIdDcDcClustersArgs, options: CreateApiApiV1ProjectsProjectIdDcDcClustersOptions) => { const {baseUrl, fetch: fetchFn = fetch, apiKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (apiKey !== undefined) headers.set("Authorization", apiKey) const url = `${baseUrl.replace(/\/+$/, '')}/api/v1/projects/${encodeURIComponent(String(args.project_id))}/dc/${encodeURIComponent(String(args.dc))}/clusters${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(cluster, await res.json()) };