@soft-stech/argo-rollouts
Version:
1,188 lines • 103 kB
JavaScript
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