import {z} from 'zod' export type GetApiApiV2ProjectsProjectIdClustertemplatesArgs = {project_id: string}; export type GetApiApiV2ProjectsProjectIdClustertemplatesOptions = {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 alibabaNodeSpec = z.object({diskSize: z.string().optional(), diskType: z.string().optional(), instanceType: z.string().optional(), internetMaxBandwidthOut: z.string().optional(), labels: z.record(z.string(), z.string()).optional(), vSwitchID: z.string().optional(), zoneID: z.string().optional()}); export const anexiaNodeSpec = z.object({cpus: z.number().int(), diskSize: z.number().int(), memory: z.number().int(), templateID: z.string(), vlanID: z.string()}); export const aWSNodeSpec = z.object({ami: z.string().optional(), assignPublicIP: z.boolean().optional(), availabilityZone: z.string().optional(), diskSize: z.number().int(), instanceType: z.string(), isSpotInstance: z.boolean().optional(), spotInstanceInterruptionBehavior: z.string().optional(), spotInstanceMaxPrice: z.string().optional(), spotInstancePersistentRequest: z.boolean().optional(), subnetID: z.string().optional(), tags: z.record(z.string(), z.string()).optional(), volumeType: z.string()}); export const azureNodeSpec = z.object({assignAvailabilitySet: z.boolean().optional(), assignPublicIP: z.boolean().optional(), dataDiskSize: z.number().int().optional(), imageID: z.string().optional(), osDiskSize: z.number().int().optional(), size: z.string(), tags: z.record(z.string(), z.string()).optional(), zones: z.array(z.string()).optional()}); export const digitaloceanNodeSpec = z.object({backups: z.boolean().optional(), ipv6: z.boolean().optional(), monitoring: z.boolean().optional(), size: z.string(), tags: z.array(z.string()).optional()}); export const gCPNodeSpec = z.object({customImage: z.string().optional(), diskSize: z.number().int().optional(), diskType: z.string().optional(), labels: z.record(z.string(), z.string()).optional(), machineType: z.string().optional(), preemptible: z.boolean().optional(), tags: z.array(z.string()).optional(), zone: z.string().optional()}); export const hetznerNodeSpec = z.object({network: z.string().optional(), type: z.string()}); export const kubevirtNodeSpec = z.object({cpus: z.string(), memory: z.string(), namespace: z.string(), pvcSize: z.string(), sourceURL: z.string(), storageClassName: z.string()}); export const openstackNodeSpec = z.object({availabilityZone: z.string().optional(), diskSize: z.number().int().optional(), flavor: z.string(), image: z.string(), instanceReadyCheckPeriod: z.string().optional(), instanceReadyCheckTimeout: z.string().optional(), tags: z.record(z.string(), z.string()).optional(), useFloatingIP: z.boolean().optional()}); export const packetNodeSpec = z.object({instanceType: z.string(), tags: z.array(z.string()).optional()}); export const vSphereNodeSpec = z.object({cpus: z.number().int().optional(), diskSizeGB: z.number().int().optional(), memory: z.number().int().optional(), template: z.string().optional()}); export const nodeCloudSpec = z.object({alibaba: alibabaNodeSpec.optional(), anexia: anexiaNodeSpec.optional(), aws: aWSNodeSpec.optional(), azure: azureNodeSpec.optional(), digitalocean: digitaloceanNodeSpec.optional(), gcp: gCPNodeSpec.optional(), hetzner: hetznerNodeSpec.optional(), kubevirt: kubevirtNodeSpec.optional(), openstack: openstackNodeSpec.optional(), packet: packetNodeSpec.optional(), vsphere: vSphereNodeSpec.optional()}); export const centOSSpec = z.object({distUpgradeOnBoot: z.boolean().optional()}); export const flatcarSpec = z.object({disableAutoUpdate: z.boolean().optional()}); export const rHELSpec = z.object({distUpgradeOnBoot: z.boolean().optional(), rhelSubscriptionManagerPassword: z.string().optional(), rhelSubscriptionManagerUser: z.string().optional(), rhsmOfflineToken: z.string().optional()}); export const sLESSpec = z.object({distUpgradeOnBoot: z.boolean().optional()}); export const ubuntuSpec = z.object({distUpgradeOnBoot: z.boolean().optional()}); export const operatingSystemSpec = z.object({centos: centOSSpec.optional(), flatcar: flatcarSpec.optional(), rhel: rHELSpec.optional(), sles: sLESSpec.optional(), ubuntu: ubuntuSpec.optional()}); export const taintSpec = z.object({effect: z.string().optional(), key: z.string().optional(), value: z.string().optional()}); export const nodeVersionInfo = z.object({kubelet: z.string().optional()}); export const nodeSpec = z.object({cloud: nodeCloudSpec, labels: z.record(z.string(), z.string()).optional(), operatingSystem: operatingSystemSpec, sshUserName: z.string().optional(), taints: z.array(taintSpec).optional(), versions: nodeVersionInfo}); export const nodeDeploymentSpec = z.object({dynamicConfig: z.boolean().optional(), paused: z.boolean().optional(), replicas: z.number().int(), template: nodeSpec}); export const machineDeploymentStatus = z.object({availableReplicas: z.number().int().optional(), observedGeneration: z.number().int().optional(), readyReplicas: z.number().int().optional(), replicas: z.number().int().optional(), unavailableReplicas: z.number().int().optional(), updatedReplicas: z.number().int().optional()}); export const nodeDeployment = z.object({annotations: z.record(z.string(), z.string()).optional(), creationTimestamp: z.string().optional(), deletionTimestamp: z.string().optional(), id: z.string().optional(), name: z.string().optional(), spec: nodeDeploymentSpec.optional(), status: machineDeploymentStatus.optional()}); export const clusterTemplateSSHKey = z.object({id: z.string().optional(), name: z.string().optional()}); export const clusterTemplate = z.object({cluster: cluster.optional(), id: z.string().optional(), name: z.string().optional(), nodeDeployment: nodeDeployment.optional(), projectID: z.string().optional(), scope: z.string().optional(), user: z.string().optional(), userSshKeys: z.array(clusterTemplateSSHKey).optional()}); export const clusterTemplateList = z.array(clusterTemplate); 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 }; /** * List cluster templates for the given project. * * GET /api/v2/projects/{project_id}/clustertemplates */ export const getApiApiV2ProjectsProjectIdClustertemplates = async (args: GetApiApiV2ProjectsProjectIdClustertemplatesArgs, options: GetApiApiV2ProjectsProjectIdClustertemplatesOptions) => { const {baseUrl, fetch: fetchFn = fetch, apiKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (apiKey !== undefined) headers.set("Authorization", apiKey) const url = `${baseUrl.replace(/\/+$/, '')}/api/v2/projects/${encodeURIComponent(String(args.project_id))}/clustertemplates${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(clusterTemplateList, await res.json()) };