UNPKG

@soft-stech/argo-rollouts

Version:
1,188 lines 103 kB
import { z } from "zod"; import { iObjectMetaSchema } from "@soft-stech/apimachinery/apis/meta/v1/ObjectMeta.schema"; export const IRolloutSchema = z.object({ apiVersion: z.literal("argoproj.io/v1alpha1"), kind: z.literal("Rollout"), metadata: iObjectMetaSchema.optional(), spec: z.object({ analysis: z .object({ /** * * @format int32 */ successfulRunHistoryLimit: z.int32().optional(), /** * * @format int32 */ unsuccessfulRunHistoryLimit: z.int32().optional() }) .optional(), /** * * @format int32 */ minReadySeconds: z.int32().optional(), paused: z.boolean().optional(), progressDeadlineAbort: z.boolean().optional(), /** * * @format int32 */ progressDeadlineSeconds: z.int32().optional(), /** * * @format int32 */ replicas: z.int32().optional(), /** * * @format date-time */ restartAt: z.iso.datetime().optional().nullable(), /** * * @format int32 */ revisionHistoryLimit: z.int32().optional(), rollbackWindow: z .object({ /** * * @format int32 */ revisions: z.int32().optional() }) .optional(), selector: z .object({ matchExpressions: z .array(z.object({ key: z.string(), operator: z.string(), values: z.array(z.string()).optional() })) .optional(), matchLabels: z.record(z.string(), z.string()).optional() }) .optional(), strategy: z .object({ blueGreen: z .object({ /** * * @format int32 */ abortScaleDownDelaySeconds: z.int32().optional(), activeMetadata: z .object({ annotations: z.record(z.string(), z.string()).optional(), labels: z.record(z.string(), z.string()).optional() }) .optional(), activeService: z.string(), antiAffinity: z .object({ preferredDuringSchedulingIgnoredDuringExecution: z .object({ /** * * @format int32 */ weight: z.int32() }) .optional(), requiredDuringSchedulingIgnoredDuringExecution: z .object({}) .optional() }) .optional(), autoPromotionEnabled: z.boolean().optional(), /** * * @format int32 */ autoPromotionSeconds: z.int32().optional(), maxUnavailable: z.union([z.number(), z.string()]).optional(), postPromotionAnalysis: z .object({ args: z .array(z.object({ name: z.string(), value: z.string().optional(), valueFrom: z .object({ fieldRef: z .object({ fieldPath: z.string() }) .optional(), podTemplateHashValue: z.string().optional() }) .optional() })) .optional(), dryRun: z .array(z.object({ metricName: z.string() })) .optional(), measurementRetention: z .array(z.object({ /** * * @format int32 */ limit: z.int32(), metricName: z.string() })) .optional(), templates: z .array(z.object({ clusterScope: z.boolean().optional(), templateName: z.string().optional() })) .optional() }) .optional(), prePromotionAnalysis: z .object({ args: z .array(z.object({ name: z.string(), value: z.string().optional(), valueFrom: z .object({ fieldRef: z .object({ fieldPath: z.string() }) .optional(), podTemplateHashValue: z.string().optional() }) .optional() })) .optional(), dryRun: z .array(z.object({ metricName: z.string() })) .optional(), measurementRetention: z .array(z.object({ /** * * @format int32 */ limit: z.int32(), metricName: z.string() })) .optional(), templates: z .array(z.object({ clusterScope: z.boolean().optional(), templateName: z.string().optional() })) .optional() }) .optional(), previewMetadata: z .object({ annotations: z.record(z.string(), z.string()).optional(), labels: z.record(z.string(), z.string()).optional() }) .optional(), /** * * @format int32 */ previewReplicaCount: z.int32().optional(), previewService: z.string().optional(), /** * * @format int32 */ scaleDownDelayRevisionLimit: z.int32().optional(), /** * * @format int32 */ scaleDownDelaySeconds: z.int32().optional() }) .optional(), canary: z .object({ /** * * @format int32 */ abortScaleDownDelaySeconds: z.int32().optional(), analysis: z .object({ args: z .array(z.object({ name: z.string(), value: z.string().optional(), valueFrom: z .object({ fieldRef: z .object({ fieldPath: z.string() }) .optional(), podTemplateHashValue: z.string().optional() }) .optional() })) .optional(), dryRun: z .array(z.object({ metricName: z.string() })) .optional(), measurementRetention: z .array(z.object({ /** * * @format int32 */ limit: z.int32(), metricName: z.string() })) .optional(), /** * * @format int32 */ startingStep: z.int32().optional(), templates: z .array(z.object({ clusterScope: z.boolean().optional(), templateName: z.string().optional() })) .optional() }) .optional(), antiAffinity: z .object({ preferredDuringSchedulingIgnoredDuringExecution: z .object({ /** * * @format int32 */ weight: z.int32() }) .optional(), requiredDuringSchedulingIgnoredDuringExecution: z .object({}) .optional() }) .optional(), canaryMetadata: z .object({ annotations: z.record(z.string(), z.string()).optional(), labels: z.record(z.string(), z.string()).optional() }) .optional(), canaryService: z.string().optional(), dynamicStableScale: z.boolean().optional(), maxSurge: z.union([z.number(), z.string()]).optional(), maxUnavailable: z.union([z.number(), z.string()]).optional(), /** * * @format int32 */ minPodsPerReplicaSet: z.int32().optional(), pingPong: z .object({ pingService: z.string(), pongService: z.string() }) .optional(), /** * * @format int32 */ scaleDownDelayRevisionLimit: z.int32().optional(), /** * * @format int32 */ scaleDownDelaySeconds: z.int32().optional(), stableMetadata: z .object({ annotations: z.record(z.string(), z.string()).optional(), labels: z.record(z.string(), z.string()).optional() }) .optional(), stableService: z.string().optional(), steps: z .array(z.object({ analysis: z .object({ args: z .array(z.object({ name: z.string(), value: z.string().optional(), valueFrom: z .object({ fieldRef: z .object({ fieldPath: z.string() }) .optional(), podTemplateHashValue: z.string().optional() }) .optional() })) .optional(), dryRun: z .array(z.object({ metricName: z.string() })) .optional(), measurementRetention: z .array(z.object({ /** * * @format int32 */ limit: z.int32(), metricName: z.string() })) .optional(), templates: z .array(z.object({ clusterScope: z.boolean().optional(), templateName: z.string().optional() })) .optional() }) .optional(), experiment: z .object({ analyses: z .array(z.object({ args: z .array(z.object({ name: z.string(), value: z.string().optional(), valueFrom: z .object({ fieldRef: z .object({ fieldPath: z.string() }) .optional(), podTemplateHashValue: z .string() .optional() }) .optional() })) .optional(), clusterScope: z.boolean().optional(), name: z.string(), requiredForCompletion: z.boolean().optional(), templateName: z.string() })) .optional(), duration: z.string().optional(), templates: z.array(z.object({ metadata: z .object({ annotations: z .record(z.string(), z.string()) .optional(), labels: z .record(z.string(), z.string()) .optional() }) .optional(), name: z.string(), /** * * @format int32 */ replicas: z.int32().optional(), selector: z .object({ matchExpressions: z .array(z.object({ key: z.string(), operator: z.string(), values: z.array(z.string()).optional() })) .optional(), matchLabels: z .record(z.string(), z.string()) .optional() }) .optional(), service: z .object({ name: z.string().optional() }) .optional(), specRef: z.string(), /** * * @format int32 */ weight: z.int32().optional() })) }) .optional(), pause: z .object({ duration: z.union([z.number(), z.string()]).optional() }) .optional(), setCanaryScale: z .object({ matchTrafficWeight: z.boolean().optional(), /** * * @format int32 */ replicas: z.int32().optional(), /** * * @format int32 */ weight: z.int32().optional() }) .optional(), setHeaderRoute: z .object({ match: z .array(z.object({ headerName: z.string(), headerValue: z.object({ exact: z.string().optional(), prefix: z.string().optional(), regex: z.string().optional() }) })) .optional(), name: z.string().optional() }) .optional(), setMirrorRoute: z .object({ match: z .array(z.object({ headers: z .record(z.string(), z.object({ exact: z.string().optional(), prefix: z.string().optional(), regex: z.string().optional() })) .optional(), method: z .object({ exact: z.string().optional(), prefix: z.string().optional(), regex: z.string().optional() }) .optional(), path: z .object({ exact: z.string().optional(), prefix: z.string().optional(), regex: z.string().optional() }) .optional() })) .optional(), name: z.string(), /** * * @format int32 */ percentage: z.int32().optional() }) .optional(), /** * * @format int32 */ setWeight: z.int32().optional() })) .optional(), trafficRouting: z .object({ alb: z .object({ annotationPrefix: z.string().optional(), ingress: z.string(), rootService: z.string().optional(), /** * * @format int32 */ servicePort: z.int32(), stickinessConfig: z .object({ durationSeconds: z.number(), enabled: z.boolean() }) .optional() }) .optional(), ambassador: z .object({ mappings: z.array(z.string()) }) .optional(), apisix: z .object({ route: z .object({ name: z.string(), rules: z.array(z.string()).optional() }) .optional() }) .optional(), appMesh: z .object({ virtualNodeGroup: z .object({ canaryVirtualNodeRef: z.object({ name: z.string() }), stableVirtualNodeRef: z.object({ name: z.string() }) }) .optional(), virtualService: z .object({ name: z.string(), routes: z.array(z.string()).optional() }) .optional() }) .optional(), istio: z .object({ destinationRule: z .object({ canarySubsetName: z.string(), name: z.string(), stableSubsetName: z.string() }) .optional(), virtualService: z .object({ name: z.string(), routes: z.array(z.string()).optional(), tcpRoutes: z .array(z.object({ port: z.number().optional() })) .optional(), tlsRoutes: z .array(z.object({ port: z.number().optional(), sniHosts: z.array(z.string()).optional() })) .optional() }) .optional(), virtualServices: z .array(z.object({ name: z.string(), routes: z.array(z.string()).optional(), tcpRoutes: z .array(z.object({ port: z.number().optional() })) .optional(), tlsRoutes: z .array(z.object({ port: z.number().optional(), sniHosts: z.array(z.string()).optional() })) .optional() })) .optional() }) .optional(), managedRoutes: z .array(z.object({ name: z.string() })) .optional(), nginx: z .object({ additionalIngressAnnotations: z .record(z.string(), z.string()) .optional(), annotationPrefix: z.string().optional(), stableIngress: z.string().optional(), stableIngresses: z.array(z.string()).optional() }) .optional(), plugins: z.object({}).optional(), smi: z .object({ rootService: z.string().optional(), trafficSplitName: z.string().optional() }) .optional(), traefik: z .object({ weightedTraefikServiceName: z.string() }) .optional() }) .optional() }) .optional() }) .optional(), template: z .object({ metadata: z .object({ annotations: z.record(z.string(), z.string()).optional(), labels: z.record(z.string(), z.string()).optional() }) .optional(), spec: z .object({ activeDeadlineSeconds: z.number().optional(), affinity: z .object({ nodeAffinity: z .object({ preferredDuringSchedulingIgnoredDuringExecution: z .array(z.object({ preference: z.object({ matchExpressions: z .array(z.object({ key: z.string(), operator: z.string(), values: z.array(z.string()).optional() })) .optional(), matchFields: z .array(z.object({ key: z.string(), operator: z.string(), values: z.array(z.string()).optional() })) .optional() }), /** * * @format int32 */ weight: z.int32() })) .optional(), requiredDuringSchedulingIgnoredDuringExecution: z .object({ nodeSelectorTerms: z.array(z.object({ matchExpressions: z .array(z.object({ key: z.string(), operator: z.string(), values: z.array(z.string()).optional() })) .optional(), matchFields: z .array(z.object({ key: z.string(), operator: z.string(), values: z.array(z.string()).optional() })) .optional() })) }) .optional() }) .optional(), podAffinity: z .object({ preferredDuringSchedulingIgnoredDuringExecution: z .array(z.object({ podAffinityTerm: z.object({ labelSelector: z .object({ matchExpressions: z .array(z.object({ key: z.string(), operator: z.string(), values: z.array(z.string()).optional() })) .optional(), matchLabels: z .record(z.string(), z.string()) .optional() }) .optional(), namespaceSelector: z .object({ matchExpressions: z .array(z.object({ key: z.string(), operator: z.string(), values: z.array(z.string()).optional() })) .optional(), matchLabels: z .record(z.string(), z.string()) .optional() }) .optional(), namespaces: z.array(z.string()).optional(), topologyKey: z.string() }), /** * * @format int32 */ weight: z.int32() })) .optional(), requiredDuringSchedulingIgnoredDuringExecution: z .array(z.object({ labelSelector: z .object({ matchExpressions: z .array(z.object({ key: z.string(), operator: z.string(), values: z.array(z.string()).optional() })) .optional(), matchLabels: z .record(z.string(), z.string()) .optional() }) .optional(), namespaceSelector: z .object({ matchExpressions: z .array(z.object({ key: z.string(), operator: z.string(), values: z.array(z.string()).optional() })) .optional(), matchLabels: z .record(z.string(), z.string()) .optional() }) .optional(), namespaces: z.array(z.string()).optional(), topologyKey: z.string() })) .optional() }) .optional(), podAntiAffinity: z .object({ preferredDuringSchedulingIgnoredDuringExecution: z .array(z.object({ podAffinityTerm: z.object({ labelSelector: z .object({ matchExpressions: z .array(z.object({ key: z.string(), operator: z.string(), values: z.array(z.string()).optional() })) .optional(), matchLabels: z .record(z.string(), z.string()) .optional() }) .optional(), namespaceSelector: z .object({ matchExpressions: z .array(z.object({ key: z.string(), operator: z.string(), values: z.array(z.string()).optional() })) .optional(), matchLabels: z .record(z.string(), z.string()) .optional() }) .optional(), namespaces: z.array(z.string()).optional(), topologyKey: z.string() }), /** * * @format int32 */ weight: z.int32() })) .optional(), requiredDuringSchedulingIgnoredDuringExecution: z .array(z.object({ labelSelector: z .object({ matchExpressions: z .array(z.object({ key: z.string(), operator: z.string(), values: z.array(z.string()).optional() })) .optional(), matchLabels: z .record(z.string(), z.string()) .optional() }) .optional(), namespaceSelector: z .object({ matchExpressions: z .array(z.object({ key: z.string(), operator: z.string(), values: z.array(z.string()).optional() })) .optional(), matchLabels: z .record(z.string(), z.string()) .optional() }) .optional(), namespaces: z.array(z.string()).optional(), topologyKey: z.string() })) .optional() }) .optional() }) .optional(), automountServiceAccountToken: z.boolean().optional(), containers: z.array(z.object({ args: z.array(z.string()).optional(), command: z.array(z.string()).optional(), env: z .array(z.object({ name: z.string(), value: z.string().optional(), valueFrom: z .object({ configMapKeyRef: z .object({ key: z.string(), name: z.string().optional(), optional: z.boolean().optional() }) .optional(), fieldRef: z .object({ apiVersion: z.string().optional(), fieldPath: z.string() }) .optional(), resourceFieldRef: z .object({ containerName: z.string().optional(), /** * * @schema union([z.number(), z.string().regex(/^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$/)]).optional() */ divisor: z .union([ z.number(), z .string() .regex(/^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$/) ]) .optional(), resource: z.string() }) .optional(), secretKeyRef: z .object({ key: z.string(), name: z.string().optional(), optional: z.boolean().optional() }) .optional() }) .optional() })) .optional(), envFrom: z .array(z.object({ configMapRef: z .object({ name: z.string().optional(), optional: z.boolean().optional() }) .optional(), prefix: z.string().optional(), secretRef: z .object({ name: z.string().optional(), optional: z.boolean().optional() }) .optional() })) .optional(), image: z.string().optional(), imagePullPolicy: z.string().optional(), lifecycle: z .object({ postStart: z .object({ exec: z .object({ command: z.array(z.string()).optional() }) .optional(), httpGet: z .object({ host: z.string().optional(), httpHeaders: z .array(z.object({ name: z.string(), value: z.string() })) .optional(), path: z.string().optional(), port: z.union([z.number(), z.string()]), scheme: z.string().optional() }) .optional(), tcpSocket: z .object({ host: z.string().optional(), port: z.union([z.number(), z.string()]) }) .optional() }) .optional(), preStop: z .object({ exec: z .object({ command: z.array(z.string()).optional() }) .optional(), httpGet: z .object({ host: z.string().optional(), httpHeaders: z .array(z.object({ name: z.string(), value: z.string() })) .optional(), path: z.string().optional(), port: z.union([z.number(), z.string()]), scheme: z.string().optional() }) .optional(), tcpSocket: z .object({ host: z.string().optional(), port: z.union([z.number(), z.string()]) }) .optional() }) .optional() }) .optional(), livenessProbe: z .object({ exec: z .object({ command: z.array(z.string()).optional() }) .optional(), /** * * @format int32 */ failureThreshold: z.int32().optional(), grpc: z .object({ /** * * @format int32 */ port: z.int32(), service: z.string().optional() }) .optional(), httpGet: z .object({ host: z.string().optional(), httpHeaders: z .array(z.object({ name: z.string(), value: z.string() })) .optional(), path: z.string().optional(), port: z.union([z.number(), z.string()]), scheme: z.string().optional() }) .optional(), /** * * @format int32 */ initialDelaySeconds: z.int32().optional(), /** * * @format int32 */ periodSeconds: z.int32().optional(), /** * * @format int32 */ successThreshold: z.int32().optional(), tcpSocket: z .object({ host: z.string().optional(), port: z.union([z.number(), z.string()]) }) .optional(), terminationGracePeriodSeconds: z.number().optional(), /** * * @format int32 */ timeoutSeconds: z.int32().optional() }) .optional(), name: z.string(), ports: z .array(z.object({ /** * * @format int32 */ containerPort: z.int32(), hostIP: z.string().optional(), /** * * @format int32 */ hostPort: z.int32().optional(), name: z.string().optional(), /** * * @default "TCP" */ protocol: z.string().optional().default("TCP") })) .optional(), readinessProbe: z .object({ exec: z .object({ command: z.array(z.string()).optional() }) .optional(), /** * * @format int32 */ failureThreshold: z.int32().optional(), grpc: z .object({ /** * * @format int32 */ port: z.int32(), service: z.string().optional() }) .optional(), httpGet: z .object({ host: z.string().optional(), httpHeaders: z .array(z.object({ name: z.string(), value: z.string() })) .optional(), path: z.string().optional(), port: z.union([z.number(), z.string()]), scheme: z.string().optional() }) .optional(), /** * * @format int32 */ initialDelaySeconds: z.int32().optional(), /** * * @format int32 */ periodSeconds: z.int32().optional(), /** * * @format int32 */ successThreshold: z.int32().optional(), tcpSocket: z .object({ host: z.string().optional(), port: z.union([z.number(), z.string()]) }) .optional(), terminationGracePeriodSeconds: z.number().optional(), /** * * @format int32 */ timeoutSeconds: z.int32().optional() }) .optional(), resources: z .object({ limits: z.any().optional(), requests: z.any().optional() }) .optional(), securityContext: z .object({ allowPrivilegeEscalation: z.boolean().optional(), capabilities: z .object({ add: z.array(z.string()).optional(), drop: z.array(z.string()).optional() }) .optional(), privileged: z.boolean().optional(), procMount: z.string().optional(), readOnlyRootFilesystem: z.boolean().optional(), runAsGroup: z.number().optional(), runAsNonRoot: z.boolean().optional(), runAsUser: z.number().optional(), seLinuxOptions: z .object({ level: z.string().optional(), role: z.string().optional(), type: z.string().optional(), user: z.string().optional() }) .optional(), seccompProfile: z .object({ localhostProfile: z.string().optional(), t