import {z} from 'zod' export type SeedBackupRestoreConfiguration = {s3BucketName?: string | undefined, s3Endpoint?: string | undefined}; export type DatacenterMeta = {name?: string | undefined}; export type DatacenterSpecAlibaba = {region?: string | undefined}; export type DatacenterSpecAnexia = {location_id?: string | undefined}; export type ImageList = {[key: string]: string}; export type DatacenterSpecAWS = {images?: ImageList | undefined, region?: string | undefined}; export type DatacenterSpecAzure = {location?: string | undefined}; export type DatacenterSpecBringYourOwn = Record; export type DatacenterSpecDigitalocean = {region?: string | undefined}; export type DatacenterSpecFake = {fake_property?: string | undefined}; export type DatacenterSpecGCP = {region?: string | undefined, regional?: boolean | undefined, zone_suffixes?: Array | undefined}; export type DatacenterSpecHetzner = {datacenter?: string | undefined, location?: string | undefined, network?: string | undefined}; export type PodDNSConfigOption = {name?: string | undefined, value?: string | undefined}; export type PodDNSConfig = {nameservers?: Array | undefined, options?: Array | undefined, searches?: Array | undefined}; export type DatacenterSpecKubevirt = {dns_config?: PodDNSConfig | undefined, dns_policy?: string | undefined}; export type ProxyValue = string; export type NodeSettings = {http_proxy?: ProxyValue | undefined, hyperkube_image?: string | undefined, insecure_registries?: Array | undefined, no_proxy?: ProxyValue | undefined, pause_image?: string | undefined, registry_mirrors?: Array | undefined}; export type OpenstackNodeSizeRequirements = {minimum_memory?: number | undefined, minimum_vcpus?: number | undefined}; export type DatacenterSpecOpenstack = {auth_url?: string | undefined, availability_zone?: string | undefined, dns_servers?: Array | undefined, enabled_flavors?: Array | undefined, enforce_floating_ip?: boolean | undefined, ignore_volume_az?: boolean | undefined, images?: ImageList | undefined, manage_security_groups?: boolean | undefined, node_size_requirements?: OpenstackNodeSizeRequirements | undefined, region?: string | undefined, trust_device_path?: boolean | undefined, use_octavia?: boolean | undefined}; export type DatacenterSpecPacket = {facilities?: Array | undefined}; export type VSphereCredentials = {password?: string | undefined, username?: string | undefined}; export type DatacenterSpecVSphere = {allow_insecure?: boolean | undefined, cluster?: string | undefined, datacenter?: string | undefined, datastore?: string | undefined, endpoint?: string | undefined, infra_management_user?: VSphereCredentials | undefined, root_path?: string | undefined, storage_policy?: string | undefined, templates?: ImageList | undefined}; export type DatacenterSpec = {alibaba?: DatacenterSpecAlibaba | undefined, anexia?: DatacenterSpecAnexia | undefined, aws?: DatacenterSpecAWS | undefined, azure?: DatacenterSpecAzure | undefined, bringyourown?: DatacenterSpecBringYourOwn | undefined, country?: string | undefined, digitalocean?: DatacenterSpecDigitalocean | undefined, enforceAuditLogging?: boolean | undefined, enforcePodSecurityPolicy?: boolean | undefined, fake?: DatacenterSpecFake | undefined, gcp?: DatacenterSpecGCP | undefined, hetzner?: DatacenterSpecHetzner | undefined, kubevirt?: DatacenterSpecKubevirt | undefined, location?: string | undefined, node?: NodeSettings | undefined, openstack?: DatacenterSpecOpenstack | undefined, packet?: DatacenterSpecPacket | undefined, provider?: string | undefined, requiredEmailDomain?: string | undefined, requiredEmailDomains?: Array | undefined, seed?: string | undefined, vsphere?: DatacenterSpecVSphere | undefined}; export type Datacenter = {metadata?: DatacenterMeta | undefined, spec?: DatacenterSpec | undefined}; export type ExposeStrategy = string; export type UID = string; export type ObjectReference = {apiVersion?: string | undefined, fieldPath?: string | undefined, kind?: string | undefined, name?: string | undefined, namespace?: string | undefined, resourceVersion?: string | undefined, uid?: UID | undefined}; export type SeedMLASettings = {user_cluster_mla_enabled?: boolean | undefined}; export type ProxySettings = {http_proxy?: ProxyValue | undefined, no_proxy?: ProxyValue | undefined}; export type SeedSpec = {backupRestore?: SeedBackupRestoreConfiguration | undefined, country?: string | undefined, datacenters?: {[key: string]: Datacenter} | undefined, expose_strategy?: ExposeStrategy | undefined, kubeconfig?: ObjectReference | undefined, location?: string | undefined, mla?: SeedMLASettings | undefined, proxy_settings?: ProxySettings | undefined, seed_dns_overwrite?: string | undefined}; export type PatchApiApiV1AdminSeedsSeedNameArgs = {seed_name: string, body: {name?: string | undefined, spec?: SeedSpec | undefined}}; export type PatchApiApiV1AdminSeedsSeedNameOptions = {baseUrl: string, apiKey?: string | undefined, fetch?: typeof fetch | undefined}; export const seedBackupRestoreConfiguration = z.object({s3BucketName: z.string().optional(), s3Endpoint: z.string().optional()}); export const datacenterMeta = z.object({name: z.string().optional()}); export const datacenterSpecAlibaba = z.object({region: z.string().optional()}); export const datacenterSpecAnexia = z.object({location_id: z.string().optional()}); export const imageList = z.record(z.string(), z.string()); export const datacenterSpecAWS = z.object({images: imageList.optional(), region: z.string().optional()}); export const datacenterSpecAzure = z.object({location: z.string().optional()}); export const datacenterSpecBringYourOwn = z.object({}); export const datacenterSpecDigitalocean = z.object({region: z.string().optional()}); export const datacenterSpecFake = z.object({fake_property: z.string().optional()}); export const datacenterSpecGCP = z.object({region: z.string().optional(), regional: z.boolean().optional(), zone_suffixes: z.array(z.string()).optional()}); export const datacenterSpecHetzner = z.object({datacenter: z.string().optional(), location: z.string().optional(), network: z.string().optional()}); export const podDNSConfigOption = z.object({name: z.string().optional(), value: z.string().optional()}); export const podDNSConfig = z.object({nameservers: z.array(z.string()).optional(), options: z.array(podDNSConfigOption).optional(), searches: z.array(z.string()).optional()}); export const datacenterSpecKubevirt = z.object({dns_config: podDNSConfig.optional(), dns_policy: z.string().optional()}); export const proxyValue = z.string(); export const nodeSettings = z.object({http_proxy: proxyValue.optional(), hyperkube_image: z.string().optional(), insecure_registries: z.array(z.string()).optional(), no_proxy: proxyValue.optional(), pause_image: z.string().optional(), registry_mirrors: z.array(z.string()).optional()}); export const openstackNodeSizeRequirements = z.object({minimum_memory: z.number().int().optional(), minimum_vcpus: z.number().int().optional()}); export const datacenterSpecOpenstack = z.object({auth_url: z.string().optional(), availability_zone: z.string().optional(), dns_servers: z.array(z.string()).optional(), enabled_flavors: z.array(z.string()).optional(), enforce_floating_ip: z.boolean().optional(), ignore_volume_az: z.boolean().optional(), images: imageList.optional(), manage_security_groups: z.boolean().optional(), node_size_requirements: openstackNodeSizeRequirements.optional(), region: z.string().optional(), trust_device_path: z.boolean().optional(), use_octavia: z.boolean().optional()}); export const datacenterSpecPacket = z.object({facilities: z.array(z.string()).optional()}); export const vSphereCredentials = z.object({password: z.string().optional(), username: z.string().optional()}); export const datacenterSpecVSphere = z.object({allow_insecure: z.boolean().optional(), cluster: z.string().optional(), datacenter: z.string().optional(), datastore: z.string().optional(), endpoint: z.string().optional(), infra_management_user: vSphereCredentials.optional(), root_path: z.string().optional(), storage_policy: z.string().optional(), templates: imageList.optional()}); export const datacenterSpec = z.object({alibaba: datacenterSpecAlibaba.optional(), anexia: datacenterSpecAnexia.optional(), aws: datacenterSpecAWS.optional(), azure: datacenterSpecAzure.optional(), bringyourown: datacenterSpecBringYourOwn.optional(), country: z.string().optional(), digitalocean: datacenterSpecDigitalocean.optional(), enforceAuditLogging: z.boolean().optional(), enforcePodSecurityPolicy: z.boolean().optional(), fake: datacenterSpecFake.optional(), gcp: datacenterSpecGCP.optional(), hetzner: datacenterSpecHetzner.optional(), kubevirt: datacenterSpecKubevirt.optional(), location: z.string().optional(), node: nodeSettings.optional(), openstack: datacenterSpecOpenstack.optional(), packet: datacenterSpecPacket.optional(), provider: z.string().optional(), requiredEmailDomain: z.string().optional(), requiredEmailDomains: z.array(z.string()).optional(), seed: z.string().optional(), vsphere: datacenterSpecVSphere.optional()}); export const datacenter = z.object({metadata: datacenterMeta.optional(), spec: datacenterSpec.optional()}); export const exposeStrategy = z.string(); export const uID = z.string(); export const objectReference = z.object({apiVersion: z.string().optional(), fieldPath: z.string().optional(), kind: z.string().optional(), name: z.string().optional(), namespace: z.string().optional(), resourceVersion: z.string().optional(), uid: uID.optional()}); export const seedMLASettings = z.object({user_cluster_mla_enabled: z.boolean().optional()}); export const proxySettings = z.object({http_proxy: proxyValue.optional(), no_proxy: proxyValue.optional()}); export const seed = z.object({backupRestore: seedBackupRestoreConfiguration.optional(), country: z.string().optional(), datacenters: z.record(z.string(), datacenter).optional(), expose_strategy: exposeStrategy.optional(), kubeconfig: objectReference.optional(), location: z.string().optional(), mla: seedMLASettings.optional(), name: z.string().optional(), proxy_settings: proxySettings.optional(), seed_dns_overwrite: 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 }; /** * Updates the seed. * * PATCH /api/v1/admin/seeds/{seed_name} */ export const patchApiApiV1AdminSeedsSeedName = async (args: PatchApiApiV1AdminSeedsSeedNameArgs, options: PatchApiApiV1AdminSeedsSeedNameOptions) => { 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/admin/seeds/${encodeURIComponent(String(args.seed_name))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PATCH", 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(seed, await res.json()) };