@soft-stech/flagger
Version:
1,773 lines • 88.6 kB
JavaScript
import { addSchema } from "@soft-stech/apimachinery/_schemas/IoK8sApimachineryPkgApisMetaV1ObjectMeta";
import { Model, setSchema, createTypeMetaGuard } from "@soft-stech/base";
import { register } from "@soft-stech/validate";
const schemaId = "flagger.app.v1beta1.Canary";
const schema = {
"type": "object",
"properties": {
"apiVersion": {
"type": "string",
"enum": [
"flagger.app/v1beta1"
]
},
"kind": {
"type": "string",
"enum": [
"Canary"
]
},
"metadata": {
"oneOf": [
{
"$ref": "io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta#"
},
{
"type": "null"
}
]
},
"spec": {
"type": "object",
"required": [
"targetRef",
"service",
"analysis"
],
"properties": {
"provider": {
"type": "string",
"nullable": true
},
"metricsServer": {
"type": "string",
"nullable": true
},
"progressDeadlineSeconds": {
"type": "number",
"nullable": true
},
"targetRef": {
"type": "object",
"required": [
"apiVersion",
"kind",
"name"
],
"properties": {
"apiVersion": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"DaemonSet",
"Deployment",
"Service"
]
},
"name": {
"type": "string"
}
}
},
"autoscalerRef": {
"type": "object",
"required": [
"apiVersion",
"kind",
"name"
],
"properties": {
"apiVersion": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"HorizontalPodAutoscaler",
"ScaledObject"
]
},
"name": {
"type": "string"
},
"primaryScalerQueries": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"properties": {},
"nullable": true
},
"primaryScalerReplicas": {
"type": "object",
"properties": {
"minReplicas": {
"type": "number",
"nullable": true
},
"maxReplicas": {
"type": "number",
"nullable": true
}
},
"nullable": true
}
},
"nullable": true
},
"ingressRef": {
"type": "object",
"required": [
"apiVersion",
"kind",
"name"
],
"properties": {
"apiVersion": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"Ingress"
]
},
"name": {
"type": "string"
}
},
"nullable": true
},
"routeRef": {
"type": "object",
"required": [
"apiVersion",
"kind",
"name"
],
"properties": {
"apiVersion": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"ApisixRoute"
]
},
"name": {
"type": "string"
}
},
"nullable": true
},
"upstreamRef": {
"type": "object",
"required": [
"apiVersion",
"kind",
"name"
],
"properties": {
"apiVersion": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"Upstream"
]
},
"name": {
"type": "string"
},
"namespace": {
"type": "string",
"nullable": true
}
},
"nullable": true
},
"service": {
"type": "object",
"required": [
"port"
],
"properties": {
"name": {
"type": "string",
"nullable": true
},
"port": {
"type": "number"
},
"portName": {
"type": "string",
"nullable": true
},
"appProtocol": {
"type": "string",
"nullable": true
},
"targetPort": {
"oneOf": [
{},
{
"type": "null"
}
]
},
"portDiscovery": {
"type": "boolean",
"nullable": true
},
"timeout": {
"type": "string",
"nullable": true
},
"meshName": {
"type": "string",
"nullable": true
},
"backends": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"hosts": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"delegation": {
"type": "boolean",
"nullable": true
},
"match": {
"type": "array",
"items": {
"properties": {
"authority": {
"oneOf": [
{
"not": {
"anyOf": [
{
"required": [
"exact"
]
},
{
"required": [
"prefix"
]
},
{
"required": [
"regex"
]
}
]
}
},
{
"required": [
"exact"
]
},
{
"required": [
"prefix"
]
},
{
"required": [
"regex"
]
}
],
"properties": {
"exact": {
"format": "string",
"type": "string",
"nullable": true
},
"prefix": {
"format": "string",
"type": "string",
"nullable": true
},
"regex": {
"format": "string",
"type": "string",
"nullable": true
}
},
"type": "object",
"nullable": true
},
"gateways": {
"items": {
"format": "string",
"type": "string"
},
"type": "array",
"nullable": true
},
"headers": {
"additionalProperties": {
"oneOf": [
{
"not": {
"anyOf": [
{
"required": [
"exact"
]
},
{
"required": [
"prefix"
]
},
{
"required": [
"regex"
]
}
]
}
},
{
"required": [
"exact"
]
},
{
"required": [
"prefix"
]
},
{
"required": [
"regex"
]
}
],
"properties": {
"exact": {
"format": "string",
"type": "string",
"nullable": true
},
"prefix": {
"format": "string",
"type": "string",
"nullable": true
},
"regex": {
"format": "string",
"type": "string",
"nullable": true
}
},
"type": "object"
},
"type": "object",
"properties": {},
"nullable": true
},
"ignoreUriCase": {
"type": "boolean",
"nullable": true
},
"method": {
"oneOf": [
{
"not": {
"anyOf": [
{
"required": [
"exact"
]
},
{
"required": [
"prefix"
]
},
{
"required": [
"regex"
]
}
]
}
},
{
"required": [
"exact"
]
},
{
"required": [
"prefix"
]
},
{
"required": [
"regex"
]
}
],
"properties": {
"exact": {
"format": "string",
"type": "string",
"nullable": true
},
"prefix": {
"format": "string",
"type": "string",
"nullable": true
},
"regex": {
"format": "string",
"type": "string",
"nullable": true
}
},
"type": "object",
"nullable": true
},
"name": {
"format": "string",
"type": "string",
"nullable": true
},
"port": {
"type": "integer",
"nullable": true
},
"queryParams": {
"additionalProperties": {
"oneOf": [
{
"not": {
"anyOf": [
{
"required": [
"exact"
]
},
{
"required": [
"prefix"
]
},
{
"required": [
"regex"
]
}
]
}
},
{
"required": [
"exact"
]
},
{
"required": [
"prefix"
]
},
{
"required": [
"regex"
]
}
],
"properties": {
"exact": {
"format": "string",
"type": "string",
"nullable": true
},
"prefix": {
"format": "string",
"type": "string",
"nullable": true
},
"regex": {
"format": "string",
"type": "string",
"nullable": true
}
},
"type": "object"
},
"type": "object",
"properties": {},
"nullable": true
},
"scheme": {
"oneOf": [
{
"not": {
"anyOf": [
{
"required": [
"exact"
]
},
{
"required": [
"prefix"
]
},
{
"required": [
"regex"
]
}
]
}
},
{
"required": [
"exact"
]
},
{
"required": [
"prefix"
]
},
{
"required": [
"regex"
]
}
],
"properties": {
"exact": {
"format": "string",
"type": "string",
"nullable": true
},
"prefix": {
"format": "string",
"type": "string",
"nullable": true
},
"regex": {
"format": "string",
"type": "string",
"nullable": true
}
},
"type": "object",
"nullable": true
},
"sourceLabels": {
"additionalProperties": {
"format": "string",
"type": "string"
},
"type": "object",
"properties": {},
"nullable": true
},
"sourceNamespace": {
"format": "string",
"type": "string",
"nullable": true
},
"uri": {
"oneOf": [
{
"not": {
"anyOf": [
{
"required": [
"exact"
]
},
{
"required": [
"prefix"
]
},
{
"required": [
"regex"
]
}
]
}
},
{
"required": [
"exact"
]
},
{
"required": [
"prefix"
]
},
{
"required": [
"regex"
]
}
],
"properties": {
"exact": {
"format": "string",
"type": "string",
"nullable": true
},
"prefix": {
"format": "string",
"type": "string",
"nullable": true
},
"regex": {
"format": "string",
"type": "string",
"nullable": true
}
},
"type": "object",
"nullable": true
},
"withoutHeaders": {
"additionalProperties": {
"oneOf": [
{
"not": {
"anyOf": [
{
"required": [
"exact"
]
},
{
"required": [
"prefix"
]
},
{
"required": [
"regex"
]
}
]
}
},
{
"required": [
"exact"
]
},
{
"required": [
"prefix"
]
},
{
"required": [
"regex"
]
}
],
"properties": {
"exact": {
"format": "string",
"type": "string",
"nullable": true
},
"prefix": {
"format": "string",
"type": "string",
"nullable": true
},
"regex": {
"format": "string",
"type": "string",
"nullable": true
}
},
"type": "object"
},
"type": "object",
"properties": {},
"nullable": true
}
},
"type": "object"
},
"nullable": true
},
"retries": {
"type": "object",
"properties": {
"attempts": {
"format": "int32",
"type": "integer",
"nullable": true
},
"perTryTimeout": {
"type": "string",
"nullable": true
},
"retryOn": {
"format": "string",
"type": "string",
"nullable": true
}
},
"nullable": true
},
"rewrite": {
"type": "object",
"properties": {
"uri": {
"format": "string",
"type": "string",
"nullable": true
}
},
"nullable": true
},
"headers": {
"type": "object",
"properties": {
"request": {
"properties": {
"add": {
"additionalProperties": {
"format": "string",
"type": "string"
},
"type": "object",
"properties": {},
"nullable": true
},
"remove": {
"items": {
"format": "string",
"type": "string"
},
"type": "array",
"nullable": true
},
"set": {
"additionalProperties": {
"format": "string",
"type": "string"
},
"type": "object",
"properties": {},
"nullable": true
}
},
"type": "object",
"nullable": true
},
"response": {
"properties": {
"add": {
"additionalProperties": {
"format": "string",
"type": "string"
},
"type": "object",
"properties": {},
"nullable": true
},
"remove": {
"items": {
"format": "string",
"type": "string"
},
"type": "array",
"nullable": true
},
"set": {
"additionalProperties": {
"format": "string",
"type": "string"
},
"type": "object",
"properties": {},
"nullable": true
}
},
"type": "object",
"nullable": true
}
},
"nullable": true
},
"gateways": {
"type": "array",
"items": {
"type": "string"
},
"nullable": true
},
"gatewayRefs": {
"maxItems": 32,
"type": "array",
"items": {
"required": [
"name"
],
"type": "object",
"properties": {
"group": {
"default": "gateway.networking.k8s.io",
"maxLength": 253,
"type": "string",
"pattern": "^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$",
"nullable": true
},
"kind": {
"default": "Gateway",
"maxLength": 63,
"minLength": 1,
"type": "string",
"pattern": "^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$",
"nullable": true
},
"name": {
"maxLength": 253,
"minLength": 1,
"type": "string"
},
"namespace": {
"maxLength": 63,
"minLength": 1,
"type": "string",
"pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?$",
"nullable": true
},
"sectionName": {
"maxLength": 253,
"minLength": 1,
"type": "string",
"pattern": "^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$",
"nullable": true
}
}
},
"nullable": true
},
"corsPolicy": {
"type": "object",
"properties": {
"allowCredentials": {
"type": "boolean",
"nullable": true
},
"allowHeaders": {
"items": {
"format": "string",
"type": "string"
},
"type": "array",
"nullable": true
},
"allowMethods": {
"items": {
"format": "string",
"type": "string"
},
"type": "array",
"nullable": true
},
"allowOrigin": {
"items": {
"format": "string",
"type": "string"
},
"type": "array",
"nullable": true
},
"allowOrigins": {
"type": "array",
"items": {
"type": "object",
"oneOf": [
{
"required": [
"exact"
]
},
{
"required": [
"prefix"
]
},
{
"required": [
"regex"
]
}
],
"properties": {
"exact": {
"format": "string",
"type": "string",
"nullable": true
},
"prefix": {
"format": "string",
"type": "string",
"nullable": true
},
"regex": {
"format": "string",
"type": "string",
"nullable": true
}
}
},
"nullable": true
},
"exposeHeaders": {
"items": {
"format": "string",
"type": "string"
},
"type": "array",
"nullable": true
},
"maxAge": {
"type": "string",
"nullable": true
}
},
"nullable": true
},
"trafficPolicy": {
"type": "object",
"properties": {
"connectionPool": {
"type": "object",
"properties": {
"http": {
"type": "object",
"properties": {
"h2UpgradePolicy": {
"enum": [
"DEFAULT",
"DO_NOT_UPGRADE",
"UPGRADE"
],
"type": "string",
"nullable": true
},
"http1MaxPendingRequests": {
"format": "int32",
"type": "integer",
"nullable": true
},
"http2MaxRequests": {
"format": "int32",
"type": "integer",
"nullable": true
},
"idleTimeout": {
"type": "string",
"nullable": true
},
"maxRequestsPerConnection": {
"format": "int32",
"type": "integer",
"nullable": true
},
"maxRetries": {
"format": "int32",
"type": "integer",
"nullable": true
}
},
"nullable": true
}
},
"nullable": true
},
"loadBalancer": {
"type": "object",
"oneOf": [
{
"required": [
"simple"
]
},
{
"properties": {
"consistentHash": {
"oneOf": [
{
"required": [
"httpHeaderName"
]
},
{
"required": [
"httpCookie"
]
},
{
"required": [
"useSourceIp"
]
},
{
"required": [
"httpQueryParameterName"
]
}
]
}
},
"required": [
"consistentHash"
]
}
],
"properties": {
"consistentHash": {
"properties": {
"httpCookie": {
"properties": {
"name": {
"format": "string",
"type": "string",
"nullable": true
},
"path": {
"format": "string",
"type": "string",
"nullable": true
},
"ttl": {
"type": "string",
"nullable": true
}
},
"type": "object",
"nullable": true
},
"httpHeaderName": {
"format": "string",
"type": "string",
"nullable": true
},
"httpQueryParameterName": {
"format": "string",
"type": "string",
"nullable": true
},
"minimumRingSize": {
"type": "integer",
"nullable": true
},
"useSourceIp": {
"type": "boolean",
"nullable": true
}
},
"type": "object",
"nullable": true
},
"localityLbSetting": {
"properties": {
"distribute": {
"items": {
"properties": {
"from": {
"format": "string",
"type": "string",
"nullable": true
},
"to": {
"additionalProperties": {
"type": "integer"
},
"type": "object",
"properties": {},
"nullable": true
}
},
"type": "object"
},
"type": "array",
"nullable": true
},
"enabled": {
"type": "boolean",
"nullable": true
},
"failover": {
"items": {
"properties": {
"from": {
"format": "string",
"type": "string",
"nullable": true
},
"to": {
"format": "string",
"type": "string",
"nullable": true
}
},
"type": "object"
},
"type": "array",
"nullable": true
}
},
"type": "object",
"nullable": true
},
"simple": {
"enum": [
"ROUND_ROBIN",
"LEAST_CONN",
"RANDOM",
"PASSTHROUGH"
],
"type": "string",
"nullable": true
}
},
"nullable": true
},
"outlierDetection": {
"type": "object",
"properties": {
"baseEjectionTime": {
"type": "string",
"nullable": true
},
"consecutive5xxErrors": {
"type": "integer",
"nullable": true
},
"consecutiveErrors": {
"format": "int32",
"type": "integer",
"nullable": true
},
"consecutiveGatewayErrors": {
"format": "int32",
"type": "integer",
"nullable": true
},
"interval": {
"type": "string",
"nullable": true
},
"maxEjectionPercent": {
"format": "int32",
"type": "integer",
"nullable": true
},
"minHealthPercent": {
"format": "int32",
"type": "integer",
"nullable": true
}
},
"nullable": true
},
"tls": {
"type": "object",
"properties": {
"caCertificates": {
"format": "string",
"type": "string",
"nullable": true
},
"clientCertificate": {
"format": "string",
"type": "string",
"nullable": true
},
"mode": {
"enum": [
"DISABLE",
"SIMPLE",
"MUTUAL",
"ISTIO_MUTUAL"
],
"type": "string",
"nullable": true
},
"privateKey": {
"format": "string",
"type": "string",
"nullable": true
},
"sni": {
"format": "string",
"type": "string",
"nullable": true
},
"subjectAltNames": {
"items": {
"format": "string",
"type": "string"
},
"type": "array",
"nullable": true
}
},
"nullable": true
}
},
"nullable": true
},
"apex": {
"type": "object",
"properties": {
"labels": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"properties": {},
"nullable": true
},
"annotations": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"properties": {},
"nullable": true
}
},
"nullable": true
},
"primary": {
"type": "object",
"properties": {
"labels": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"properties": {},
"nullable": true
},
"annotations": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"properties": {},
"nullable": true
}
},
"nullable": true
},
"canary": {
"type": "object",
"properties": {
"labels": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"properties": {},
"nullable": true
},
"annotations": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"properties": {},
"nullable": true
}
},
"nullable": true
}
}
},
"skipAnalysis": {
"type": "boolean",
"nullable": true
},
"revertOnDeletion": {
"type": "boolean",
"nullable": true
},
"analysis": {
"type": "object",
"oneOf": [
{
"required": [
"interval",
"threshold",
"iterations"
]
},
{
"required": [
"interval",
"threshold",
"stepWeight"
]
},
{
"required": [
"interval",
"threshold",
"stepWeights"
]
}
],
"properties": {
"interval": {
"type": "string",
"pattern": "^[0-9]+(m|s)",
"nullable": true
},
"iterations": {
"type": "number",
"nullable": true
},
"threshold": {
"type": "number",
"nullable": true
},
"maxWeight": {
"type": "number",
"nullable": true
},
"stepWeight": {
"type": "number",
"nullable": true
},
"stepWeights": {
"type": "array",
"items": {
"type": "number"
},
"nullable": true
},
"stepWeightPromotion": {
"type": "number",
"nullable": true
},
"mirror": {
"type": "boolean",
"nullable": true
},
"mirrorWeight": {
"type": "number",
"nullable": true
},
"primaryReadyThreshold": {
"type": "number",
"nullable": true
},
"canaryReadyThreshold": {
"type": "number",
"nullable": true
},
"match": {
"type": "array",
"items": {
"type": "object",
"properties": {
"headers": {
"type": "object",
"additionalProperties": {
"oneOf": [
{
"required": [
"exact"
]
},
{
"required": [
"prefix"
]
},
{
"required": [
"suffix"
]
},
{
"required": [
"regex"
]
}
],
"type": "object",
"properties": {
"exact": {
"format": "string",
"type": "string",
"nullable": true
},
"prefix": {
"format": "string",
"type": "string",
"nullable": true
},
"suffix": {
"format": "string",
"type": "string",
"nullable": true
},
"regex": {
"format": "string",
"type": "string",
"nullable": true
}
}
},
"properties": {},
"nullable": true
},
"sourceLabels": {
"type": "object",
"additionalProperties": {
"format": "string",
"type": "string"
},
"properties": {},
"nullable": true
}
}
},
"nullable": true
},
"metrics": {
"type": "array",
"items": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"interval": {
"type": "string",
"pattern": "^[0-9]+(m|s)",
"nullable": true
},
"threshold": {
"type": "number",
"nullable": true
},
"thresholdRange": {
"type": "object",
"properties": {
"min": {
"type": "number",
"nullable": true
},
"max": {
"type": "number",
"nullable": true
}
},
"nullable": true
},
"query": {
"type": "string",
"nullable": true
},
"templateRef": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"namespace": {
"type": "string",
"nullable": true
}
},
"nullable": true
},
"templateVariables": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"properties": {},
"nullable": true
}
}
},
"nullable": true
},
"alerts": {
"type": "array",
"items": {
"type": "object",
"required": [
"providerRef",
"name"
],
"properties": {
"name": {
"type": "string"
},
"severity": {
"type": "string",
"enum": [
"",
"info",
"warn",
"error"
],
"nullable": true
},
"providerRef": {
"type": "object",
"required": [
"name"
],
"properties": {
"name": {
"type": "string"
},
"namespace": {
"type": "string",
"nullable": true
}
}
}
}
},
"nullable": true
},
"webhooks": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"url"
],
"properties": {
"name": {
"type": "string"
},
"type": {
"type": "string",
"enum": [
"",
"confirm-rollout",
"pre-rollout",
"rollout",
"confirm-promotion",
"post-rollout",
"event",
"rollback",
"confirm-traffic-increase"
],
"nullable": true
},
"muteAlert": {
"type": "boolean",
"nullable": true
},
"url": {
"type": "string",
"format": "url"
},
"timeout": {
"type": "string",
"pattern": "^[0-9]+(m|s)",
"nullable": true
},
"metadata": {
"type": "object",
"additionalProperties": {
"type": "string"
},
"properties": {},
"nullable": true
}
}
},
"nullable": true
},
"sessionAffinity": {
"type": "object",
"required": [
"cookieName"
],
"properties": {
"cookieName": {
"type": "string"
},
"maxAge": {
"default": 86400,
"type": "number",
"nullable": true
}
},
"nullable": true
}
}
}
},
"nullable": true
},
"status": {
"type": "object",
"properties": {
"phase": {
"type": "string",
"enum": [
"",
"Initializing",
"Initialized",
"Waiting",
"Progressing",
"WaitingPromotion",
"Promoting",
"Finalising",
"Succeeded",
"Failed",
"Terminating",
"Terminated"
],
"nullable": true
},
"failedChecks": {
"type": "number",
"nullable": true
},
"canaryWeight": {
"type": "number",
"nullable": true
},
"iterations": {
"type": "number",
"nullable": true
},
"trackedConfigs": {
"additionalProperties": {
"type": "string"
},
"type": "object",
"properties": {},
"nullable": true
},
"lastAppliedSpec": {
"type": "string",
"nullable": true
},
"lastPromotedSpec": {
"type": "string",
"nullable": true
},
"lastTransitionTime": {
"format": "date-time",
"type": "string",
"nullable": true
},
"sessionAffinityCookie": {
"type": "string",
"nullable": true
},
"previousSessionAffinityCookie": {
"type": "string",
"nullable": true
},
"conditions": {
"type": "array",
"items": {
"type": "object",
"required": [
"type",
"status",
"reason"
],
"properties": {
"lastTransitionTime": {
"format": "date-time",
"type": "string",
"nullable": true
},
"lastUpdateTime": {
"format": "date-time",
"type": "string",
"nullable": true
},
"message": {
"type": "string",
"nullable": true
},
"reason": {
"type": "string"
},
"status": {
"type": "string"
},
"type": {
"type": "string"
}
}
},
"nullable": true
}
},
"nullable": true
}
},
"required": [
"apiVersion",
"kind"
]
};
/**
* Canary is the Schema for the Canary API.
*/
export class Canary extends Model {
constructor(data) {
super({
apiVersion: Canary.apiVersion,
kind: Canary.kind,
...data
});
}
}
Canary.apiVersion = "flagger.app/v1beta1";
Canary.kind = "Canary";
Canary.is = createTypeMetaGuard(Canary);
setSchema(Canary, schemaId, () => {
addSchema();
register(schemaId, schema);
});