/* eslint-disable */
/**
 * This file was automatically generated by json-schema-to-typescript.
 * DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
 * and run json-schema-to-typescript to regenerate this file.
 */

export interface K8SVirtualServiceV1Beta1 {
  /**
   * Configuration affecting label/content routing, sni routing, etc. See more details at: https://istio.io/docs/reference/config/networking/virtual-service.html
   */
  spec?: {
    /**
     * A list of namespaces to which this virtual service is exported.
     */
    exportTo?: string[];
    /**
     * The names of gateways and sidecars that should apply these routes.
     */
    gateways?: string[];
    /**
     * The destination hosts to which traffic is being sent.
     */
    hosts?: string[];
    /**
     * An ordered list of route rules for HTTP traffic.
     */
    http?: {
      /**
       * Cross-Origin Resource Sharing policy (CORS).
       */
      corsPolicy?: {
        /**
         * Indicates whether the caller is allowed to send the actual request (not the preflight) using credentials.
         */
        allowCredentials?: boolean;
        /**
         * List of HTTP headers that can be used when requesting the resource.
         */
        allowHeaders?: string[];
        /**
         * List of HTTP methods allowed to access the resource.
         */
        allowMethods?: string[];
        allowOrigin?: string[];
        /**
         * String patterns that match allowed origins.
         */
        allowOrigins?: {
          [k: string]: unknown;
        }[];
        /**
         * A list of HTTP headers that the browsers are allowed to access.
         */
        exposeHeaders?: string[];
        /**
         * Specifies how long the results of a preflight request can be cached.
         */
        maxAge?: string;
        /**
         * Indicates whether preflight requests not matching the configured allowed origin shouldn't be forwarded to the upstream.
         *
         * Valid Options: FORWARD, IGNORE
         */
        unmatchedPreflights?: "UNSPECIFIED" | "FORWARD" | "IGNORE";
      };
      /**
       * Delegate is used to specify the particular VirtualService which can be used to define delegate HTTPRoute.
       */
      delegate?: {
        /**
         * Name specifies the name of the delegate VirtualService.
         */
        name?: string;
        /**
         * Namespace specifies the namespace where the delegate VirtualService resides.
         */
        namespace?: string;
      };
      /**
       * A HTTP rule can either return a direct_response, redirect or forward (default) traffic.
       */
      directResponse?: {
        /**
         * Specifies the content of the response body.
         */
        body?: {
          [k: string]: unknown;
        };
        /**
         * Specifies the HTTP response status to be returned.
         */
        status: number;
      };
      /**
       * Fault injection policy to apply on HTTP traffic at the client side.
       */
      fault?: {
        /**
         * Abort Http request attempts and return error codes back to downstream service, giving the impression that the upstream service is faulty.
         */
        abort?: {
          [k: string]: unknown;
        };
        /**
         * Delay requests before forwarding, emulating various failures such as network issues, overloaded upstream service, etc.
         */
        delay?: {
          [k: string]: unknown;
        };
      };
      headers?: {
        request?: {
          add?: {
            [k: string]: string;
          };
          remove?: string[];
          set?: {
            [k: string]: string;
          };
        };
        response?: {
          add?: {
            [k: string]: string;
          };
          remove?: string[];
          set?: {
            [k: string]: string;
          };
        };
      };
      /**
       * Match conditions to be satisfied for the rule to be activated.
       */
      match?: {
        /**
         * HTTP Authority values are case-sensitive and formatted as follows: - `exact: "value"` for exact string match - `prefix: "value"` for prefix-based match - `regex: "value"` for [RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).
         */
        authority?: {
          [k: string]: unknown;
        };
        /**
         * Names of gateways where the rule should be applied.
         */
        gateways?: string[];
        /**
         * The header keys must be lowercase and use hyphen as the separator, e.g.
         */
        headers?: {
          [k: string]: {
            [k: string]: unknown;
          };
        };
        /**
         * Flag to specify whether the URI matching should be case-insensitive.
         */
        ignoreUriCase?: boolean;
        /**
         * HTTP Method values are case-sensitive and formatted as follows: - `exact: "value"` for exact string match - `prefix: "value"` for prefix-based match - `regex: "value"` for [RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).
         */
        method?: {
          [k: string]: unknown;
        };
        /**
         * The name assigned to a match.
         */
        name?: string;
        /**
         * Specifies the ports on the host that is being addressed.
         */
        port?: number;
        /**
         * Query parameters for matching.
         */
        queryParams?: {
          [k: string]: {
            [k: string]: unknown;
          };
        };
        /**
         * URI Scheme values are case-sensitive and formatted as follows: - `exact: "value"` for exact string match - `prefix: "value"` for prefix-based match - `regex: "value"` for [RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).
         */
        scheme?: {
          [k: string]: unknown;
        };
        /**
         * One or more labels that constrain the applicability of a rule to source (client) workloads with the given labels.
         */
        sourceLabels?: {
          [k: string]: string;
        };
        /**
         * Source namespace constraining the applicability of a rule to workloads in that namespace.
         */
        sourceNamespace?: string;
        /**
         * The human readable prefix to use when emitting statistics for this route.
         */
        statPrefix?: string;
        /**
         * URI to match values are case-sensitive and formatted as follows: - `exact: "value"` for exact string match - `prefix: "value"` for prefix-based match - `regex: "value"` for [RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).
         */
        uri?: {
          [k: string]: unknown;
        };
        /**
         * withoutHeader has the same syntax with the header, but has opposite meaning.
         */
        withoutHeaders?: {
          [k: string]: {
            [k: string]: unknown;
          };
        };
      }[];
      /**
       * Mirror HTTP traffic to a another destination in addition to forwarding the requests to the intended destination.
       */
      mirror?: {
        /**
         * The name of a service from the service registry.
         */
        host: string;
        /**
         * Specifies the port on the host that is being addressed.
         */
        port?: {
          number?: number;
        };
        /**
         * The name of a subset within the service.
         */
        subset?: string;
      };
      mirrorPercent?: number;
      /**
       * Percentage of the traffic to be mirrored by the `mirror` field.
       */
      mirrorPercentage?: {
        value?: number;
      };
      mirror_percent?: number;
      /**
       * Specifies the destinations to mirror HTTP traffic in addition to the original destination.
       */
      mirrors?: {
        /**
         * Destination specifies the target of the mirror operation.
         */
        destination: {
          /**
           * The name of a service from the service registry.
           */
          host: string;
          /**
           * Specifies the port on the host that is being addressed.
           */
          port?: {
            number?: number;
          };
          /**
           * The name of a subset within the service.
           */
          subset?: string;
        };
        /**
         * Percentage of the traffic to be mirrored by the `destination` field.
         */
        percentage?: {
          value?: number;
        };
      }[];
      /**
       * The name assigned to the route for debugging purposes.
       */
      name?: string;
      /**
       * A HTTP rule can either return a direct_response, redirect or forward (default) traffic.
       */
      redirect?: {
        [k: string]: unknown;
      };
      /**
       * Retry policy for HTTP requests.
       */
      retries?: {
        /**
         * Number of retries to be allowed for a given request.
         */
        attempts?: number;
        /**
         * Timeout per attempt for a given request, including the initial call and any retries.
         */
        perTryTimeout?: string;
        /**
         * Specifies the conditions under which retry takes place.
         */
        retryOn?: string;
        /**
         * Flag to specify whether the retries should retry to other localities.
         */
        retryRemoteLocalities?: boolean;
      };
      /**
       * Rewrite HTTP URIs and Authority headers.
       */
      rewrite?: {
        /**
         * rewrite the Authority/Host header with this value.
         */
        authority?: string;
        /**
         * rewrite the path (or the prefix) portion of the URI with this value.
         */
        uri?: string;
        /**
         * rewrite the path portion of the URI with the specified regex.
         */
        uriRegexRewrite?: {
          /**
           * [RE2 style regex-based match](https://github.com/google/re2/wiki/Syntax).
           */
          match?: string;
          /**
           * The string that should replace into matching portions of original URI.
           */
          rewrite?: string;
        };
      };
      /**
       * A HTTP rule can either return a direct_response, redirect or forward (default) traffic.
       */
      route?: {
        /**
         * Destination uniquely identifies the instances of a service to which the request/connection should be forwarded to.
         */
        destination: {
          /**
           * The name of a service from the service registry.
           */
          host: string;
          /**
           * Specifies the port on the host that is being addressed.
           */
          port?: {
            number?: number;
          };
          /**
           * The name of a subset within the service.
           */
          subset?: string;
        };
        headers?: {
          request?: {
            add?: {
              [k: string]: string;
            };
            remove?: string[];
            set?: {
              [k: string]: string;
            };
          };
          response?: {
            add?: {
              [k: string]: string;
            };
            remove?: string[];
            set?: {
              [k: string]: string;
            };
          };
        };
        /**
         * Weight specifies the relative proportion of traffic to be forwarded to the destination.
         */
        weight?: number;
      }[];
      /**
       * Timeout for HTTP requests, default is disabled.
       */
      timeout?: string;
    }[];
    /**
     * An ordered list of route rules for opaque TCP traffic.
     */
    tcp?: {
      /**
       * Match conditions to be satisfied for the rule to be activated.
       */
      match?: {
        /**
         * IPv4 or IPv6 ip addresses of destination with optional subnet.
         */
        destinationSubnets?: string[];
        /**
         * Names of gateways where the rule should be applied.
         */
        gateways?: string[];
        /**
         * Specifies the port on the host that is being addressed.
         */
        port?: number;
        /**
         * One or more labels that constrain the applicability of a rule to workloads with the given labels.
         */
        sourceLabels?: {
          [k: string]: string;
        };
        /**
         * Source namespace constraining the applicability of a rule to workloads in that namespace.
         */
        sourceNamespace?: string;
        sourceSubnet?: string;
      }[];
      /**
       * The destination to which the connection should be forwarded to.
       */
      route?: {
        /**
         * Destination uniquely identifies the instances of a service to which the request/connection should be forwarded to.
         */
        destination: {
          /**
           * The name of a service from the service registry.
           */
          host: string;
          /**
           * Specifies the port on the host that is being addressed.
           */
          port?: {
            number?: number;
          };
          /**
           * The name of a subset within the service.
           */
          subset?: string;
        };
        /**
         * Weight specifies the relative proportion of traffic to be forwarded to the destination.
         */
        weight?: number;
      }[];
    }[];
    /**
     * An ordered list of route rule for non-terminated TLS & HTTPS traffic.
     */
    tls?: {
      /**
       * Match conditions to be satisfied for the rule to be activated.
       */
      match: {
        /**
         * IPv4 or IPv6 ip addresses of destination with optional subnet.
         */
        destinationSubnets?: string[];
        /**
         * Names of gateways where the rule should be applied.
         */
        gateways?: string[];
        /**
         * Specifies the port on the host that is being addressed.
         */
        port?: number;
        /**
         * SNI (server name indicator) to match on.
         */
        sniHosts: string[];
        /**
         * One or more labels that constrain the applicability of a rule to workloads with the given labels.
         */
        sourceLabels?: {
          [k: string]: string;
        };
        /**
         * Source namespace constraining the applicability of a rule to workloads in that namespace.
         */
        sourceNamespace?: string;
      }[];
      /**
       * The destination to which the connection should be forwarded to.
       */
      route?: {
        /**
         * Destination uniquely identifies the instances of a service to which the request/connection should be forwarded to.
         */
        destination: {
          /**
           * The name of a service from the service registry.
           */
          host: string;
          /**
           * Specifies the port on the host that is being addressed.
           */
          port?: {
            number?: number;
          };
          /**
           * The name of a subset within the service.
           */
          subset?: string;
        };
        /**
         * Weight specifies the relative proportion of traffic to be forwarded to the destination.
         */
        weight?: number;
      }[];
    }[];
  };
  status?: {
    /**
     * Current service state of the resource.
     */
    conditions?: {
      /**
       * Last time we probed the condition.
       */
      lastProbeTime?: string;
      /**
       * Last time the condition transitioned from one status to another.
       */
      lastTransitionTime?: string;
      /**
       * Human-readable message indicating details about last transition.
       */
      message?: string;
      /**
       * Unique, one-word, CamelCase reason for the condition's last transition.
       */
      reason?: string;
      /**
       * Status is the status of the condition.
       */
      status?: string;
      /**
       * Type is the type of the condition.
       */
      type?: string;
    }[];
    /**
     * Resource Generation to which the Reconciled Condition refers.
     */
    observedGeneration?: number | string;
    /**
     * Includes any errors or warnings detected by Istio's analyzers.
     */
    validationMessages?: {
      /**
       * A url pointing to the Istio documentation for this specific error type.
       */
      documentationUrl?: string;
      /**
       * Represents how severe a message is.
       *
       * Valid Options: UNKNOWN, ERROR, WARNING, INFO
       */
      level?: "UNKNOWN" | "ERROR" | "WARNING" | "INFO";
      type?: {
        /**
         * A 7 character code matching `^IST[0-9]{4}$` intended to uniquely identify the message type.
         */
        code?: string;
        /**
         * A human-readable name for the message type.
         */
        name?: string;
      };
    }[];
  };
}
