diff --git a/cmd/kubebuilder_marker_generator/main.go b/cmd/kubebuilder_marker_generator/main.go index 5385012b..8fd91278 100644 --- a/cmd/kubebuilder_marker_generator/main.go +++ b/cmd/kubebuilder_marker_generator/main.go @@ -2,6 +2,7 @@ package main import ( _ "embed" + "fmt" "go/token" "log" "os" @@ -11,6 +12,10 @@ import ( "github.com/sirkon/dst/decorator" ) +const ( + kubebuilderValidationMarker = "// +kubebuilder:validation:" +) + func main() { // tool to add `json:",inline"` for embedded structs @@ -40,20 +45,42 @@ func generate(fileName string) error { //nolint:gocognit,unparam if structType, ok := typeSpec.Type.(*dst.StructType); ok { for _, field := range structType.Fields.List { comments := field.Decorations().Start.All() + // Remove // +kubebuilder:validation + comments = cleanup(comments, kubebuilderValidationMarker) + field.Decorations().Start.Replace(comments...) + // Then do the job for _, comment := range comments { if strings.HasPrefix(comment, "// Enum: [") { field.Decorations().Before = dst.NewLine - newComment := `// +kubebuilder:validation:Enum=` + newComment := kubebuilderValidationMarker + `Enum=` comment = strings.TrimPrefix(comment, "// Enum: [") comment = strings.TrimSuffix(comment, "]") + // We must keep empty strings: + // For example in Globals HttpclientSslVerify: // Enum: [ none required] + // from swagger: enum: ["", "none", "required"] for _, enum := range strings.Split(comment, " ") { - enum = strings.TrimSpace(enum) + if enum == "" { + newComment += `""` + } newComment += enum newComment += ";" } field.Decorations().Start.Append(newComment) - log.Printf("Adding comment for: %s: %+v %s\n", fileName, field.Type, newComment) + log.Printf("Adding comment for: %s: %s %s\n", fileName, field.Names[0].Name, newComment) + } + if strings.HasPrefix(comment, "// Pattern: ") { + addSimpleMarker(field, fileName, comment, "Pattern", "string") + } + if strings.HasPrefix(comment, "// Maximum: ") { + addSimpleMarker(field, fileName, comment, "Maximum", "raw") } + if strings.HasPrefix(comment, "// Minimum: ") { + addSimpleMarker(field, fileName, comment, "Minimum", "raw") + } + if strings.HasPrefix(comment, "// Format: ") { + addSimpleMarker(field, fileName, comment, "Format", "raw") + } + } // if len(field.Names) > 0 { // log.Printf("Comments before the field %s: %v\n", field.Names[0].Name, comments) @@ -79,3 +106,44 @@ func generate(fileName string) error { //nolint:gocognit,unparam return nil } + +// addSimpleMarker adds a simple kubebuilder marker to the given field. +// +// Parameters: +// - field: the field to add the marker to. +// - fileName: the name of the file. +// - markerValue: the marker value. +// - validationType: the type of validation (for example, "Pattern", "Maximum", "Minimum"). +// - validationContentType: the content type of the validation: +// "string" to add “ around the comment +// "raw" to add the comment as is +func addSimpleMarker(field *dst.Field, fileName, markerValue, validationType, validationContentType string) { + field.Decorations().Before = dst.NewLine + markerValue = strings.TrimPrefix(markerValue, "// "+validationType+": ") + var marker string + switch validationContentType { + case "string": + marker = fmt.Sprintf("%s%s=`%v`", kubebuilderValidationMarker, validationType, markerValue) + case "raw": + marker = fmt.Sprintf("%s%s=%v", kubebuilderValidationMarker, validationType, markerValue) + default: + log.Printf("Unknown validation content type: %s", validationContentType) + } + field.Decorations().Start.Append(marker) + log.Printf("Adding comment for: %s: %+v %s\n", fileName, field.Names[0].Name, marker) +} + +// cleanup removes all strings from a slice of strings that have a specific prefix. +// +// comments is the slice of strings containing the comments to clean up. +// prefixToRemove is the prefix of the comments to remove. +// It returns a new slice of strings without the comments that have the specified prefix. +func cleanup(comments []string, prefixToRemove string) []string { + var res []string + for _, comment := range comments { + if !strings.HasPrefix(comment, prefixToRemove) { + res = append(res, comment) + } + } + return res +} diff --git a/models/acl.go b/models/acl.go index db79f36c..3a3d0953 100644 --- a/models/acl.go +++ b/models/acl.go @@ -37,15 +37,16 @@ import ( // // swagger:model acl type ACL struct { - // acl name // Required: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` ACLName string `json:"acl_name"` // criterion // Required: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Criterion string `json:"criterion"` // index diff --git a/models/aws_region.go b/models/aws_region.go index 6b794f4d..8ce5817f 100644 --- a/models/aws_region.go +++ b/models/aws_region.go @@ -58,6 +58,7 @@ type AwsRegion struct { // Auto generated ID. // Read Only: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` ID *string `json:"id,omitempty"` // Select which IPv4 address the Service Discovery has to use for the backend server entry @@ -77,6 +78,7 @@ type AwsRegion struct { // Duration in seconds in-between data pulling requests to the AWS region // Required: true // Minimum: 1 + // +kubebuilder:validation:Minimum=1 RetryTimeout *int64 `json:"retry_timeout"` // AWS Secret Access Key. diff --git a/models/backend.go b/models/backend.go index ecd7fd5b..d96d3a74 100644 --- a/models/backend.go +++ b/models/backend.go @@ -70,6 +70,7 @@ type Backend struct { // bind process // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` BindProcess string `json:"bind_process,omitempty"` // check timeout @@ -100,6 +101,7 @@ type Backend struct { // dynamic cookie key // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` DynamicCookieKey string `json:"dynamic_cookie_key,omitempty"` // email alert @@ -121,10 +123,12 @@ type Backend struct { // external check command // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` ExternalCheckCommand string `json:"external_check_command,omitempty"` // external check path // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` ExternalCheckPath string `json:"external_check_path,omitempty"` // force persist @@ -135,6 +139,7 @@ type Backend struct { // from // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` From string `json:"from,omitempty"` // fullconn @@ -174,6 +179,7 @@ type Backend struct { // http use htx // Pattern: ^[^\s]+$ // Enum: [enabled disabled] + // +kubebuilder:validation:Pattern=`^[^\s]+$` // +kubebuilder:validation:Enum=enabled;disabled; HTTPUseHtx string `json:"http-use-htx,omitempty"` @@ -242,6 +248,7 @@ type Backend struct { // log tag // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` LogTag string `json:"log_tag,omitempty"` // max keep alive queue @@ -258,6 +265,7 @@ type Backend struct { // name // Required: true // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` Name string `json:"name"` // nolinger diff --git a/models/backend_switching_rule.go b/models/backend_switching_rule.go index bdecd369..2169194f 100644 --- a/models/backend_switching_rule.go +++ b/models/backend_switching_rule.go @@ -52,6 +52,7 @@ type BackendSwitchingRule struct { // name // Required: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Name string `json:"name"` } diff --git a/models/balance.go b/models/balance.go index 2662362c..7d8cff24 100644 --- a/models/balance.go +++ b/models/balance.go @@ -54,6 +54,7 @@ type Balance struct { // rdp cookie name // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` RdpCookieName string `json:"rdp_cookie_name,omitempty"` // uri depth @@ -70,6 +71,7 @@ type Balance struct { // url param // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` URLParam string `json:"url_param,omitempty"` // url param check post diff --git a/models/bind.go b/models/bind.go index 7754ab61..9753b37f 100644 --- a/models/bind.go +++ b/models/bind.go @@ -40,18 +40,23 @@ type Bind struct { // address // Example: 127.0.0.1 // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Address string `json:"address,omitempty"` // port // Example: 80 // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 Port *int64 `json:"port,omitempty"` // port range end // Example: 81 // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 PortRangeEnd *int64 `json:"port-range-end,omitempty"` } diff --git a/models/bind_params.go b/models/bind_params.go index 6c394bc8..98601c68 100644 --- a/models/bind_params.go +++ b/models/bind_params.go @@ -46,6 +46,7 @@ type BindParams struct { // alpn // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Alpn string `json:"alpn,omitempty"` // backlog @@ -141,6 +142,7 @@ type BindParams struct { // name // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Name string `json:"name,omitempty"` // namespace @@ -186,6 +188,7 @@ type BindParams struct { // process // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Process string `json:"process,omitempty"` // proto @@ -218,10 +221,12 @@ type BindParams struct { // ssl cafile // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` SslCafile string `json:"ssl_cafile,omitempty"` // ssl certificate // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` SslCertificate string `json:"ssl_certificate,omitempty"` // ssl max ver diff --git a/models/cache.go b/models/cache.go index 86dacb94..cb246ab3 100644 --- a/models/cache.go +++ b/models/cache.go @@ -48,6 +48,7 @@ type Cache struct { // name // Required: true // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` Name *string `json:"name"` // process vary @@ -56,6 +57,8 @@ type Cache struct { // total max size // Maximum: 4095 // Minimum: 1 + // +kubebuilder:validation:Maximum=4095 + // +kubebuilder:validation:Minimum=1 TotalMaxSize int64 `json:"total_max_size,omitempty"` } diff --git a/models/cluster_settings.go b/models/cluster_settings.go index ba076517..42e8eee3 100644 --- a/models/cluster_settings.go +++ b/models/cluster_settings.go @@ -256,6 +256,7 @@ type ClusterSettingsCluster struct { // address // Read Only: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Address string `json:"address,omitempty"` // api base path @@ -277,6 +278,8 @@ type ClusterSettingsCluster struct { // Read Only: true // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 Port *int64 `json:"port,omitempty"` } @@ -489,6 +492,8 @@ type ClusterLogTarget struct { // Required: true // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 Port *int64 `json:"port"` // protocol diff --git a/models/config_stick_table.go b/models/config_stick_table.go index fb7af97c..d6c20b84 100644 --- a/models/config_stick_table.go +++ b/models/config_stick_table.go @@ -46,6 +46,7 @@ type ConfigStickTable struct { // peers // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Peers string `json:"peers,omitempty"` // size @@ -58,6 +59,7 @@ type ConfigStickTable struct { // store // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Store string `json:"store,omitempty"` // type @@ -67,6 +69,7 @@ type ConfigStickTable struct { // write to // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` WriteTo *string `json:"write_to,omitempty"` } diff --git a/models/consul.go b/models/consul.go index cfd00a01..bae4d097 100644 --- a/models/consul.go +++ b/models/consul.go @@ -38,10 +38,10 @@ import ( // // swagger:model consul type Consul struct { - // address // Required: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Address *string `json:"address"` // Name of the defaults section to be used in backends created by this service @@ -69,6 +69,7 @@ type Consul struct { // Auto generated ID. // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` ID *string `json:"id,omitempty"` // mode @@ -86,11 +87,14 @@ type Consul struct { // Required: true // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 Port *int64 `json:"port"` // Duration in seconds in-between data pulling requests to the consul server // Required: true // Minimum: 1 + // +kubebuilder:validation:Minimum=1 RetryTimeout *int64 `json:"retry_timeout"` // server slots base @@ -121,6 +125,7 @@ type Consul struct { // token // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Token string `json:"token,omitempty"` } diff --git a/models/cookie.go b/models/cookie.go index eb59ea3c..2ca1c2c8 100644 --- a/models/cookie.go +++ b/models/cookie.go @@ -60,6 +60,7 @@ type Cookie struct { // name // Required: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Name *string `json:"name"` // nocache @@ -296,9 +297,9 @@ func (m *Cookie) UnmarshalBinary(b []byte) error { // // swagger:model Attr type Attr struct { - // value // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Value string `json:"value,omitempty"` } @@ -355,9 +356,9 @@ func (m *Attr) UnmarshalBinary(b []byte) error { // // swagger:model Domain type Domain struct { - // value // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Value string `json:"value,omitempty"` } diff --git a/models/defaults.go b/models/defaults.go index c97edfc1..1a11303c 100644 --- a/models/defaults.go +++ b/models/defaults.go @@ -77,6 +77,7 @@ type Defaults struct { // bind process // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` BindProcess string `json:"bind_process,omitempty"` // check timeout @@ -126,6 +127,7 @@ type Defaults struct { // default backend // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` DefaultBackend string `json:"default_backend,omitempty"` // default server @@ -151,6 +153,7 @@ type Defaults struct { // dynamic cookie key // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` DynamicCookieKey string `json:"dynamic_cookie_key,omitempty"` // email alert @@ -175,10 +178,12 @@ type Defaults struct { // external check command // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` ExternalCheckCommand string `json:"external_check_command,omitempty"` // external check path // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` ExternalCheckPath string `json:"external_check_path,omitempty"` // forwardfor @@ -186,6 +191,7 @@ type Defaults struct { // from // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` From string `json:"from,omitempty"` // fullconn @@ -305,6 +311,7 @@ type Defaults struct { // log tag // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` LogTag string `json:"log_tag,omitempty"` // logasap @@ -331,6 +338,7 @@ type Defaults struct { // name // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` Name string `json:"name,omitempty"` // nolinger diff --git a/models/dgram_bind.go b/models/dgram_bind.go index 73dabd6a..5e1583d1 100644 --- a/models/dgram_bind.go +++ b/models/dgram_bind.go @@ -35,9 +35,9 @@ import ( // // swagger:model dgram_bind type DgramBind struct { - // address // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Address string `json:"address,omitempty"` // interface @@ -45,6 +45,7 @@ type DgramBind struct { // name // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Name string `json:"name,omitempty"` // namespace @@ -53,11 +54,15 @@ type DgramBind struct { // port // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 Port *int64 `json:"port,omitempty"` // port range end // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 PortRangeEnd *int64 `json:"port-range-end,omitempty"` // transparent diff --git a/models/email_alert.go b/models/email_alert.go index 49f96010..58ba8a22 100644 --- a/models/email_alert.go +++ b/models/email_alert.go @@ -36,10 +36,10 @@ import ( // // swagger:model email_alert type EmailAlert struct { - // from // Required: true // Pattern: ^\S+@\S+$ + // +kubebuilder:validation:Pattern=`^\S+@\S+$` From *string `json:"from"` // level @@ -57,6 +57,7 @@ type EmailAlert struct { // to // Required: true // Pattern: ^\S+@\S+$ + // +kubebuilder:validation:Pattern=`^\S+@\S+$` To *string `json:"to"` } diff --git a/models/fcgi_app.go b/models/fcgi_app.go index f6dca0b0..5c7a296a 100644 --- a/models/fcgi_app.go +++ b/models/fcgi_app.go @@ -60,6 +60,7 @@ type FCGIApp struct { // Defines the maximum number of concurrent requests this application can accept. If the FastCGI application retrieves the variable FCGI_MAX_REQS during connection establishment, it can override this option. Furthermore, if the application does not do multiplexing, it will ignore this option. // Minimum: 1 + // +kubebuilder:validation:Minimum=1 MaxReqs int64 `json:"max_reqs,omitempty"` // Enables or disables the support of connection multiplexing. If the FastCGI application retrieves the variable FCGI_MPXS_CONNS during connection establishment, it can override this option. @@ -70,6 +71,7 @@ type FCGIApp struct { // Declares a FastCGI application // Required: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Name string `json:"name"` // pass headers diff --git a/models/filter.go b/models/filter.go index 86957a45..e675c457 100644 --- a/models/filter.go +++ b/models/filter.go @@ -37,17 +37,19 @@ import ( // // swagger:model filter type Filter struct { - // Name of the fcgi-app section this filter will use. // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` AppName string `json:"app_name,omitempty"` // Filter name that will be used by 'set-bandwidth-limit' actions to reference a specific bandwidth limitation filter // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` BandwidthLimitName string `json:"bandwidth_limit_name,omitempty"` // cache name // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` CacheName string `json:"cache_name,omitempty"` // The max number of bytes that can be forwarded over the period. @@ -81,10 +83,12 @@ type Filter struct { // spoe config // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` SpoeConfig string `json:"spoe_config,omitempty"` // spoe engine // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` SpoeEngine string `json:"spoe_engine,omitempty"` // An optional table to be used instead of the default one, which is the stick-table declared in the current proxy. @@ -96,6 +100,7 @@ type Filter struct { // trace name // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TraceName string `json:"trace_name,omitempty"` // trace rnd forwarding diff --git a/models/forwardfor.go b/models/forwardfor.go index 62cee007..fa25c05d 100644 --- a/models/forwardfor.go +++ b/models/forwardfor.go @@ -42,10 +42,12 @@ type Forwardfor struct { // except // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Except string `json:"except,omitempty"` // header // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Header string `json:"header,omitempty"` // ifnone diff --git a/models/frontend.go b/models/frontend.go index ad73f96c..b04f3a64 100644 --- a/models/frontend.go +++ b/models/frontend.go @@ -55,6 +55,7 @@ type Frontend struct { // bind process // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` BindProcess string `json:"bind_process,omitempty"` // clflog @@ -90,6 +91,7 @@ type Frontend struct { // default backend // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` DefaultBackend string `json:"default_backend,omitempty"` // description @@ -133,6 +135,7 @@ type Frontend struct { // from // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` From string `json:"from,omitempty"` // h1 case adjust bogus client @@ -215,6 +218,7 @@ type Frontend struct { // log tag // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` LogTag string `json:"log_tag,omitempty"` // logasap @@ -239,6 +243,7 @@ type Frontend struct { // name // Required: true // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` Name string `json:"name"` // nolinger diff --git a/models/global.go b/models/global.go index d1b40a36..6efced04 100644 --- a/models/global.go +++ b/models/global.go @@ -68,6 +68,8 @@ type Global struct { // anonkey // Maximum: 4.294967295e+09 // Minimum: 0 + // +kubebuilder:validation:Maximum=4.294967295e+09 + // +kubebuilder:validation:Minimum=0 Anonkey *int64 `json:"anonkey,omitempty"` // busy polling @@ -78,6 +80,7 @@ type Global struct { // chroot // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Chroot string `json:"chroot,omitempty"` // close spread time @@ -120,6 +123,7 @@ type Global struct { // group // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Group string `json:"group,omitempty"` // h1 case adjust file @@ -152,7 +156,7 @@ type Global struct { // httpclient ssl verify // Enum: [ none required] - // +kubebuilder:validation:Enum=;none;required; + // +kubebuilder:validation:Enum="";none;required; HttpclientSslVerify *string `json:"httpclient_ssl_verify,omitempty"` // httpclient timeout connect @@ -177,6 +181,7 @@ type Global struct { // localpeer // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Localpeer string `json:"localpeer,omitempty"` // log send hostname @@ -226,6 +231,7 @@ type Global struct { // mworker max reloads // Minimum: 0 + // +kubebuilder:validation:Minimum=0 MworkerMaxReloads *int64 `json:"mworker_max_reloads,omitempty"` // nbproc @@ -288,10 +294,12 @@ type Global struct { // server state base // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` ServerStateBase string `json:"server_state_base,omitempty"` // server state file // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` ServerStateFile string `json:"server_state_file,omitempty"` // set dumpable @@ -299,6 +307,7 @@ type Global struct { // setcap // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Setcap string `json:"setcap,omitempty"` // spread checks @@ -397,6 +406,7 @@ type Global struct { // user // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` User string `json:"user,omitempty"` // wurfl options @@ -1944,9 +1954,9 @@ func (m *CPUMap) UnmarshalBinary(b []byte) error { // // swagger:model GlobalDefaultPath type GlobalDefaultPath struct { - // path // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Path string `json:"path,omitempty"` // type @@ -2235,6 +2245,7 @@ type GlobalLogSendHostname struct { // param // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Param string `json:"param,omitempty"` } @@ -2338,10 +2349,10 @@ func (m *GlobalLogSendHostname) UnmarshalBinary(b []byte) error { // // swagger:model LuaLoad type LuaLoad struct { - // file // Required: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` File *string `json:"file"` } @@ -2399,10 +2410,10 @@ func (m *LuaLoad) UnmarshalBinary(b []byte) error { // // swagger:model LuaPrependPath type LuaPrependPath struct { - // path // Required: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Path *string `json:"path"` // type @@ -2589,6 +2600,7 @@ type RuntimeAPI struct { // address // Required: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Address *string `json:"address"` } @@ -3063,6 +3075,7 @@ type GlobalTuneOptions struct { // buffers reserve // Minimum: 2 + // +kubebuilder:validation:Minimum=2 BuffersReserve int64 `json:"buffers_reserve,omitempty"` // bufsize @@ -3077,6 +3090,8 @@ type GlobalTuneOptions struct { // events max events at once // Maximum: 10000 // Minimum: 1 + // +kubebuilder:validation:Maximum=10000 + // +kubebuilder:validation:Minimum=1 EventsMaxEventsAtOnce int64 `json:"events_max_events_at_once,omitempty"` // fail alloc @@ -3111,6 +3126,7 @@ type GlobalTuneOptions struct { // h2 header table size // Maximum: 65535 + // +kubebuilder:validation:Maximum=65535 H2HeaderTableSize int64 `json:"h2_header_table_size,omitempty"` // h2 initial window size @@ -3136,6 +3152,8 @@ type GlobalTuneOptions struct { // http maxhdr // Maximum: 32767 // Minimum: 1 + // +kubebuilder:validation:Maximum=32767 + // +kubebuilder:validation:Minimum=1 HTTPMaxhdr int64 `json:"http_maxhdr,omitempty"` // idle pool shared @@ -3146,6 +3164,8 @@ type GlobalTuneOptions struct { // idletimer // Maximum: 65535 // Minimum: 0 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=0 Idletimer *int64 `json:"idletimer,omitempty"` // listener default shards @@ -3329,11 +3349,15 @@ type GlobalTuneOptions struct { // zlib memlevel // Maximum: 9 // Minimum: 1 + // +kubebuilder:validation:Maximum=9 + // +kubebuilder:validation:Minimum=1 ZlibMemlevel int64 `json:"zlib_memlevel,omitempty"` // zlib windowsize // Maximum: 15 // Minimum: 8 + // +kubebuilder:validation:Maximum=15 + // +kubebuilder:validation:Minimum=8 ZlibWindowsize int64 `json:"zlib_windowsize,omitempty"` } diff --git a/models/group.go b/models/group.go index b8308da8..c1c95b9a 100644 --- a/models/group.go +++ b/models/group.go @@ -35,10 +35,10 @@ import ( // // swagger:model group type Group struct { - // name // Required: true // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` Name string `json:"name"` // users diff --git a/models/http_after_response_rule.go b/models/http_after_response_rule.go index 0f67f8de..51321c49 100644 --- a/models/http_after_response_rule.go +++ b/models/http_after_response_rule.go @@ -37,13 +37,14 @@ import ( // // swagger:model http_after_response_rule type HTTPAfterResponseRule struct { - // acl file // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` ACLFile string `json:"acl_file,omitempty"` // acl keyfmt // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` ACLKeyfmt string `json:"acl_keyfmt,omitempty"` // cond @@ -77,14 +78,17 @@ type HTTPAfterResponseRule struct { // map file // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` MapFile string `json:"map_file,omitempty"` // map keyfmt // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` MapKeyfmt string `json:"map_keyfmt,omitempty"` // map valuefmt // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` MapValuefmt string `json:"map_valuefmt,omitempty"` // sc expr @@ -102,6 +106,8 @@ type HTTPAfterResponseRule struct { // status // Maximum: 999 // Minimum: 100 + // +kubebuilder:validation:Maximum=999 + // +kubebuilder:validation:Minimum=100 Status int64 `json:"status,omitempty"` // status reason @@ -123,10 +129,12 @@ type HTTPAfterResponseRule struct { // var name // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` VarName string `json:"var_name,omitempty"` // var scope // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` VarScope string `json:"var_scope,omitempty"` } diff --git a/models/http_check.go b/models/http_check.go index 0dabeea8..2d240f5d 100644 --- a/models/http_check.go +++ b/models/http_check.go @@ -41,10 +41,12 @@ type HTTPCheck struct { // addr // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Addr string `json:"addr,omitempty"` // alpn // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Alpn string `json:"alpn,omitempty"` // body @@ -77,6 +79,7 @@ type HTTPCheck struct { // match // Pattern: ^[^\s]+$ // Enum: [status rstatus hdr fhdr string rstring] + // +kubebuilder:validation:Pattern=`^[^\s]+$` // +kubebuilder:validation:Enum=status;rstatus;hdr;fhdr;string;rstring; Match string `json:"match,omitempty"` @@ -105,6 +108,8 @@ type HTTPCheck struct { // port // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 Port *int64 `json:"port,omitempty"` // port string @@ -150,10 +155,12 @@ type HTTPCheck struct { // var name // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` VarName string `json:"var_name,omitempty"` // var scope // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` VarScope string `json:"var_scope,omitempty"` // version diff --git a/models/http_errors_section.go b/models/http_errors_section.go index 323e538a..5f049055 100644 --- a/models/http_errors_section.go +++ b/models/http_errors_section.go @@ -45,6 +45,7 @@ type HTTPErrorsSection struct { // name // Required: true // Pattern: ^[A-Za-z0-9-_]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_]+$` Name string `json:"name"` } diff --git a/models/http_request_rule.go b/models/http_request_rule.go index 80d92d68..57d55688 100644 --- a/models/http_request_rule.go +++ b/models/http_request_rule.go @@ -44,14 +44,17 @@ type HTTPRequestRule struct { // acl file // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` ACLFile string `json:"acl_file,omitempty"` // acl keyfmt // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` ACLKeyfmt string `json:"acl_keyfmt,omitempty"` // auth realm // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` AuthRealm string `json:"auth_realm,omitempty"` // bandwidth limit limit @@ -65,6 +68,7 @@ type HTTPRequestRule struct { // cache name // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` CacheName string `json:"cache_name,omitempty"` // capture id @@ -75,6 +79,7 @@ type HTTPRequestRule struct { // capture sample // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` CaptureSample string `json:"capture_sample,omitempty"` // cond @@ -88,6 +93,8 @@ type HTTPRequestRule struct { // deny status // Maximum: 599 // Minimum: 200 + // +kubebuilder:validation:Maximum=599 + // +kubebuilder:validation:Minimum=200 DenyStatus *int64 `json:"deny_status,omitempty"` // expr @@ -107,10 +114,12 @@ type HTTPRequestRule struct { // hint format // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` HintFormat string `json:"hint_format,omitempty"` // hint name // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` HintName string `json:"hint_name,omitempty"` // index @@ -124,6 +133,7 @@ type HTTPRequestRule struct { // lua action // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` LuaAction string `json:"lua_action,omitempty"` // lua params @@ -131,27 +141,34 @@ type HTTPRequestRule struct { // map file // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` MapFile string `json:"map_file,omitempty"` // map keyfmt // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` MapKeyfmt string `json:"map_keyfmt,omitempty"` // map valuefmt // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` MapValuefmt string `json:"map_valuefmt,omitempty"` // mark value // Pattern: ^(0x[0-9A-Fa-f]+|[0-9]+)$ + // +kubebuilder:validation:Pattern=`^(0x[0-9A-Fa-f]+|[0-9]+)$` MarkValue string `json:"mark_value,omitempty"` // method fmt // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` MethodFmt string `json:"method_fmt,omitempty"` // nice value // Maximum: 1024 // Minimum: -1024 + // +kubebuilder:validation:Maximum=1024 + // +kubebuilder:validation:Minimum=-1024 NiceValue int64 `json:"nice_value,omitempty"` // normalizer @@ -167,10 +184,12 @@ type HTTPRequestRule struct { // path fmt // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` PathFmt string `json:"path_fmt,omitempty"` // path match // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` PathMatch string `json:"path_match,omitempty"` // protocol @@ -196,6 +215,7 @@ type HTTPRequestRule struct { // redir value // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` RedirValue string `json:"redir_value,omitempty"` // resolvers @@ -215,6 +235,8 @@ type HTTPRequestRule struct { // return status code // Maximum: 599 // Minimum: 200 + // +kubebuilder:validation:Maximum=599 + // +kubebuilder:validation:Minimum=200 ReturnStatusCode *int64 `json:"return_status_code,omitempty"` // sc expr @@ -234,10 +256,12 @@ type HTTPRequestRule struct { // spoe engine // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` SpoeEngine string `json:"spoe_engine,omitempty"` // spoe group // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` SpoeGroup string `json:"spoe_group,omitempty"` // strict mode @@ -255,34 +279,42 @@ type HTTPRequestRule struct { // tos value // Pattern: ^(0x[0-9A-Fa-f]+|[0-9]+)$ + // +kubebuilder:validation:Pattern=`^(0x[0-9A-Fa-f]+|[0-9]+)$` TosValue string `json:"tos_value,omitempty"` // track sc0 key // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TrackSc0Key string `json:"track-sc0-key,omitempty"` // track sc0 table // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TrackSc0Table string `json:"track-sc0-table,omitempty"` // track sc1 key // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TrackSc1Key string `json:"track-sc1-key,omitempty"` // track sc1 table // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TrackSc1Table string `json:"track-sc1-table,omitempty"` // track sc2 key // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TrackSc2Key string `json:"track-sc2-key,omitempty"` // track sc2 table // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TrackSc2Table string `json:"track-sc2-table,omitempty"` // track sc key // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TrackScKey string `json:"track_sc_key,omitempty"` // track sc stick counter @@ -290,6 +322,7 @@ type HTTPRequestRule struct { // track sc table // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TrackScTable string `json:"track_sc_table,omitempty"` // type @@ -312,10 +345,12 @@ type HTTPRequestRule struct { // var name // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` VarName string `json:"var_name,omitempty"` // var scope // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` VarScope string `json:"var_scope,omitempty"` // wait at least diff --git a/models/http_response_rule.go b/models/http_response_rule.go index c4d56ef8..736fd02f 100644 --- a/models/http_response_rule.go +++ b/models/http_response_rule.go @@ -44,10 +44,12 @@ type HTTPResponseRule struct { // acl file // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` ACLFile string `json:"acl_file,omitempty"` // acl keyfmt // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` ACLKeyfmt string `json:"acl_keyfmt,omitempty"` // bandwidth limit limit @@ -61,6 +63,7 @@ type HTTPResponseRule struct { // cache name // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` CacheName string `json:"cache_name,omitempty"` // capture id @@ -68,6 +71,7 @@ type HTTPResponseRule struct { // capture sample // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` CaptureSample string `json:"capture_sample,omitempty"` // cond @@ -81,6 +85,8 @@ type HTTPResponseRule struct { // deny status // Maximum: 599 // Minimum: 200 + // +kubebuilder:validation:Maximum=599 + // +kubebuilder:validation:Minimum=200 DenyStatus *int64 `json:"deny_status,omitempty"` // hdr format @@ -106,6 +112,7 @@ type HTTPResponseRule struct { // lua action // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` LuaAction string `json:"lua_action,omitempty"` // lua params @@ -113,23 +120,29 @@ type HTTPResponseRule struct { // map file // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` MapFile string `json:"map_file,omitempty"` // map keyfmt // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` MapKeyfmt string `json:"map_keyfmt,omitempty"` // map valuefmt // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` MapValuefmt string `json:"map_valuefmt,omitempty"` // mark value // Pattern: ^(0x[0-9A-Fa-f]+|[0-9]+)$ + // +kubebuilder:validation:Pattern=`^(0x[0-9A-Fa-f]+|[0-9]+)$` MarkValue string `json:"mark_value,omitempty"` // nice value // Maximum: 1024 // Minimum: -1024 + // +kubebuilder:validation:Maximum=1024 + // +kubebuilder:validation:Minimum=-1024 NiceValue int64 `json:"nice_value,omitempty"` // redir code @@ -147,6 +160,7 @@ type HTTPResponseRule struct { // redir value // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` RedirValue string `json:"redir_value,omitempty"` // return content @@ -163,6 +177,8 @@ type HTTPResponseRule struct { // return status code // Maximum: 599 // Minimum: 200 + // +kubebuilder:validation:Maximum=599 + // +kubebuilder:validation:Minimum=200 ReturnStatusCode *int64 `json:"return_status_code,omitempty"` // sc expr @@ -179,15 +195,19 @@ type HTTPResponseRule struct { // spoe engine // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` SpoeEngine string `json:"spoe_engine,omitempty"` // spoe group // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` SpoeGroup string `json:"spoe_group,omitempty"` // status // Maximum: 999 // Minimum: 100 + // +kubebuilder:validation:Maximum=999 + // +kubebuilder:validation:Minimum=100 Status int64 `json:"status,omitempty"` // status reason @@ -208,34 +228,42 @@ type HTTPResponseRule struct { // tos value // Pattern: ^(0x[0-9A-Fa-f]+|[0-9]+)$ + // +kubebuilder:validation:Pattern=`^(0x[0-9A-Fa-f]+|[0-9]+)$` TosValue string `json:"tos_value,omitempty"` // track sc0 key // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TrackSc0Key string `json:"track-sc0-key,omitempty"` // track sc0 table // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TrackSc0Table string `json:"track-sc0-table,omitempty"` // track sc1 key // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TrackSc1Key string `json:"track-sc1-key,omitempty"` // track sc1 table // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TrackSc1Table string `json:"track-sc1-table,omitempty"` // track sc2 key // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TrackSc2Key string `json:"track-sc2-key,omitempty"` // track sc2 table // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TrackSc2Table string `json:"track-sc2-table,omitempty"` // track sc key // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TrackScKey string `json:"track_sc_key,omitempty"` // track sc stick counter @@ -243,6 +271,7 @@ type HTTPResponseRule struct { // track sc table // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TrackScTable string `json:"track_sc_table,omitempty"` // type @@ -259,10 +288,12 @@ type HTTPResponseRule struct { // var name // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` VarName string `json:"var_name,omitempty"` // var scope // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` VarScope string `json:"var_scope,omitempty"` // wait at least diff --git a/models/httpchk_params.go b/models/httpchk_params.go index f580126e..c4a9ea5e 100644 --- a/models/httpchk_params.go +++ b/models/httpchk_params.go @@ -41,6 +41,7 @@ type HttpchkParams struct { // uri // Pattern: ^[^ ]*$ + // +kubebuilder:validation:Pattern=`^[^ ]*$` URI string `json:"uri,omitempty"` // version diff --git a/models/info.go b/models/info.go index 5baf9565..f1caaaea 100644 --- a/models/info.go +++ b/models/info.go @@ -172,9 +172,9 @@ func (m *Info) UnmarshalBinary(b []byte) error { // // swagger:model InfoAPI type InfoAPI struct { - // HAProxy Dataplane API build date // Format: date-time + // +kubebuilder:validation:Format=date-time BuildDate strfmt.DateTime `json:"build_date,omitempty"` // HAProxy Dataplane API version string diff --git a/models/log_forward.go b/models/log_forward.go index 81e3d172..79eb033d 100644 --- a/models/log_forward.go +++ b/models/log_forward.go @@ -45,6 +45,7 @@ type LogForward struct { // name // Required: true // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` Name string `json:"name"` // timeout client diff --git a/models/log_target.go b/models/log_target.go index dc6eeb2b..2b8ed1b6 100644 --- a/models/log_target.go +++ b/models/log_target.go @@ -36,9 +36,9 @@ import ( // // swagger:model log_target type LogTarget struct { - // address // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Address string `json:"address,omitempty"` // facility diff --git a/models/mailer_entry.go b/models/mailer_entry.go index 4aae1706..66d1ca17 100644 --- a/models/mailer_entry.go +++ b/models/mailer_entry.go @@ -35,21 +35,24 @@ import ( // // swagger:model mailer_entry type MailerEntry struct { - // address // Required: true // Pattern: ^\S+$ + // +kubebuilder:validation:Pattern=`^\S+$` Address string `json:"address"` // name // Required: true // Pattern: ^[A-Za-z0-9-_]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_]+$` Name string `json:"name"` // port // Required: true // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 Port int64 `json:"port"` } diff --git a/models/mailers_section.go b/models/mailers_section.go index fa36c8a9..c92f030e 100644 --- a/models/mailers_section.go +++ b/models/mailers_section.go @@ -35,14 +35,15 @@ import ( // // swagger:model mailers_section type MailersSection struct { - // name // Required: true // Pattern: ^[A-Za-z0-9-_]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_]+$` Name string `json:"name"` // timeout // Minimum: 0 + // +kubebuilder:validation:Minimum=0 Timeout *int64 `json:"timeout,omitempty"` } diff --git a/models/nameserver.go b/models/nameserver.go index cfb73f53..ac24b291 100644 --- a/models/nameserver.go +++ b/models/nameserver.go @@ -36,20 +36,23 @@ import ( // // swagger:model nameserver type Nameserver struct { - // address // Required: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Address *string `json:"address"` // name // Required: true // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` Name string `json:"name"` // port // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 Port *int64 `json:"port,omitempty"` } diff --git a/models/originalto.go b/models/originalto.go index a46c4909..5b7f9cb1 100644 --- a/models/originalto.go +++ b/models/originalto.go @@ -42,10 +42,12 @@ type Originalto struct { // except // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Except string `json:"except,omitempty"` // header // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Header string `json:"header,omitempty"` } diff --git a/models/peer_entry.go b/models/peer_entry.go index 47ec5493..3634f2b5 100644 --- a/models/peer_entry.go +++ b/models/peer_entry.go @@ -35,21 +35,24 @@ import ( // // swagger:model peer_entry type PeerEntry struct { - // address // Required: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Address *string `json:"address"` // name // Required: true // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` Name string `json:"name"` // port // Required: true // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 Port *int64 `json:"port"` // shard diff --git a/models/peer_section.go b/models/peer_section.go index 1e70a3f6..015e3f27 100644 --- a/models/peer_section.go +++ b/models/peer_section.go @@ -51,6 +51,7 @@ type PeerSection struct { // name // Required: true // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` Name string `json:"name"` // In some configurations, one would like to distribute the stick-table contents diff --git a/models/persist_rule.go b/models/persist_rule.go index 627d6059..b4133f68 100644 --- a/models/persist_rule.go +++ b/models/persist_rule.go @@ -34,9 +34,9 @@ import ( // // swagger:model persist_rule type PersistRule struct { - // rdp cookie name // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` RdpCookieName string `json:"rdp_cookie_name,omitempty"` // type diff --git a/models/process_info_item.go b/models/process_info_item.go index d7140b86..4cf45bea 100644 --- a/models/process_info_item.go +++ b/models/process_info_item.go @@ -153,6 +153,7 @@ type ProcessInfoItem struct { // HAProxy version release date // Format: date + // +kubebuilder:validation:Format=date ReleaseDate strfmt.Date `json:"release_date,omitempty"` // run queue diff --git a/models/program.go b/models/program.go index 7ea578d5..31359076 100644 --- a/models/program.go +++ b/models/program.go @@ -48,6 +48,7 @@ type Program struct { // name // Required: true // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` Name string `json:"name"` // HAProxy stops and recreates child programs at reload. diff --git a/models/reload.go b/models/reload.go index 54ffee14..eeab876b 100644 --- a/models/reload.go +++ b/models/reload.go @@ -37,9 +37,9 @@ import ( // // swagger:model reload type Reload struct { - // id // Pattern: ^\d{4}-\d{2}-\d{2}-\d+$ + // +kubebuilder:validation:Pattern=`^\d{4}-\d{2}-\d{2}-\d+$` ID string `json:"id,omitempty"` // reload timestamp diff --git a/models/resolver.go b/models/resolver.go index c750c1cf..b75a2cc7 100644 --- a/models/resolver.go +++ b/models/resolver.go @@ -35,10 +35,11 @@ import ( // // swagger:model resolver type Resolver struct { - // accepted payload size // Maximum: 8192 // Minimum: 512 + // +kubebuilder:validation:Maximum=8192 + // +kubebuilder:validation:Minimum=512 AcceptedPayloadSize int64 `json:"accepted_payload_size,omitempty"` // hold nx @@ -62,6 +63,7 @@ type Resolver struct { // name // Required: true // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` Name string `json:"name"` // parse resolv conf @@ -69,6 +71,7 @@ type Resolver struct { // resolve retries // Minimum: 1 + // +kubebuilder:validation:Minimum=1 ResolveRetries int64 `json:"resolve_retries,omitempty"` // timeout resolve diff --git a/models/ring.go b/models/ring.go index 53d98085..1710fa7b 100644 --- a/models/ring.go +++ b/models/ring.go @@ -51,6 +51,7 @@ type Ring struct { // name // Required: true // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` Name string `json:"name"` // size diff --git a/models/runtime_add_server.go b/models/runtime_add_server.go index 62ad3c79..794e84e8 100644 --- a/models/runtime_add_server.go +++ b/models/runtime_add_server.go @@ -37,14 +37,15 @@ import ( // // swagger:model runtime_add_server type RuntimeAddServer struct { - // address // Read Only: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Address string `json:"address,omitempty"` // agent addr // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` AgentAddr string `json:"agent-addr,omitempty"` // agent check @@ -58,6 +59,8 @@ type RuntimeAddServer struct { // agent port // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 AgentPort *int64 `json:"agent-port,omitempty"` // agent send @@ -68,6 +71,7 @@ type RuntimeAddServer struct { // alpn // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Alpn string `json:"alpn,omitempty"` // backup @@ -87,6 +91,7 @@ type RuntimeAddServer struct { // check sni // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` CheckSni string `json:"check-sni,omitempty"` // check ssl @@ -96,10 +101,12 @@ type RuntimeAddServer struct { // check alpn // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` CheckAlpn string `json:"check_alpn,omitempty"` // check proto // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` CheckProto string `json:"check_proto,omitempty"` // check via socks4 @@ -155,11 +162,14 @@ type RuntimeAddServer struct { // health check address // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` HealthCheckAddress string `json:"health_check_address,omitempty"` // health check port // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 HealthCheckPort *int64 `json:"health_check_port,omitempty"` // id @@ -248,10 +258,13 @@ type RuntimeAddServer struct { // Read Only: true // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 Port *int64 `json:"port,omitempty"` // proto // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Proto string `json:"proto,omitempty"` // proxy v2 options @@ -285,6 +298,7 @@ type RuntimeAddServer struct { // sni // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Sni string `json:"sni,omitempty"` // source @@ -297,10 +311,12 @@ type RuntimeAddServer struct { // ssl cafile // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` SslCafile string `json:"ssl_cafile,omitempty"` // ssl certificate // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` SslCertificate string `json:"ssl_certificate,omitempty"` // ssl max ver diff --git a/models/runtime_server.go b/models/runtime_server.go index e4b64a93..847bdd69 100644 --- a/models/runtime_server.go +++ b/models/runtime_server.go @@ -37,10 +37,10 @@ import ( // // swagger:model runtime_server type RuntimeServer struct { - // address // Read Only: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Address string `json:"address,omitempty"` // admin state @@ -65,6 +65,8 @@ type RuntimeServer struct { // Read Only: true // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 Port *int64 `json:"port,omitempty"` } diff --git a/models/server.go b/models/server.go index 9bafd5d2..970a470e 100644 --- a/models/server.go +++ b/models/server.go @@ -41,6 +41,7 @@ type Server struct { // address // Required: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Address string `json:"address"` // id @@ -49,11 +50,14 @@ type Server struct { // name // Required: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Name string `json:"name"` // port // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 Port *int64 `json:"port,omitempty"` } diff --git a/models/server_params.go b/models/server_params.go index 1c8302d2..de32d29c 100644 --- a/models/server_params.go +++ b/models/server_params.go @@ -35,9 +35,9 @@ import ( // // swagger:model server_params type ServerParams struct { - // agent addr // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` AgentAddr string `json:"agent-addr,omitempty"` // agent check @@ -51,6 +51,8 @@ type ServerParams struct { // agent port // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 AgentPort *int64 `json:"agent-port,omitempty"` // agent send @@ -61,6 +63,7 @@ type ServerParams struct { // alpn // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Alpn string `json:"alpn,omitempty"` // backup @@ -80,6 +83,7 @@ type ServerParams struct { // check sni // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` CheckSni string `json:"check-sni,omitempty"` // check ssl @@ -89,10 +93,12 @@ type ServerParams struct { // check alpn // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` CheckAlpn string `json:"check_alpn,omitempty"` // check proto // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` CheckProto string `json:"check_proto,omitempty"` // check via socks4 @@ -111,6 +117,7 @@ type ServerParams struct { // cookie // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Cookie string `json:"cookie,omitempty"` // crl file @@ -158,15 +165,19 @@ type ServerParams struct { // health check address // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` HealthCheckAddress string `json:"health_check_address,omitempty"` // health check port // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 HealthCheckPort *int64 `json:"health_check_port,omitempty"` // init addr // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` InitAddr *string `json:"init-addr,omitempty"` // inter @@ -264,6 +275,7 @@ type ServerParams struct { // proto // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Proto string `json:"proto,omitempty"` // proxy v2 options @@ -274,6 +286,7 @@ type ServerParams struct { // resolve net // Pattern: ^([A-Za-z0-9.:/]+)(,[A-Za-z0-9.:/]+)*$ + // +kubebuilder:validation:Pattern=`^([A-Za-z0-9.:/]+)(,[A-Za-z0-9.:/]+)*$` ResolveNet string `json:"resolve-net,omitempty"` // resolve prefer @@ -283,10 +296,12 @@ type ServerParams struct { // resolve opts // Pattern: ^(allow-dup-ip|ignore-weight|prevent-dup-ip)(,(allow-dup-ip|ignore-weight|prevent-dup-ip))*$ + // +kubebuilder:validation:Pattern=`^(allow-dup-ip|ignore-weight|prevent-dup-ip)(,(allow-dup-ip|ignore-weight|prevent-dup-ip))*$` ResolveOpts string `json:"resolve_opts,omitempty"` // resolvers // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Resolvers string `json:"resolvers,omitempty"` // rise @@ -326,10 +341,12 @@ type ServerParams struct { // sni // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Sni string `json:"sni,omitempty"` // socks4 // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Socks4 string `json:"socks4,omitempty"` // source @@ -342,10 +359,12 @@ type ServerParams struct { // ssl cafile // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` SslCafile string `json:"ssl_cafile,omitempty"` // ssl certificate // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` SslCertificate string `json:"ssl_certificate,omitempty"` // ssl max ver diff --git a/models/server_switching_rule.go b/models/server_switching_rule.go index f4c92951..5739c387 100644 --- a/models/server_switching_rule.go +++ b/models/server_switching_rule.go @@ -52,6 +52,7 @@ type ServerSwitchingRule struct { // target server // Required: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` TargetServer string `json:"target_server"` } diff --git a/models/server_template.go b/models/server_template.go index 9302be58..51775a51 100644 --- a/models/server_template.go +++ b/models/server_template.go @@ -52,11 +52,14 @@ type ServerTemplate struct { // port // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 Port *int64 `json:"port,omitempty"` // prefix // Required: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Prefix string `json:"prefix"` } diff --git a/models/site.go b/models/site.go index f2b307d1..6b6ec57c 100644 --- a/models/site.go +++ b/models/site.go @@ -49,6 +49,7 @@ type Site struct { // name // Required: true // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` Name string `json:"name"` // service @@ -234,6 +235,7 @@ type SiteFarm struct { // name // Required: true // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` Name string `json:"name"` // servers diff --git a/models/source.go b/models/source.go index 47c09f1b..0b9c3845 100644 --- a/models/source.go +++ b/models/source.go @@ -54,11 +54,15 @@ type Source struct { // port // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 Port int64 `json:"port,omitempty"` // port second // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 PortSecond int64 `json:"port_second,omitempty"` // usesrc diff --git a/models/spoe_agent.go b/models/spoe_agent.go index 7e9b40c6..66eb9bfb 100644 --- a/models/spoe_agent.go +++ b/models/spoe_agent.go @@ -92,18 +92,22 @@ type SpoeAgent struct { // option set on error // Pattern: ^[A-Za-z0-9-_.]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.]+$` OptionSetOnError string `json:"option_set-on-error,omitempty"` // option set process time // Pattern: ^[A-Za-z0-9-_.]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.]+$` OptionSetProcessTime string `json:"option_set-process-time,omitempty"` // option set total time // Pattern: ^[A-Za-z0-9-_.]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.]+$` OptionSetTotalTime string `json:"option_set-total-time,omitempty"` // option var prefix // Pattern: ^[A-Za-z0-9-_.]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.]+$` OptionVarPrefix string `json:"option_var-prefix,omitempty"` // pipelining diff --git a/models/spoe_transaction.go b/models/spoe_transaction.go index 7d65b105..7f9296bb 100644 --- a/models/spoe_transaction.go +++ b/models/spoe_transaction.go @@ -43,6 +43,7 @@ type SpoeTransaction struct { // id // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` ID string `json:"id,omitempty"` // status diff --git a/models/ssl_cert_entry.go b/models/ssl_cert_entry.go index 29132cea..4de707fa 100644 --- a/models/ssl_cert_entry.go +++ b/models/ssl_cert_entry.go @@ -50,10 +50,12 @@ type SslCertEntry struct { // not after // Format: date + // +kubebuilder:validation:Format=date NotAfter strfmt.Date `json:"not_after,omitempty"` // not before // Format: date + // +kubebuilder:validation:Format=date NotBefore strfmt.Date `json:"not_before,omitempty"` // serial diff --git a/models/ssl_certificate.go b/models/ssl_certificate.go index 6ba5097d..4b768c9d 100644 --- a/models/ssl_certificate.go +++ b/models/ssl_certificate.go @@ -63,11 +63,13 @@ type SslCertificate struct { // not after // Read Only: true // Format: date-time + // +kubebuilder:validation:Format=date-time NotAfter *strfmt.DateTime `json:"not_after,omitempty" gorm:"type:timestamp with time zone"` // not before // Read Only: true // Format: date-time + // +kubebuilder:validation:Format=date-time NotBefore *strfmt.DateTime `json:"not_before,omitempty" gorm:"type:timestamp with time zone"` // serial diff --git a/models/stats_options.go b/models/stats_options.go index c15f2c99..b79572b3 100644 --- a/models/stats_options.go +++ b/models/stats_options.go @@ -61,6 +61,7 @@ type StatsOptions struct { // stats maxconn // Minimum: 1 + // +kubebuilder:validation:Minimum=1 StatsMaxconn int64 `json:"stats_maxconn,omitempty"` // stats realm @@ -83,10 +84,12 @@ type StatsOptions struct { // stats show node name // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` StatsShowNodeName *string `json:"stats_show_node_name"` // stats uri prefix // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` StatsURIPrefix string `json:"stats_uri_prefix,omitempty"` } diff --git a/models/stick_rule.go b/models/stick_rule.go index da362ab0..acb212e6 100644 --- a/models/stick_rule.go +++ b/models/stick_rule.go @@ -52,10 +52,12 @@ type StickRule struct { // pattern // Required: true // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Pattern string `json:"pattern"` // table // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Table string `json:"table,omitempty"` // type diff --git a/models/table.go b/models/table.go index c9ca8b84..063ad497 100644 --- a/models/table.go +++ b/models/table.go @@ -34,9 +34,9 @@ import ( // // swagger:model table type Table struct { - // expire // Pattern: ^\d+(ms|s|m|h|d)?$ + // +kubebuilder:validation:Pattern=`^\d+(ms|s|m|h|d)?$` Expire *string `json:"expire,omitempty"` // name @@ -47,6 +47,7 @@ type Table struct { // size // Pattern: ^\d+(k|K|m|M|g|G)?$ + // +kubebuilder:validation:Pattern=`^\d+(k|K|m|M|g|G)?$` Size string `json:"size,omitempty"` // store diff --git a/models/tcp_check.go b/models/tcp_check.go index af4c2db4..e1555aee 100644 --- a/models/tcp_check.go +++ b/models/tcp_check.go @@ -42,10 +42,12 @@ type TCPCheck struct { // addr // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Addr string `json:"addr,omitempty"` // alpn // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` Alpn string `json:"alpn,omitempty"` // check comment @@ -87,6 +89,7 @@ type TCPCheck struct { // match // Pattern: ^[^\s]+$ // Enum: [string rstring string-lf binary rbinary binary-lf] + // +kubebuilder:validation:Pattern=`^[^\s]+$` // +kubebuilder:validation:Enum=string;rstring;string-lf;binary;rbinary;binary-lf; Match string `json:"match,omitempty"` @@ -110,6 +113,8 @@ type TCPCheck struct { // port // Maximum: 65535 // Minimum: 1 + // +kubebuilder:validation:Maximum=65535 + // +kubebuilder:validation:Minimum=1 Port *int64 `json:"port,omitempty"` // port string @@ -143,10 +148,12 @@ type TCPCheck struct { // var name // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` VarName string `json:"var_name,omitempty"` // var scope // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` VarScope string `json:"var_scope,omitempty"` // via socks4 diff --git a/models/tcp_request_rule.go b/models/tcp_request_rule.go index 3c48399c..d0f6db77 100644 --- a/models/tcp_request_rule.go +++ b/models/tcp_request_rule.go @@ -56,6 +56,7 @@ type TCPRequestRule struct { // capture sample // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` CaptureSample string `json:"capture_sample,omitempty"` // cond @@ -83,6 +84,7 @@ type TCPRequestRule struct { // lua action // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` LuaAction string `json:"lua_action,omitempty"` // lua params @@ -90,11 +92,14 @@ type TCPRequestRule struct { // mark value // Pattern: ^(0x[0-9A-Fa-f]+|[0-9]+)$ + // +kubebuilder:validation:Pattern=`^(0x[0-9A-Fa-f]+|[0-9]+)$` MarkValue string `json:"mark_value,omitempty"` // nice value // Maximum: 1024 // Minimum: -1024 + // +kubebuilder:validation:Maximum=1024 + // +kubebuilder:validation:Minimum=-1024 NiceValue int64 `json:"nice_value,omitempty"` // priority type @@ -142,6 +147,7 @@ type TCPRequestRule struct { // tos value // Pattern: ^(0x[0-9A-Fa-f]+|[0-9]+)$ + // +kubebuilder:validation:Pattern=`^(0x[0-9A-Fa-f]+|[0-9]+)$` TosValue string `json:"tos_value,omitempty"` // track key @@ -164,10 +170,12 @@ type TCPRequestRule struct { // var name // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` VarName string `json:"var_name,omitempty"` // var scope // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` VarScope string `json:"var_scope,omitempty"` } diff --git a/models/tcp_response_rule.go b/models/tcp_response_rule.go index dd3e6f38..8aabd64a 100644 --- a/models/tcp_response_rule.go +++ b/models/tcp_response_rule.go @@ -73,6 +73,7 @@ type TCPResponseRule struct { // lua action // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` LuaAction string `json:"lua_action,omitempty"` // lua params @@ -80,11 +81,14 @@ type TCPResponseRule struct { // mark value // Pattern: ^(0x[0-9A-Fa-f]+|[0-9]+)$ + // +kubebuilder:validation:Pattern=`^(0x[0-9A-Fa-f]+|[0-9]+)$` MarkValue string `json:"mark_value,omitempty"` // nice value // Maximum: 1024 // Minimum: -1024 + // +kubebuilder:validation:Maximum=1024 + // +kubebuilder:validation:Minimum=-1024 NiceValue int64 `json:"nice_value,omitempty"` // sc expr @@ -101,10 +105,12 @@ type TCPResponseRule struct { // spoe engine // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` SpoeEngine string `json:"spoe_engine,omitempty"` // spoe group // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` SpoeGroup string `json:"spoe_group,omitempty"` // timeout @@ -112,6 +118,7 @@ type TCPResponseRule struct { // tos value // Pattern: ^(0x[0-9A-Fa-f]+|[0-9]+)$ + // +kubebuilder:validation:Pattern=`^(0x[0-9A-Fa-f]+|[0-9]+)$` TosValue string `json:"tos_value,omitempty"` // type @@ -122,10 +129,12 @@ type TCPResponseRule struct { // var name // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` VarName string `json:"var_name,omitempty"` // var scope // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` VarScope string `json:"var_scope,omitempty"` } diff --git a/models/transaction.go b/models/transaction.go index 812240d6..5fee5841 100644 --- a/models/transaction.go +++ b/models/transaction.go @@ -43,6 +43,7 @@ type Transaction struct { // id // Pattern: ^[^\s]+$ + // +kubebuilder:validation:Pattern=`^[^\s]+$` ID string `json:"id,omitempty"` // status diff --git a/models/user.go b/models/user.go index 09ec14fe..57af411d 100644 --- a/models/user.go +++ b/models/user.go @@ -50,6 +50,7 @@ type User struct { // username // Required: true // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` Username string `json:"username"` } diff --git a/models/userlist.go b/models/userlist.go index d5088304..8a1d28d5 100644 --- a/models/userlist.go +++ b/models/userlist.go @@ -35,10 +35,10 @@ import ( // // swagger:model userlist type Userlist struct { - // name // Required: true // Pattern: ^[A-Za-z0-9-_.:]+$ + // +kubebuilder:validation:Pattern=`^[A-Za-z0-9-_.:]+$` Name string `json:"name"` }