{
  "description": "VirtualServerRoute defines the VirtualServerRoute resource.",
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": "string"
    },
    "kind": {
      "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": "string"
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "description": "VirtualServerRouteSpec is the spec of the VirtualServerRoute resource.",
      "properties": {
        "host": {
          "type": "string"
        },
        "ingressClassName": {
          "type": "string"
        },
        "subroutes": {
          "items": {
            "description": "Route defines a route.",
            "properties": {
              "action": {
                "description": "Action defines an action.",
                "properties": {
                  "pass": {
                    "type": "string"
                  },
                  "proxy": {
                    "description": "ActionProxy defines a proxy in an Action.",
                    "properties": {
                      "requestHeaders": {
                        "description": "ProxyRequestHeaders defines the request headers manipulation in an ActionProxy.",
                        "properties": {
                          "pass": {
                            "type": "boolean"
                          },
                          "set": {
                            "items": {
                              "description": "Header defines an HTTP Header.",
                              "properties": {
                                "name": {
                                  "type": "string"
                                },
                                "value": {
                                  "type": "string"
                                }
                              },
                              "type": "object",
                              "additionalProperties": false
                            },
                            "type": "array"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "responseHeaders": {
                        "description": "ProxyResponseHeaders defines the response headers manipulation in an ActionProxy.",
                        "properties": {
                          "add": {
                            "items": {
                              "description": "AddHeader defines an HTTP Header with an optional Always field to use with the add_header NGINX directive.",
                              "properties": {
                                "always": {
                                  "type": "boolean"
                                },
                                "name": {
                                  "type": "string"
                                },
                                "value": {
                                  "type": "string"
                                }
                              },
                              "type": "object",
                              "additionalProperties": false
                            },
                            "type": "array"
                          },
                          "hide": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "ignore": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          },
                          "pass": {
                            "items": {
                              "type": "string"
                            },
                            "type": "array"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "rewritePath": {
                        "type": "string"
                      },
                      "upstream": {
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "redirect": {
                    "description": "ActionRedirect defines a redirect in an Action.",
                    "properties": {
                      "code": {
                        "type": "integer"
                      },
                      "url": {
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  },
                  "return": {
                    "description": "ActionReturn defines a return in an Action.",
                    "properties": {
                      "body": {
                        "type": "string"
                      },
                      "code": {
                        "type": "integer"
                      },
                      "headers": {
                        "items": {
                          "description": "Header defines an HTTP Header.",
                          "properties": {
                            "name": {
                              "type": "string"
                            },
                            "value": {
                              "type": "string"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "type": "array"
                      },
                      "type": {
                        "type": "string"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "dos": {
                "type": "string"
              },
              "errorPages": {
                "items": {
                  "description": "ErrorPage defines an ErrorPage in a Route.",
                  "properties": {
                    "codes": {
                      "items": {
                        "type": "integer"
                      },
                      "type": "array"
                    },
                    "redirect": {
                      "description": "ErrorPageRedirect defines a redirect for an ErrorPage.",
                      "properties": {
                        "code": {
                          "type": "integer"
                        },
                        "url": {
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "return": {
                      "description": "ErrorPageReturn defines a return for an ErrorPage.",
                      "properties": {
                        "body": {
                          "type": "string"
                        },
                        "code": {
                          "type": "integer"
                        },
                        "headers": {
                          "items": {
                            "description": "Header defines an HTTP Header.",
                            "properties": {
                              "name": {
                                "type": "string"
                              },
                              "value": {
                                "type": "string"
                              }
                            },
                            "type": "object",
                            "additionalProperties": false
                          },
                          "type": "array"
                        },
                        "type": {
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "type": "array"
              },
              "location-snippets": {
                "type": "string"
              },
              "matches": {
                "items": {
                  "description": "Match defines a match.",
                  "properties": {
                    "action": {
                      "description": "Action defines an action.",
                      "properties": {
                        "pass": {
                          "type": "string"
                        },
                        "proxy": {
                          "description": "ActionProxy defines a proxy in an Action.",
                          "properties": {
                            "requestHeaders": {
                              "description": "ProxyRequestHeaders defines the request headers manipulation in an ActionProxy.",
                              "properties": {
                                "pass": {
                                  "type": "boolean"
                                },
                                "set": {
                                  "items": {
                                    "description": "Header defines an HTTP Header.",
                                    "properties": {
                                      "name": {
                                        "type": "string"
                                      },
                                      "value": {
                                        "type": "string"
                                      }
                                    },
                                    "type": "object",
                                    "additionalProperties": false
                                  },
                                  "type": "array"
                                }
                              },
                              "type": "object",
                              "additionalProperties": false
                            },
                            "responseHeaders": {
                              "description": "ProxyResponseHeaders defines the response headers manipulation in an ActionProxy.",
                              "properties": {
                                "add": {
                                  "items": {
                                    "description": "AddHeader defines an HTTP Header with an optional Always field to use with the add_header NGINX directive.",
                                    "properties": {
                                      "always": {
                                        "type": "boolean"
                                      },
                                      "name": {
                                        "type": "string"
                                      },
                                      "value": {
                                        "type": "string"
                                      }
                                    },
                                    "type": "object",
                                    "additionalProperties": false
                                  },
                                  "type": "array"
                                },
                                "hide": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "ignore": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "pass": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                }
                              },
                              "type": "object",
                              "additionalProperties": false
                            },
                            "rewritePath": {
                              "type": "string"
                            },
                            "upstream": {
                              "type": "string"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "redirect": {
                          "description": "ActionRedirect defines a redirect in an Action.",
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "url": {
                              "type": "string"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "return": {
                          "description": "ActionReturn defines a return in an Action.",
                          "properties": {
                            "body": {
                              "type": "string"
                            },
                            "code": {
                              "type": "integer"
                            },
                            "headers": {
                              "items": {
                                "description": "Header defines an HTTP Header.",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "value": {
                                    "type": "string"
                                  }
                                },
                                "type": "object",
                                "additionalProperties": false
                              },
                              "type": "array"
                            },
                            "type": {
                              "type": "string"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "conditions": {
                      "items": {
                        "description": "Condition defines a condition in a MatchRule.",
                        "properties": {
                          "argument": {
                            "type": "string"
                          },
                          "cookie": {
                            "type": "string"
                          },
                          "header": {
                            "type": "string"
                          },
                          "value": {
                            "type": "string"
                          },
                          "variable": {
                            "type": "string"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array"
                    },
                    "splits": {
                      "items": {
                        "description": "Split defines a split.",
                        "properties": {
                          "action": {
                            "description": "Action defines an action.",
                            "properties": {
                              "pass": {
                                "type": "string"
                              },
                              "proxy": {
                                "description": "ActionProxy defines a proxy in an Action.",
                                "properties": {
                                  "requestHeaders": {
                                    "description": "ProxyRequestHeaders defines the request headers manipulation in an ActionProxy.",
                                    "properties": {
                                      "pass": {
                                        "type": "boolean"
                                      },
                                      "set": {
                                        "items": {
                                          "description": "Header defines an HTTP Header.",
                                          "properties": {
                                            "name": {
                                              "type": "string"
                                            },
                                            "value": {
                                              "type": "string"
                                            }
                                          },
                                          "type": "object",
                                          "additionalProperties": false
                                        },
                                        "type": "array"
                                      }
                                    },
                                    "type": "object",
                                    "additionalProperties": false
                                  },
                                  "responseHeaders": {
                                    "description": "ProxyResponseHeaders defines the response headers manipulation in an ActionProxy.",
                                    "properties": {
                                      "add": {
                                        "items": {
                                          "description": "AddHeader defines an HTTP Header with an optional Always field to use with the add_header NGINX directive.",
                                          "properties": {
                                            "always": {
                                              "type": "boolean"
                                            },
                                            "name": {
                                              "type": "string"
                                            },
                                            "value": {
                                              "type": "string"
                                            }
                                          },
                                          "type": "object",
                                          "additionalProperties": false
                                        },
                                        "type": "array"
                                      },
                                      "hide": {
                                        "items": {
                                          "type": "string"
                                        },
                                        "type": "array"
                                      },
                                      "ignore": {
                                        "items": {
                                          "type": "string"
                                        },
                                        "type": "array"
                                      },
                                      "pass": {
                                        "items": {
                                          "type": "string"
                                        },
                                        "type": "array"
                                      }
                                    },
                                    "type": "object",
                                    "additionalProperties": false
                                  },
                                  "rewritePath": {
                                    "type": "string"
                                  },
                                  "upstream": {
                                    "type": "string"
                                  }
                                },
                                "type": "object",
                                "additionalProperties": false
                              },
                              "redirect": {
                                "description": "ActionRedirect defines a redirect in an Action.",
                                "properties": {
                                  "code": {
                                    "type": "integer"
                                  },
                                  "url": {
                                    "type": "string"
                                  }
                                },
                                "type": "object",
                                "additionalProperties": false
                              },
                              "return": {
                                "description": "ActionReturn defines a return in an Action.",
                                "properties": {
                                  "body": {
                                    "type": "string"
                                  },
                                  "code": {
                                    "type": "integer"
                                  },
                                  "headers": {
                                    "items": {
                                      "description": "Header defines an HTTP Header.",
                                      "properties": {
                                        "name": {
                                          "type": "string"
                                        },
                                        "value": {
                                          "type": "string"
                                        }
                                      },
                                      "type": "object",
                                      "additionalProperties": false
                                    },
                                    "type": "array"
                                  },
                                  "type": {
                                    "type": "string"
                                  }
                                },
                                "type": "object",
                                "additionalProperties": false
                              }
                            },
                            "type": "object",
                            "additionalProperties": false
                          },
                          "weight": {
                            "type": "integer"
                          }
                        },
                        "type": "object",
                        "additionalProperties": false
                      },
                      "type": "array"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "type": "array"
              },
              "path": {
                "type": "string"
              },
              "policies": {
                "items": {
                  "description": "PolicyReference references a policy by name and an optional namespace.",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "namespace": {
                      "type": "string"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "type": "array"
              },
              "route": {
                "type": "string"
              },
              "splits": {
                "items": {
                  "description": "Split defines a split.",
                  "properties": {
                    "action": {
                      "description": "Action defines an action.",
                      "properties": {
                        "pass": {
                          "type": "string"
                        },
                        "proxy": {
                          "description": "ActionProxy defines a proxy in an Action.",
                          "properties": {
                            "requestHeaders": {
                              "description": "ProxyRequestHeaders defines the request headers manipulation in an ActionProxy.",
                              "properties": {
                                "pass": {
                                  "type": "boolean"
                                },
                                "set": {
                                  "items": {
                                    "description": "Header defines an HTTP Header.",
                                    "properties": {
                                      "name": {
                                        "type": "string"
                                      },
                                      "value": {
                                        "type": "string"
                                      }
                                    },
                                    "type": "object",
                                    "additionalProperties": false
                                  },
                                  "type": "array"
                                }
                              },
                              "type": "object",
                              "additionalProperties": false
                            },
                            "responseHeaders": {
                              "description": "ProxyResponseHeaders defines the response headers manipulation in an ActionProxy.",
                              "properties": {
                                "add": {
                                  "items": {
                                    "description": "AddHeader defines an HTTP Header with an optional Always field to use with the add_header NGINX directive.",
                                    "properties": {
                                      "always": {
                                        "type": "boolean"
                                      },
                                      "name": {
                                        "type": "string"
                                      },
                                      "value": {
                                        "type": "string"
                                      }
                                    },
                                    "type": "object",
                                    "additionalProperties": false
                                  },
                                  "type": "array"
                                },
                                "hide": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "ignore": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                },
                                "pass": {
                                  "items": {
                                    "type": "string"
                                  },
                                  "type": "array"
                                }
                              },
                              "type": "object",
                              "additionalProperties": false
                            },
                            "rewritePath": {
                              "type": "string"
                            },
                            "upstream": {
                              "type": "string"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "redirect": {
                          "description": "ActionRedirect defines a redirect in an Action.",
                          "properties": {
                            "code": {
                              "type": "integer"
                            },
                            "url": {
                              "type": "string"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        },
                        "return": {
                          "description": "ActionReturn defines a return in an Action.",
                          "properties": {
                            "body": {
                              "type": "string"
                            },
                            "code": {
                              "type": "integer"
                            },
                            "headers": {
                              "items": {
                                "description": "Header defines an HTTP Header.",
                                "properties": {
                                  "name": {
                                    "type": "string"
                                  },
                                  "value": {
                                    "type": "string"
                                  }
                                },
                                "type": "object",
                                "additionalProperties": false
                              },
                              "type": "array"
                            },
                            "type": {
                              "type": "string"
                            }
                          },
                          "type": "object",
                          "additionalProperties": false
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "weight": {
                      "type": "integer"
                    }
                  },
                  "type": "object",
                  "additionalProperties": false
                },
                "type": "array"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "upstreams": {
          "items": {
            "description": "Upstream defines an upstream.",
            "properties": {
              "backup": {
                "type": "string"
              },
              "backupPort": {
                "type": "integer"
              },
              "buffer-size": {
                "type": "string"
              },
              "buffering": {
                "type": "boolean"
              },
              "buffers": {
                "description": "UpstreamBuffers defines Buffer Configuration for an Upstream.",
                "properties": {
                  "number": {
                    "type": "integer"
                  },
                  "size": {
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "client-max-body-size": {
                "type": "string"
              },
              "connect-timeout": {
                "type": "string"
              },
              "fail-timeout": {
                "type": "string"
              },
              "healthCheck": {
                "description": "HealthCheck defines the parameters for active Upstream HealthChecks.",
                "properties": {
                  "connect-timeout": {
                    "type": "string"
                  },
                  "enable": {
                    "type": "boolean"
                  },
                  "fails": {
                    "type": "integer"
                  },
                  "grpcService": {
                    "type": "string"
                  },
                  "grpcStatus": {
                    "type": "integer"
                  },
                  "headers": {
                    "items": {
                      "description": "Header defines an HTTP Header.",
                      "properties": {
                        "name": {
                          "type": "string"
                        },
                        "value": {
                          "type": "string"
                        }
                      },
                      "type": "object",
                      "additionalProperties": false
                    },
                    "type": "array"
                  },
                  "interval": {
                    "type": "string"
                  },
                  "jitter": {
                    "type": "string"
                  },
                  "keepalive-time": {
                    "type": "string"
                  },
                  "mandatory": {
                    "type": "boolean"
                  },
                  "passes": {
                    "type": "integer"
                  },
                  "path": {
                    "type": "string"
                  },
                  "persistent": {
                    "type": "boolean"
                  },
                  "port": {
                    "type": "integer"
                  },
                  "read-timeout": {
                    "type": "string"
                  },
                  "send-timeout": {
                    "type": "string"
                  },
                  "statusMatch": {
                    "type": "string"
                  },
                  "tls": {
                    "description": "UpstreamTLS defines a TLS configuration for an Upstream.",
                    "properties": {
                      "enable": {
                        "type": "boolean"
                      }
                    },
                    "type": "object",
                    "additionalProperties": false
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "keepalive": {
                "type": "integer"
              },
              "lb-method": {
                "type": "string"
              },
              "max-conns": {
                "type": "integer"
              },
              "max-fails": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              },
              "next-upstream": {
                "type": "string"
              },
              "next-upstream-timeout": {
                "type": "string"
              },
              "next-upstream-tries": {
                "type": "integer"
              },
              "ntlm": {
                "type": "boolean"
              },
              "port": {
                "type": "integer"
              },
              "queue": {
                "description": "UpstreamQueue defines Queue Configuration for an Upstream.",
                "properties": {
                  "size": {
                    "type": "integer"
                  },
                  "timeout": {
                    "type": "string"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "read-timeout": {
                "type": "string"
              },
              "send-timeout": {
                "type": "string"
              },
              "service": {
                "type": "string"
              },
              "sessionCookie": {
                "description": "SessionCookie defines the parameters for session persistence.",
                "properties": {
                  "domain": {
                    "type": "string"
                  },
                  "enable": {
                    "type": "boolean"
                  },
                  "expires": {
                    "type": "string"
                  },
                  "httpOnly": {
                    "type": "boolean"
                  },
                  "name": {
                    "type": "string"
                  },
                  "path": {
                    "type": "string"
                  },
                  "samesite": {
                    "type": "string"
                  },
                  "secure": {
                    "type": "boolean"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "slow-start": {
                "type": "string"
              },
              "subselector": {
                "additionalProperties": {
                  "type": "string"
                },
                "type": "object"
              },
              "tls": {
                "description": "UpstreamTLS defines a TLS configuration for an Upstream.",
                "properties": {
                  "enable": {
                    "type": "boolean"
                  }
                },
                "type": "object",
                "additionalProperties": false
              },
              "type": {
                "type": "string"
              },
              "use-cluster-ip": {
                "type": "boolean"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        }
      },
      "type": "object",
      "additionalProperties": false
    },
    "status": {
      "description": "VirtualServerRouteStatus defines the status for the VirtualServerRoute resource.",
      "properties": {
        "externalEndpoints": {
          "items": {
            "description": "ExternalEndpoint defines the IP/ Hostname and ports used to connect to this resource.",
            "properties": {
              "hostname": {
                "type": "string"
              },
              "ip": {
                "type": "string"
              },
              "ports": {
                "type": "string"
              }
            },
            "type": "object",
            "additionalProperties": false
          },
          "type": "array"
        },
        "message": {
          "type": "string"
        },
        "reason": {
          "type": "string"
        },
        "referencedBy": {
          "type": "string"
        },
        "state": {
          "type": "string"
        }
      },
      "type": "object",
      "additionalProperties": false
    }
  },
  "type": "object"
}
