UNPKG

@soft-stech/flagger

Version:
1,777 lines 88.9 kB
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Canary = void 0;
const IoK8sApimachineryPkgApisMetaV1ObjectMeta_1 = require("@soft-stech/apimachinery/_schemas/IoK8sApimachineryPkgApisMetaV1ObjectMeta");
const base_1 = require("@soft-stech/base");
const validate_1 = require("@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.
 */
class Canary extends base_1.Model {
    constructor(data) {
        super({
            apiVersion: Canary.apiVersion,
            kind: Canary.kind,
            ...data
        });
    }
}
exports.Canary = Canary;
Canary.apiVersion = "flagger.app/v1beta1";
Canary.kind = "Canary";
Canary.is = (0, base_1.createTypeMetaGuard)(Canary);
(0, base_1.setSchema)(Canary, schemaId, () => {
    (0, IoK8sApimachineryPkgApisMetaV1ObjectMeta_1.addSchema)();
    (0, validate_1.register)(schemaId, schema);
});