diff --git a/pkg/tools/gen/genkcl_jsonschema.go b/pkg/tools/gen/genkcl_jsonschema.go index 0da475c4..bf9052b2 100644 --- a/pkg/tools/gen/genkcl_jsonschema.go +++ b/pkg/tools/gen/genkcl_jsonschema.go @@ -67,7 +67,6 @@ func (k *kclGenerator) genSchemaFromJsonSchema(w io.Writer, filename string, src if err = js.UnmarshalJSON(code); err != nil { return err } - // convert json schema to kcl schema ctx := convertContext{ rootSchema: js, @@ -78,13 +77,11 @@ func (k *kclGenerator) genSchemaFromJsonSchema(w io.Writer, filename string, src }, pathObjects: []*jsonschema.Schema{}, } + kclSch := kclFile{} result := convertSchemaFromJsonSchema(&ctx, js, strings.TrimSuffix(filepath.Base(filename), filepath.Ext(filename))) - if !result.IsSchema { - panic("result is not schema") - } - kclSch := kclFile{ - Schemas: []schema{result.schema}, + if result.IsSchema { + kclSch.Schemas = append(kclSch.Schemas, result.schema) } for _, imp := range getSortedKeys(ctx.imports) { kclSch.Imports = append(kclSch.Imports, kImport{PkgPath: imp}) @@ -94,8 +91,7 @@ func (k *kclGenerator) genSchemaFromJsonSchema(w io.Writer, filename string, src kclSch.Schemas = append(kclSch.Schemas, ctx.resultMap[key].schema) } } - - // generate kcl schema code + // Generate kcl schema code return k.genKcl(w, kclSch) } @@ -106,13 +102,11 @@ func convertSchemaFromJsonSchema(ctx *convertContext, s *jsonschema.Schema, name return convertResult{IsSchema: false} } - // for the name of the result, we prefer $id, then title, then name in parameter - // if none of them exists, "MyType" as default + // For the name of the result, we prefer $id, then name in the function parameter. + // if none of them exists, "AnonymousType" as default if id, ok := s.Keywords["$id"].(*jsonschema.ID); ok { lastSlashIndex := strings.LastIndex(string(*id), "/") name = strings.Replace(string(*id)[lastSlashIndex+1:], ".json", "", -1) - } else if title, ok := s.Keywords["title"].(*jsonschema.Title); ok { - name = string(*title) } if name == "" { name = "AnonymousType" @@ -130,6 +124,8 @@ func convertSchemaFromJsonSchema(ctx *convertContext, s *jsonschema.Schema, name }() isArray := false + isJsonNullType := false + reference := "" typeList := typeUnion{} required := make(map[string]struct{}) for i := 0; i < len(s.OrderedKeywords); i++ { @@ -150,6 +146,8 @@ func convertSchemaFromJsonSchema(ctx *convertContext, s *jsonschema.Schema, name case "array": isArray = true continue + case "null": + isJsonNullType = true } } typeList.Items = append(typeList.Items, jsonTypesToKclTypes(v.Vals)) @@ -215,10 +213,12 @@ func convertSchemaFromJsonSchema(ctx *convertContext, s *jsonschema.Schema, name result.IndexSignature = indexSignature{ Alias: "key", Type: propSch.property.Type, - validation: &validation{ - Required: true, - Name: "key", - Regex: prop.Re, + Validations: []validation{ + { + Required: true, + Name: "key", + Regex: prop.Re, + }, }, } ctx.imports["regex"] = struct{}{} @@ -261,41 +261,48 @@ func convertSchemaFromJsonSchema(ctx *convertContext, s *jsonschema.Schema, name for i := 0; i < len(schs); i++ { sch := schs[i] for _, key := range sch.OrderedKeywords { + // If not existed in the current schema, inherit from the ref schema. if _, ok := s.Keywords[key]; !ok { s.OrderedKeywords = append(s.OrderedKeywords, key) s.Keywords[key] = sch.Keywords[key] } else { switch v := sch.Keywords[key].(type) { - case *jsonschema.Type: - case *jsonschema.Description: - case *jsonschema.Comment: case *jsonschema.Ref: refSch := v.ResolveRef(ctx.rootSchema) if refSch == nil || refSch.OrderedKeywords == nil { - logger.GetLogger().Warningf("failed to resolve ref: %s.", v.Reference) + logger.GetLogger().Warningf("failed to resolve ref: %s, path: %s", v.Reference, strings.Join(ctx.paths, "/")) continue } schs = append(schs, refSch) case *jsonschema.Properties: props := *s.Keywords[key].(*jsonschema.Properties) - props = append(props, *v...) + for _, p := range *v { + if r, _ := props.Get(p.Key); r == nil { + props = append(props, p) + } + } s.Keywords[key] = &props + case *jsonschema.AdditionalProperties: + prop := *s.Keywords[key].(*jsonschema.AdditionalProperties) + s.Keywords[key] = &prop + case *jsonschema.PropertyNames: + prop := *s.Keywords[key].(*jsonschema.PropertyNames) + s.Keywords[key] = &prop case *jsonschema.Required: reqs := *s.Keywords[key].(*jsonschema.Required) - reqs = append(reqs, *v...) + reqs = append(*v, reqs...) s.Keywords[key] = &reqs case *jsonschema.Items: items := *s.Keywords[key].(*jsonschema.Items) - items.Schemas = append(items.Schemas, v.Schemas...) + items.Schemas = append(v.Schemas, items.Schemas...) s.Keywords[key] = &items - case *jsonschema.MinItems: - case *jsonschema.Pattern: default: - logger.GetLogger().Warningf("failed to merge ref: unsupported keyword %s. Paths: %s", key, strings.Join(ctx.paths, "/")) + logger.GetLogger().Warningf("failed to merge ref: unsupported keyword %s in ref, path: %s", key, strings.Join(ctx.paths, "/")) } } } } + reference = v.Reference sort.SliceStable(s.OrderedKeywords[i+1:], func(i, j int) bool { return jsonschema.GetKeywordOrder(s.OrderedKeywords[i]) < jsonschema.GetKeywordOrder(s.OrderedKeywords[j]) }) @@ -317,6 +324,95 @@ func convertSchemaFromJsonSchema(ctx *convertContext, s *jsonschema.Schema, name } case jsonschema.SchemaTypeFalse: } + case *jsonschema.PropertyNames: + if result.HasIndexSignature && result.IndexSignature.Alias != "" { + var validations []validation + for _, key := range v.OrderedKeywords { + switch v := v.Keywords[key].(type) { + case *jsonschema.Minimum: + validations = append(validations, validation{ + Name: result.IndexSignature.Alias, + Required: true, + Minimum: (*float64)(v), + ExclusiveMinimum: false, + }) + case *jsonschema.Maximum: + validations = append(validations, validation{ + Name: result.IndexSignature.Alias, + Required: true, + Maximum: (*float64)(v), + ExclusiveMaximum: false, + }) + case *jsonschema.ExclusiveMinimum: + validations = append(validations, validation{ + Name: result.IndexSignature.Alias, + Required: true, + Minimum: (*float64)(v), + ExclusiveMinimum: true, + }) + case *jsonschema.ExclusiveMaximum: + validations = append(validations, validation{ + Name: result.IndexSignature.Alias, + Required: true, + Maximum: (*float64)(v), + ExclusiveMaximum: true, + }) + case *jsonschema.MinLength: + validations = append(validations, validation{ + Name: result.IndexSignature.Alias, + Required: true, + MinLength: (*int)(v), + }) + case *jsonschema.MaxLength: + validations = append(validations, validation{ + Name: result.IndexSignature.Alias, + Required: true, + MaxLength: (*int)(v), + }) + case *jsonschema.Pattern: + validations = append(validations, validation{ + Name: result.IndexSignature.Alias, + Required: true, + Regex: (*regexp.Regexp)(v), + }) + ctx.imports["regex"] = struct{}{} + case *jsonschema.MultipleOf: + vInt := int(*v) + if float64(vInt) != float64(*v) { + logger.GetLogger().Warningf("unsupported multipleOf value: %f", *v) + continue + } + result.Validations = append(result.Validations, validation{ + Name: result.IndexSignature.Alias, + Required: true, + MultiplyOf: &vInt, + }) + case *jsonschema.UniqueItems: + if *v { + result.Validations = append(result.Validations, validation{ + Name: result.IndexSignature.Alias, + Required: true, + Unique: true, + }) + } + case *jsonschema.MinItems: + result.Validations = append(result.Validations, validation{ + Name: result.IndexSignature.Alias, + Required: true, + MinLength: (*int)(v), + }) + case *jsonschema.MaxItems: + result.Validations = append(result.Validations, validation{ + Name: result.IndexSignature.Alias, + Required: true, + MaxLength: (*int)(v), + }) + default: + + } + } + result.IndexSignature.Validations = append(result.IndexSignature.Validations, validations...) + } case *jsonschema.Minimum: result.Validations = append(result.Validations, validation{ Minimum: (*float64)(v), @@ -379,7 +475,7 @@ func convertSchemaFromJsonSchema(ctx *convertContext, s *jsonschema.Schema, name if item.IsSchema { ctx.resultMap[item.schema.Name] = item typeList.Items = append(typeList.Items, typeCustom{Name: item.schema.Name}) - } else { + } else if !item.isJsonNullType { typeList.Items = append(typeList.Items, item.Type) } } @@ -475,7 +571,6 @@ func convertSchemaFromJsonSchema(ctx *convertContext, s *jsonschema.Schema, name s.Keywords[key] = sch.Keywords[key] } else { switch v := sch.Keywords[key].(type) { - case *jsonschema.Type: case *jsonschema.Ref: refSch := v.ResolveRef(ctx.rootSchema) if refSch == nil || refSch.OrderedKeywords == nil { @@ -485,14 +580,28 @@ func convertSchemaFromJsonSchema(ctx *convertContext, s *jsonschema.Schema, name schs = append(schs, refSch) case *jsonschema.Properties: props := *s.Keywords[key].(*jsonschema.Properties) - props = append(props, *v...) + for _, p := range *v { + if r, _ := props.Get(p.Key); r == nil { + props = append(props, p) + } + } s.Keywords[key] = &props + case *jsonschema.AdditionalProperties: + prop := *s.Keywords[key].(*jsonschema.AdditionalProperties) + s.Keywords[key] = &prop + case *jsonschema.PropertyNames: + prop := *s.Keywords[key].(*jsonschema.PropertyNames) + s.Keywords[key] = &prop + case *jsonschema.Items: + items := *s.Keywords[key].(*jsonschema.Items) + items.Schemas = append(v.Schemas, items.Schemas...) + s.Keywords[key] = &items case *jsonschema.Required: reqs := *s.Keywords[key].(*jsonschema.Required) reqs = append(reqs, *v...) s.Keywords[key] = &reqs default: - logger.GetLogger().Warningf("failed to merge allOf: unsupported keyword %s", key) + logger.GetLogger().Warningf("failed to merge allOf: unsupported keyword %s in allOf, path: %s", key, strings.Join(ctx.paths, "/")) } } } @@ -506,17 +615,28 @@ func convertSchemaFromJsonSchema(ctx *convertContext, s *jsonschema.Schema, name sort.SliceStable(s.OrderedKeywords[i+1:], func(i, j int) bool { return jsonschema.GetKeywordOrder(s.OrderedKeywords[i]) < jsonschema.GetKeywordOrder(s.OrderedKeywords[j]) }) + case *jsonschema.ReadOnly: + // Do nothing for the readOnly keyword. + logger.GetLogger().Infof("unsupported keyword: %s, path: %s, omit it", k, strings.Join(ctx.paths, "/")) + case *jsonschema.Format: + logger.GetLogger().Warningf("unsupported keyword: %s, path: %s, see the issue: https://github.com/kcl-lang/kcl-go/issues/375", k, strings.Join(ctx.paths, "/")) default: - logger.GetLogger().Warningf("unknown Keyword: %s", k) + logger.GetLogger().Warningf("unsupported keyword: %s, path: %s", k, strings.Join(ctx.paths, "/")) } } if result.IsSchema { - var s strings.Builder - for _, p := range ctx.paths { - s.WriteString(strcase.ToCamel(p)) + // We use the reference schema id as the generated schema name + if reference != "" { + lastSlashIndex := strings.LastIndex(reference, "/") + result.schema.Name = convertPropertyName(strings.Replace(string(reference)[lastSlashIndex+1:], ".json", "", -1), CamelCase) + } else { + var s strings.Builder + for _, p := range ctx.paths { + s.WriteString(strcase.ToCamel(p)) + } + result.schema.Name = s.String() } - result.schema.Name = s.String() result.schema.Description = result.Description typeList.Items = append(typeList.Items, typeCustom{Name: result.schema.Name}) if len(result.Properties) == 0 && !result.HasIndexSignature { @@ -533,9 +653,9 @@ func convertSchemaFromJsonSchema(ctx *convertContext, s *jsonschema.Schema, name } else { result.Type = typePrimitive(typAny) } - - if result.HasIndexSignature && result.IndexSignature.validation != nil { - result.Validations = append(result.Validations, *result.IndexSignature.validation) + result.isJsonNullType = isJsonNullType + if result.HasIndexSignature && len(result.IndexSignature.Validations) > 0 { + result.Validations = append(result.Validations, result.IndexSignature.Validations...) } // Update AllOf validation required fields for i := range result.Validations { @@ -544,6 +664,7 @@ func convertSchemaFromJsonSchema(ctx *convertContext, s *jsonschema.Schema, name result.Validations[i].AllOf[j].Required = result.Validations[i].Required } } + result.property.Name = convertPropertyName(result.Name, ctx.castingOption) result.property.Description = result.Description return result @@ -552,7 +673,14 @@ func convertSchemaFromJsonSchema(ctx *convertContext, s *jsonschema.Schema, name func jsonTypesToKclTypes(t []string) typeInterface { var kclTypes typeUnion for _, v := range t { - kclTypes.Items = append(kclTypes.Items, jsonTypeToKclType(v)) + // Skip the `type | null` format. + if v != "null" { + kclTypes.Items = append(kclTypes.Items, jsonTypeToKclType(v)) + } + } + // If no any items in the union types, return the `any` type. + if len(kclTypes.Items) == 0 { + return typePrimitive(typAny) } return kclTypes } @@ -567,9 +695,15 @@ func jsonTypeToKclType(t string) typeInterface { return typePrimitive(typInt) case "number": return typePrimitive(typFloat) + case "array": + return typeArray{Items: typePrimitive(typAny)} + case "object": + return typePrimitive(typAny) + case "null": + return typePrimitive(typAny) default: - logger.GetLogger().Warningf("unknown type: %s", t) - return typePrimitive(typStr) + logger.GetLogger().Warningf("unknown type: %s, use the any type", t) + return typePrimitive(typAny) } } diff --git a/pkg/tools/gen/testdata/jsonschema/allof/expect.k b/pkg/tools/gen/testdata/jsonschema/allof/expect.k index 5d33fadb..c3badd8e 100644 --- a/pkg/tools/gen/testdata/jsonschema/allof/expect.k +++ b/pkg/tools/gen/testdata/jsonschema/allof/expect.k @@ -10,34 +10,14 @@ schema Shop: Attributes ---------- - products : ShopProductsOneOf0 | [ShopProductsOneOf1Items0] | "empty", optional + products : Clothing | [Clothing] | "empty", optional """ - products?: ShopProductsOneOf0 | [ShopProductsOneOf1Items0] | "empty" + products?: Clothing | [Clothing] | "empty" -schema ShopProductsOneOf0: +schema Clothing: r""" - ShopProductsOneOf0 - - Attributes - ---------- - $type : "clothing", required, default is "clothing" - material : str, optional - name : str, required - price : float, optional - """ - - $type: "clothing" = "clothing" - material?: str - name: str - price?: float - - check: - price >= 0 if price - -schema ShopProductsOneOf1Items0: - r""" - ShopProductsOneOf1Items0 + Clothing Attributes ---------- diff --git a/pkg/tools/gen/testdata/jsonschema/as3/expect.k b/pkg/tools/gen/testdata/jsonschema/as3/expect.k new file mode 100644 index 00000000..697a6fdd --- /dev/null +++ b/pkg/tools/gen/testdata/jsonschema/as3/expect.k @@ -0,0 +1,924 @@ +""" +This file was generated by the KCL auto-gen tool. DO NOT EDIT. +Editing this file might prove futile when you re-run the KCL auto-gen generate command. +""" +import regex + +schema Adc: + r""" + A declarative configuration for an ADC such as F5 BIG-IP + + Attributes + ---------- + class : "ADC", required, default is "ADC" + Indicates this JSON document is an ADC declaration + "$schema" : str, optional + URL of schema against which to validate. Used by validation in your local environment only (via Visual Studio Code, for example) + updateMode : "complete" | "selective", optional, default is "selective" + When set to 'selective' (default) BIG-IP AS3 does not modify Tenants not referenced in the declaration. Otherwise ('complete') BIG-IP AS3 removes unreferenced Tenants. + schemaVersion : str, required + Version of ADC Declaration schema this declaration uses + id : str, optional + Unique identifier for this declaration (max 255 printable chars with no spaces, quotation marks, angle brackets, nor backslashes) + target : As3OneOf4Items0Target, optional + Trusted target for config when configuring with BIG-IQ + label : str, optional + Optional friendly name for this object. Allows 0-64 chars, excluding a few likely to cause trouble with string searching, JS, TCL, or HTML + remark : str, optional + Arbitrary (brief) text pertaining to this object. Allows 0-64 chars, excluding only control characters, double-quote, and backslash. This is permissive enough that you should worry about XSS attacks + constants : As3OneOf4Items0Constants, optional + Declaration metadata and/or named values for (re-)use by declaration objects + Common : As3OneOf4Items0Common, optional + Special tenant Common holds objects other tenants can share + controls : Controls, optional + Optional controls configuration + scratch : str, optional + Holds some system data during declaration processing + """ + + class: "ADC" = "ADC" + "$schema"?: str + updateMode?: "complete" | "selective" = "selective" + schemaVersion: str + id?: str + target?: As3OneOf4Items0Target + label?: str + remark?: str + constants?: As3OneOf4Items0Constants + Common?: As3OneOf4Items0Common + controls?: Controls + scratch?: str + [...str]: Tenant + + check: + len(id) <= 255 if id + len(id) >= 0 if id + regex.match(id, r"^[^\x00-\x20\x22'<>\x5c^`|\x7f]*$") if id + len(label) <= 64 if label + len(label) >= 0 if label + regex.match(label, r"^[^\x00-\x1f\x22#&*<>?\x5b-\x5d`\x7f]*$") if label + len(remark) <= 64 if remark + len(remark) >= 0 if remark + regex.match(remark, r"^[^\x00-\x1f\x22\x5c\x7f]*$") if remark + +schema Application: + r""" + Application declaration main schema + + Attributes + ---------- + class : "Application", required, default is "Application" + label : str, optional + Optional friendly name for this object. Allows 0-64 chars, excluding a few likely to cause trouble with string searching, JS, TCL, or HTML + remark : str, optional + Arbitrary (brief) text pertaining to this object. Allows 0-64 chars, excluding only control characters, double-quote, and backslash. This is permissive enough that you should worry about XSS attacks + template : str, optional, default is "generic" + Each application type has certain required and default elements and selects appropriate setup of various ADC/Security features + schemaOverlay : str, optional + BIG-IQ name for a supplemental validation schema is applied to the Application class definition before the main BIG-IP AS3 schema + enable : bool, optional, default is True + Application handles traffic only when enabled (default) + constants : Constants, optional + Named values for (re-)use by declaration objects + serviceMain : any, optional + Primary service of the application + """ + + class: "Application" = "Application" + label?: str + remark?: str + template?: str = "generic" + schemaOverlay?: str + enable?: bool = True + constants?: Constants + serviceMain?: any + [...str]: As3OneOf4Items0AdditionalPropertiesAdditionalPropertiesAdditionalProperties + + check: + len(label) <= 64 if label + len(label) >= 0 if label + regex.match(label, r"^[^\x00-\x1f\x22#&*<>?\x5b-\x5d`\x7f]*$") if label + len(remark) <= 64 if remark + len(remark) >= 0 if remark + regex.match(remark, r"^[^\x00-\x1f\x22\x5c\x7f]*$") if remark + +schema ApplicationShared: + r""" + Special application Shared holds objects other applications can share + + Attributes + ---------- + class : "Application", required, default is "Application" + template : "shared", required, default is "shared" + Shared Application template is always generic + enable : True, optional, default is True + If declared, you must enable the Shared Application + label : str, optional + Optional friendly name for this object. Allows 0-64 chars, excluding a few likely to cause trouble with string searching, JS, TCL, or HTML + remark : str, optional + Arbitrary (brief) text pertaining to this object. Allows 0-64 chars, excluding only control characters, double-quote, and backslash. This is permissive enough that you should worry about XSS attacks + schemaOverlay : str, optional + BIG-IQ name for a supplemental validation schema is applied to the Application class definition before the main BIG-IP AS3 schema + constants : Constants, optional + Named values for (re-)use by declaration objects + serviceMain : any, optional + Primary service of the application + """ + + class: "Application" = "Application" + template: "shared" = "shared" + enable?: True = True + label?: str + remark?: str + schemaOverlay?: str + constants?: Constants + serviceMain?: any + [...str]: As3OneOf4Items0AdditionalPropertiesSharedAdditionalProperties + + check: + len(label) <= 64 if label + len(label) >= 0 if label + regex.match(label, r"^[^\x00-\x1f\x22#&*<>?\x5b-\x5d`\x7f]*$") if label + len(remark) <= 64 if remark + len(remark) >= 0 if remark + regex.match(remark, r"^[^\x00-\x1f\x22\x5c\x7f]*$") if remark + +schema As3: + r""" + A body with AS3 Class + + Attributes + ---------- + class : "AS3", required, default is "AS3" + Indicates a BIG-IP AS3 request + "$schema" : str, optional + URL of schema against which to validate. Used by validation in your local environment only (via Visual Studio Code, for example) + action : "deploy" | "dry-run" | "patch" | "redeploy" | "retrieve" | "remove", optional, default is "deploy" + Indicates desired action: 'deploy' means deploy the included declaration to targetHost; 'dry-run' does NOT deploy the declaration but does do everything short of changing targetHost's configuration; 'patch' modifies the declaration based on the provided set of commands and then deploys the updated declaration; 'redeploy' causes an old declaration from targetHost's declaration history to be re-deployed (property redeployAge (default 0) selects the old declaration, and note redeployUpdateMode as well); 'retrieve' returns a copy of a previously-deployed declaration; 'remove' deletes the declaration or declaration component. + redeployAge : int, optional, default is 0 + For action=redeploy (only), chooses which old declaration to deploy again. Value 0 (default) means re-deploy the most recent declaration (the one which set the current configuration of targetHost-- useful to erase changes introduced by manual configuration). Value 1 means re-deploy the declaration prior to the most-recent one, etc. Note that whenever re-deploying an old declaration causes ADC configuration changes, that declaration becomes the current declaration (age 0) and the ages of all other declarations in the history increase (0 => 1, 1 => 2, u.s.w.) + redeployUpdateMode : "original" | "complete" | "selective", optional, default is "original" + Value 'original' (default) means re-deploy the chosen declaration using its original updateMode (which if not explicitly specified in that declaration will default to 'selective'). Otherwise, forces the updateMode for re-deployment to 'complete' or 'selective' as specified. Remember, 'selective' updates do not affect Tenants not explicitly named. To simply roll-back the targetHost configuration to the state it had immediately after deploying some earlier declaration, put 'complete' here (that will remove Tenants created later than the redeployAge declaration). To use action=redeploy as a simple roll-back facility, always deploy (updateMode=)complete declarations. + persist : bool, optional, default is True + When true (default) make the whole working configuration persistent on targetHost after (and only if) this request deploys any changes. If false, leave the working configuration in memory only (if targetHost restart, you may lose the configuration from memory) + syncToGroup : str, optional, default is "" + Name (like /Common/my_dg) of the config-sync group TO which the system should synchronize the targetHost configuration after (and only if) this request deploys any changes. When empty (default) this request will not affect config-sync at all. Leave undefined or empty whenever you use auto-sync or manage configuration synchronization separately + historyLimit : float, optional, default is 4 + This value (default 4) limits the number of previously-deployed declarations saved on targetHost for review using GET and for use with POST action=redeploy and redeployAge=N. The limit includes the current and immediately-previous declarations so may not be less than two + logLevel : "emergency" | "alert" | "critical" | "error" | "warning" | "notice" | "info" | "debug", optional, default is "warning" + Controls level of detail in logs using RFC 5424 severity levels (default is 'warning'). Portions of declaration may use different logLevels + trace : bool, optional, default is False + If true, BIG-IP AS3 creates a detailed trace of the configuration process for subsequent analysis (default false). May be overridden on a per-Declaration and/or per-Tenant basis. Warning: trace files may contain sensitive configuration data + retrieveAge : int | "list", optional, default is 0 + Use this property with action=retrieve. You can usually get a copy of the declaration most recently deployed to targetHost, and often copies of previously-deployed declarations are also available. Value 0 (default) means 'the last-deployed declaration,' value 1 means 'the declaration previous to 0' and so-forth. To get a list of available declarations, set value 'list' + targetHost : str, optional, default is "localhost" + Hostname or IP address of ADC to which request applies (default localhost) + targetPort : int, optional, default is 0 + TCP port number of management service on targetHost; default 0 means auto-discover + targetUsername : str, optional + Username of principal authorized to modify configuration of targetHost (may not include the character ':'). NOTE: this is generally not required to configure 'localhost' because client authentication and authorization precede invocation of BIG-IP AS3. It is also not required for any targetHost if you populate targetTokens + targetPassphrase : str, optional + Passphrase for targetUsername account. This is generally not required to configure 'localhost' and is not required when you populate targetTokens + targetTokens : As3OneOf3Items0TargetTokens, optional + One or more HTTP headers (each a property, like 'X-F5-Auth-Token': 'ABC123') you want to send with queries to the targetHost management service as authentication/authorization tokens + targetTimeout : int, optional, default is 150 + Maximum delay allowed while communicating with targetHost device (seconds, default 150) + resourceTimeout : int, optional, default is 5 + Maximum delay allowed while communicating with URL resources (seconds, default 5) + declaration : Adc, optional + A declarative configuration for an ADC such as F5 BIG-IP + patchBody : [As3PatchItem | As3PatchItem], optional + An array containing the patch operations to apply on the declaration + """ + + class: "AS3" = "AS3" + "$schema"?: str + action?: "deploy" | "dry-run" | "patch" | "redeploy" | "retrieve" | "remove" = "deploy" + redeployAge?: int = 0 + redeployUpdateMode?: "original" | "complete" | "selective" = "original" + persist?: bool = True + syncToGroup?: str = "" + historyLimit?: float = 4 + logLevel?: "emergency" | "alert" | "critical" | "error" | "warning" | "notice" | "info" | "debug" = "warning" + trace?: bool = False + retrieveAge?: int | "list" = 0 + targetHost?: str = "localhost" + targetPort?: int = 0 + targetUsername?: str + targetPassphrase?: str + targetTokens?: As3OneOf3Items0TargetTokens + targetTimeout?: int = 150 + resourceTimeout?: int = 5 + declaration?: Adc + patchBody?: [As3PatchItem | As3PatchItem] + + check: + redeployAge <= 15 if redeployAge + redeployAge >= 0 if redeployAge + historyLimit <= 15 if historyLimit + historyLimit >= 2 if historyLimit + targetPort <= 65535 if targetPort + targetPort >= 0 if targetPort + len(targetUsername) <= 254 if targetUsername + regex.match(targetUsername, r"^[^:]*$") if targetUsername + len(targetPassphrase) <= 254 if targetPassphrase + targetTimeout <= 900 if targetTimeout + targetTimeout >= 1 if targetTimeout + resourceTimeout <= 900 if resourceTimeout + resourceTimeout >= 1 if resourceTimeout + len(patchBody) >= 1 if patchBody + +schema As3OneOf0DeclarationAdditionalPropertiesAdditionalPropertiesAdditionalProperties: + r""" + As3OneOf0DeclarationAdditionalPropertiesAdditionalPropertiesAdditionalProperties + + Attributes + ---------- + class : "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile", optional + """ + + class?: "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile" + +schema As3OneOf0DeclarationAdditionalPropertiesSharedAdditionalProperties: + r""" + As3OneOf0DeclarationAdditionalPropertiesSharedAdditionalProperties + + Attributes + ---------- + class : "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile", optional + """ + + class?: "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile" + +schema As3OneOf0DeclarationAdditionalPropertiesVerifiers: + r""" + Data (in 'key':'value' properties) used to verify automated tests. Ordinary declarations do not need this + """ + + [...str]: any + +schema As3OneOf0DeclarationCommon: + r""" + Special tenant Common holds objects other tenants can share + + Attributes + ---------- + class : "Tenant", optional, default is "Tenant" + label : str, optional + Optional friendly name for this object. Allows 0-64 chars, excluding a few likely to cause trouble with string searching, JS, TCL, or HTML + remark : str, optional + Arbitrary (brief) text pertaining to this object. Allows 0-64 chars, excluding only control characters, double-quote, and backslash. This is permissive enough that you should worry about XSS attacks + verifiers : As3OneOf0DeclarationCommonVerifiers, optional + Data (in 'key':'value' properties) used to verify automated tests. Ordinary declarations do not need this + enable : True, optional, default is True + If declared, you must enable the Common tenant + Shared : ApplicationShared, optional + Special application Shared holds objects other applications can share + constants : Constants, optional + Named values for (re-)use by declaration objects + controls : Controls, optional + Optional controls configuration + optimisticLockKey : str, optional, default is "" + When you deploy a declaration with a non-empty 'key' value here, that activates an optimistic lock on changes to this Tenant. If the key in your declaration does not match the key BIG-IP AS3 computes for the most-recent previous declaration, then BIG-IP AS3 will NOT update this Tenant and will return an error code. To use optimistic locking, first retrieve a declaration using option 'showHash=true' to get the current per-Tenant keys. Make any changes you desire, then deploy your updated declaration. Deployment of each Tenant with a key will succeed only if that Tenant has not been modified since the time you retrieved the declaration. (To overwrite all previous changes to a Tenant simply do NOT include any opportunistic-lock key for that Tenant when you deploy a declaration. That is the default.) Note that only keys computed by BIG-IP AS3 may be used here-- you cannot generate your own. If 'showHash=true' is used on a POST then the optimisticLockKey will be shown as a part of the output (This helps to avoid the need to do a GET request). + """ + + class?: "Tenant" = "Tenant" + label?: str + remark?: str + verifiers?: As3OneOf0DeclarationCommonVerifiers + enable?: True = True + Shared?: ApplicationShared + constants?: Constants + controls?: Controls + optimisticLockKey?: str = "" + + check: + len(label) <= 64 if label + len(label) >= 0 if label + regex.match(label, r"^[^\x00-\x1f\x22#&*<>?\x5b-\x5d`\x7f]*$") if label + len(remark) <= 64 if remark + len(remark) >= 0 if remark + regex.match(remark, r"^[^\x00-\x1f\x22\x5c\x7f]*$") if remark + len(optimisticLockKey) <= 128 if optimisticLockKey + +schema As3OneOf0DeclarationCommonSharedAdditionalProperties: + r""" + As3OneOf0DeclarationCommonSharedAdditionalProperties + + Attributes + ---------- + class : "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile", optional + """ + + class?: "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile" + +schema As3OneOf0DeclarationCommonVerifiers: + r""" + Data (in 'key':'value' properties) used to verify automated tests. Ordinary declarations do not need this + """ + + [...str]: any + +schema As3OneOf0DeclarationConstants: + r""" + Declaration metadata and/or named values for (re-)use by declaration objects + + Attributes + ---------- + class : "Constants", optional, default is "Constants" + version : float | str, optional + Version number of declaration; update when you change contents but not ID (optional but recommended) + timestamp : str, optional + Date+time (this version of) declaration was created (optional but recommended) + """ + + class?: "Constants" = "Constants" + version?: float | str + timestamp?: str + [...str]: bool | int | float | str | [any] | any + +schema As3OneOf0DeclarationTarget: + r""" + Trusted target for config when configuring with BIG-IQ + + Attributes + ---------- + hostname : str, optional + Host name of managed device to be configured + address : str, optional + IP address of managed device to be configured + """ + + hostname?: str + address?: str + +schema As3OneOf0PatchBodyItems0Target: + r""" + Optional target device (only applies when configuring with certain hosts such as BIG-IQ) + + Attributes + ---------- + hostname : str, optional + Host name of managed device to be configured + address : str, optional + IP address of managed device to be configured + """ + + hostname?: str + address?: str + +schema As3OneOf0TargetTokens: + r""" + One or more HTTP headers (each a property, like 'X-F5-Auth-Token': 'ABC123') you want to send with queries to the targetHost management service as authentication/authorization tokens + """ + + [key: str]: str + + check: + regex.match(key, r"^[^\x00-\x20:\x7f-\xff]{1,254}$") + +schema As3OneOf1AdditionalPropertiesAdditionalPropertiesAdditionalProperties: + r""" + As3OneOf1AdditionalPropertiesAdditionalPropertiesAdditionalProperties + + Attributes + ---------- + class : "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile", optional + """ + + class?: "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile" + +schema As3OneOf1AdditionalPropertiesSharedAdditionalProperties: + r""" + As3OneOf1AdditionalPropertiesSharedAdditionalProperties + + Attributes + ---------- + class : "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile", optional + """ + + class?: "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile" + +schema As3OneOf1AdditionalPropertiesVerifiers: + r""" + Data (in 'key':'value' properties) used to verify automated tests. Ordinary declarations do not need this + """ + + [...str]: any + +schema As3OneOf1Common: + r""" + Special tenant Common holds objects other tenants can share + + Attributes + ---------- + class : "Tenant", optional, default is "Tenant" + label : str, optional + Optional friendly name for this object. Allows 0-64 chars, excluding a few likely to cause trouble with string searching, JS, TCL, or HTML + remark : str, optional + Arbitrary (brief) text pertaining to this object. Allows 0-64 chars, excluding only control characters, double-quote, and backslash. This is permissive enough that you should worry about XSS attacks + verifiers : As3OneOf1CommonVerifiers, optional + Data (in 'key':'value' properties) used to verify automated tests. Ordinary declarations do not need this + enable : True, optional, default is True + If declared, you must enable the Common tenant + Shared : ApplicationShared, optional + Special application Shared holds objects other applications can share + constants : Constants, optional + Named values for (re-)use by declaration objects + controls : Controls, optional + Optional controls configuration + optimisticLockKey : str, optional, default is "" + When you deploy a declaration with a non-empty 'key' value here, that activates an optimistic lock on changes to this Tenant. If the key in your declaration does not match the key BIG-IP AS3 computes for the most-recent previous declaration, then BIG-IP AS3 will NOT update this Tenant and will return an error code. To use optimistic locking, first retrieve a declaration using option 'showHash=true' to get the current per-Tenant keys. Make any changes you desire, then deploy your updated declaration. Deployment of each Tenant with a key will succeed only if that Tenant has not been modified since the time you retrieved the declaration. (To overwrite all previous changes to a Tenant simply do NOT include any opportunistic-lock key for that Tenant when you deploy a declaration. That is the default.) Note that only keys computed by BIG-IP AS3 may be used here-- you cannot generate your own. If 'showHash=true' is used on a POST then the optimisticLockKey will be shown as a part of the output (This helps to avoid the need to do a GET request). + """ + + class?: "Tenant" = "Tenant" + label?: str + remark?: str + verifiers?: As3OneOf1CommonVerifiers + enable?: True = True + Shared?: ApplicationShared + constants?: Constants + controls?: Controls + optimisticLockKey?: str = "" + + check: + len(label) <= 64 if label + len(label) >= 0 if label + regex.match(label, r"^[^\x00-\x1f\x22#&*<>?\x5b-\x5d`\x7f]*$") if label + len(remark) <= 64 if remark + len(remark) >= 0 if remark + regex.match(remark, r"^[^\x00-\x1f\x22\x5c\x7f]*$") if remark + len(optimisticLockKey) <= 128 if optimisticLockKey + +schema As3OneOf1CommonSharedAdditionalProperties: + r""" + As3OneOf1CommonSharedAdditionalProperties + + Attributes + ---------- + class : "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile", optional + """ + + class?: "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile" + +schema As3OneOf1CommonVerifiers: + r""" + Data (in 'key':'value' properties) used to verify automated tests. Ordinary declarations do not need this + """ + + [...str]: any + +schema As3OneOf1Constants: + r""" + Declaration metadata and/or named values for (re-)use by declaration objects + + Attributes + ---------- + class : "Constants", optional, default is "Constants" + version : float | str, optional + Version number of declaration; update when you change contents but not ID (optional but recommended) + timestamp : str, optional + Date+time (this version of) declaration was created (optional but recommended) + """ + + class?: "Constants" = "Constants" + version?: float | str + timestamp?: str + [...str]: bool | int | float | str | [any] | any + +schema As3OneOf1Target: + r""" + Trusted target for config when configuring with BIG-IQ + + Attributes + ---------- + hostname : str, optional + Host name of managed device to be configured + address : str, optional + IP address of managed device to be configured + """ + + hostname?: str + address?: str + +schema As3OneOf2Items0Target: + r""" + Optional target device (only applies when configuring with certain hosts such as BIG-IQ) + + Attributes + ---------- + hostname : str, optional + Host name of managed device to be configured + address : str, optional + IP address of managed device to be configured + """ + + hostname?: str + address?: str + +schema As3OneOf3Items0DeclarationAdditionalPropertiesAdditionalPropertiesAdditionalProperties: + r""" + As3OneOf3Items0DeclarationAdditionalPropertiesAdditionalPropertiesAdditionalProperties + + Attributes + ---------- + class : "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile", optional + """ + + class?: "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile" + +schema As3OneOf3Items0DeclarationAdditionalPropertiesSharedAdditionalProperties: + r""" + As3OneOf3Items0DeclarationAdditionalPropertiesSharedAdditionalProperties + + Attributes + ---------- + class : "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile", optional + """ + + class?: "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile" + +schema As3OneOf3Items0DeclarationAdditionalPropertiesVerifiers: + r""" + Data (in 'key':'value' properties) used to verify automated tests. Ordinary declarations do not need this + """ + + [...str]: any + +schema As3OneOf3Items0DeclarationCommon: + r""" + Special tenant Common holds objects other tenants can share + + Attributes + ---------- + class : "Tenant", optional, default is "Tenant" + label : str, optional + Optional friendly name for this object. Allows 0-64 chars, excluding a few likely to cause trouble with string searching, JS, TCL, or HTML + remark : str, optional + Arbitrary (brief) text pertaining to this object. Allows 0-64 chars, excluding only control characters, double-quote, and backslash. This is permissive enough that you should worry about XSS attacks + verifiers : As3OneOf3Items0DeclarationCommonVerifiers, optional + Data (in 'key':'value' properties) used to verify automated tests. Ordinary declarations do not need this + enable : True, optional, default is True + If declared, you must enable the Common tenant + Shared : ApplicationShared, optional + Special application Shared holds objects other applications can share + constants : Constants, optional + Named values for (re-)use by declaration objects + controls : Controls, optional + Optional controls configuration + optimisticLockKey : str, optional, default is "" + When you deploy a declaration with a non-empty 'key' value here, that activates an optimistic lock on changes to this Tenant. If the key in your declaration does not match the key BIG-IP AS3 computes for the most-recent previous declaration, then BIG-IP AS3 will NOT update this Tenant and will return an error code. To use optimistic locking, first retrieve a declaration using option 'showHash=true' to get the current per-Tenant keys. Make any changes you desire, then deploy your updated declaration. Deployment of each Tenant with a key will succeed only if that Tenant has not been modified since the time you retrieved the declaration. (To overwrite all previous changes to a Tenant simply do NOT include any opportunistic-lock key for that Tenant when you deploy a declaration. That is the default.) Note that only keys computed by BIG-IP AS3 may be used here-- you cannot generate your own. If 'showHash=true' is used on a POST then the optimisticLockKey will be shown as a part of the output (This helps to avoid the need to do a GET request). + """ + + class?: "Tenant" = "Tenant" + label?: str + remark?: str + verifiers?: As3OneOf3Items0DeclarationCommonVerifiers + enable?: True = True + Shared?: ApplicationShared + constants?: Constants + controls?: Controls + optimisticLockKey?: str = "" + + check: + len(label) <= 64 if label + len(label) >= 0 if label + regex.match(label, r"^[^\x00-\x1f\x22#&*<>?\x5b-\x5d`\x7f]*$") if label + len(remark) <= 64 if remark + len(remark) >= 0 if remark + regex.match(remark, r"^[^\x00-\x1f\x22\x5c\x7f]*$") if remark + len(optimisticLockKey) <= 128 if optimisticLockKey + +schema As3OneOf3Items0DeclarationCommonSharedAdditionalProperties: + r""" + As3OneOf3Items0DeclarationCommonSharedAdditionalProperties + + Attributes + ---------- + class : "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile", optional + """ + + class?: "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile" + +schema As3OneOf3Items0DeclarationCommonVerifiers: + r""" + Data (in 'key':'value' properties) used to verify automated tests. Ordinary declarations do not need this + """ + + [...str]: any + +schema As3OneOf3Items0DeclarationConstants: + r""" + Declaration metadata and/or named values for (re-)use by declaration objects + + Attributes + ---------- + class : "Constants", optional, default is "Constants" + version : float | str, optional + Version number of declaration; update when you change contents but not ID (optional but recommended) + timestamp : str, optional + Date+time (this version of) declaration was created (optional but recommended) + """ + + class?: "Constants" = "Constants" + version?: float | str + timestamp?: str + [...str]: bool | int | float | str | [any] | any + +schema As3OneOf3Items0DeclarationTarget: + r""" + Trusted target for config when configuring with BIG-IQ + + Attributes + ---------- + hostname : str, optional + Host name of managed device to be configured + address : str, optional + IP address of managed device to be configured + """ + + hostname?: str + address?: str + +schema As3OneOf3Items0PatchBodyItems0Target: + r""" + Optional target device (only applies when configuring with certain hosts such as BIG-IQ) + + Attributes + ---------- + hostname : str, optional + Host name of managed device to be configured + address : str, optional + IP address of managed device to be configured + """ + + hostname?: str + address?: str + +schema As3OneOf3Items0PatchBodyItems1Target: + r""" + Optional target device (only applies when configuring with certain hosts such as BIG-IQ) + + Attributes + ---------- + hostname : str, optional + Host name of managed device to be configured + address : str, optional + IP address of managed device to be configured + """ + + hostname?: str + address?: str + +schema As3OneOf3Items0TargetTokens: + r""" + One or more HTTP headers (each a property, like 'X-F5-Auth-Token': 'ABC123') you want to send with queries to the targetHost management service as authentication/authorization tokens + """ + + [key: str]: str + + check: + regex.match(key, r"^[^\x00-\x20:\x7f-\xff]{1,254}$") + +schema As3OneOf4Items0AdditionalPropertiesAdditionalPropertiesAdditionalProperties: + r""" + As3OneOf4Items0AdditionalPropertiesAdditionalPropertiesAdditionalProperties + + Attributes + ---------- + class : "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile", optional + """ + + class?: "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile" + +schema As3OneOf4Items0AdditionalPropertiesSharedAdditionalProperties: + r""" + As3OneOf4Items0AdditionalPropertiesSharedAdditionalProperties + + Attributes + ---------- + class : "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile", optional + """ + + class?: "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile" + +schema As3OneOf4Items0AdditionalPropertiesVerifiers: + r""" + Data (in 'key':'value' properties) used to verify automated tests. Ordinary declarations do not need this + """ + + [...str]: any + +schema As3OneOf4Items0Common: + r""" + Special tenant Common holds objects other tenants can share + + Attributes + ---------- + class : "Tenant", optional, default is "Tenant" + label : str, optional + Optional friendly name for this object. Allows 0-64 chars, excluding a few likely to cause trouble with string searching, JS, TCL, or HTML + remark : str, optional + Arbitrary (brief) text pertaining to this object. Allows 0-64 chars, excluding only control characters, double-quote, and backslash. This is permissive enough that you should worry about XSS attacks + verifiers : As3OneOf4Items0CommonVerifiers, optional + Data (in 'key':'value' properties) used to verify automated tests. Ordinary declarations do not need this + enable : True, optional, default is True + If declared, you must enable the Common tenant + Shared : ApplicationShared, optional + Special application Shared holds objects other applications can share + constants : Constants, optional + Named values for (re-)use by declaration objects + controls : Controls, optional + Optional controls configuration + optimisticLockKey : str, optional, default is "" + When you deploy a declaration with a non-empty 'key' value here, that activates an optimistic lock on changes to this Tenant. If the key in your declaration does not match the key BIG-IP AS3 computes for the most-recent previous declaration, then BIG-IP AS3 will NOT update this Tenant and will return an error code. To use optimistic locking, first retrieve a declaration using option 'showHash=true' to get the current per-Tenant keys. Make any changes you desire, then deploy your updated declaration. Deployment of each Tenant with a key will succeed only if that Tenant has not been modified since the time you retrieved the declaration. (To overwrite all previous changes to a Tenant simply do NOT include any opportunistic-lock key for that Tenant when you deploy a declaration. That is the default.) Note that only keys computed by BIG-IP AS3 may be used here-- you cannot generate your own. If 'showHash=true' is used on a POST then the optimisticLockKey will be shown as a part of the output (This helps to avoid the need to do a GET request). + """ + + class?: "Tenant" = "Tenant" + label?: str + remark?: str + verifiers?: As3OneOf4Items0CommonVerifiers + enable?: True = True + Shared?: ApplicationShared + constants?: Constants + controls?: Controls + optimisticLockKey?: str = "" + + check: + len(label) <= 64 if label + len(label) >= 0 if label + regex.match(label, r"^[^\x00-\x1f\x22#&*<>?\x5b-\x5d`\x7f]*$") if label + len(remark) <= 64 if remark + len(remark) >= 0 if remark + regex.match(remark, r"^[^\x00-\x1f\x22\x5c\x7f]*$") if remark + len(optimisticLockKey) <= 128 if optimisticLockKey + +schema As3OneOf4Items0CommonSharedAdditionalProperties: + r""" + As3OneOf4Items0CommonSharedAdditionalProperties + + Attributes + ---------- + class : "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile", optional + """ + + class?: "Service_HTTP" | "Service_HTTPS" | "Service_TCP" | "Service_UDP" | "Service_SCTP" | "Service_L4" | "Service_Generic" | "Service_Forwarding" | "Service_Address" | "WAF_Policy" | "Persist" | "Pool" | "Address_Discovery" | "TLS_Server" | "TLS_Client" | "FIX_Profile" | "RTSP_Profile" | "SIP_Profile" | "Statistics_Profile" | "TFTP_Profile" | "FTP_Profile" | "HTML_Rule" | "HTML_Profile" | "WebSocket_Profile" | "Multiplex_Profile" | "SOCKS_Profile" | "TCP_Profile" | "Classification_Profile" | "Radius_Profile" | "IP_Other_Profile" | "Rewrite_Profile" | "Stream_Profile" | "Access_Profile" | "Per_Request_Access_Policy" | "ICAP_Profile" | "Adapt_Profile" | "Cipher_Rule" | "Cipher_Group" | "iFile" | "Firewall_Address_List" | "Firewall_Port_List" | "Firewall_Rule_List" | "Firewall_Policy" | "NAT_Policy" | "NAT_Source_Translation" | "Protocol_Inspection_Profile" | "SSH_Proxy_Profile" | "Data_Group" | "DNS_Cache" | "DNS_Profile" | "DNS_TSIG_Key" | "DNS_Zone" | "DNS_Nameserver" | "DOS_Profile" | "GSLB_Domain" | "GSLB_iRule" | "GSLB_Monitor" | "GSLB_Pool" | "GSLB_Server" | "GSLB_Data_Center" | "GSLB_Prober_Pool" | "GSLB_Topology_Records" | "GSLB_Topology_Region" | "ALG_Log_Profile" | "Security_Log_Profile" | "Traffic_Log_Profile" | "Endpoint_Policy" | "Endpoint_Strategy" | "Bandwidth_Control_Policy" | "Idle_Timeout_Policy" | "Net_Address_List" | "Net_Port_List" | "Enforcement_Policy" | "Enforcement_Diameter_Endpoint_Profile" | "Enforcement_iRule" | "Enforcement_Radius_AAA_Profile" | "Enforcement_Profile" | "Enforcement_Subscriber_Management_Profile" | "Enforcement_Listener" | "Enforcement_Interception_Endpoint" | "Enforcement_Format_Script" | "Enforcement_Forwarding_Endpoint" | "Enforcement_Service_Chain_Endpoint" | "Analytics_Profile" | "Analytics_TCP_Profile" | "CA_Bundle" | "Certificate" | "Certificate_Validator_OCSP" | "DNS_Logging_Profile" | "HTTP_Acceleration_Profile" | "HTTP_Compress" | "HTTP_Profile" | "HTTP2_Profile" | "iRule" | "L4_Profile" | "Log_Destination" | "Log_Publisher" | "Monitor" | "SNAT_Pool" | "SNAT_Translation" | "UDP_Profile" + +schema As3OneOf4Items0CommonVerifiers: + r""" + Data (in 'key':'value' properties) used to verify automated tests. Ordinary declarations do not need this + """ + + [...str]: any + +schema As3OneOf4Items0Constants: + r""" + Declaration metadata and/or named values for (re-)use by declaration objects + + Attributes + ---------- + class : "Constants", optional, default is "Constants" + version : float | str, optional + Version number of declaration; update when you change contents but not ID (optional but recommended) + timestamp : str, optional + Date+time (this version of) declaration was created (optional but recommended) + """ + + class?: "Constants" = "Constants" + version?: float | str + timestamp?: str + [...str]: bool | int | float | str | [any] | any + +schema As3OneOf4Items0Target: + r""" + Trusted target for config when configuring with BIG-IQ + + Attributes + ---------- + hostname : str, optional + Host name of managed device to be configured + address : str, optional + IP address of managed device to be configured + """ + + hostname?: str + address?: str + +schema As3PatchItem: + r""" + Defines a PATCH operation to perform + + Attributes + ---------- + op : str, required + Operation to perform + path : str, required + Declaration Object Path relative to URI on which the operation is to be performed + value : str | float | bool | any | [any], optional + Value to use for the operation + target : As3OneOf3Items0PatchBodyItems1Target, optional + Optional target device (only applies when configuring with certain hosts such as BIG-IQ) + """ + + op: str + path: str + value?: str | float | bool | any | [any] + target?: As3OneOf3Items0PatchBodyItems1Target + +schema Constants: + r""" + Named values for (re-)use by declaration objects + + Attributes + ---------- + class : "Constants", required, default is "Constants" + """ + + class: "Constants" = "Constants" + [...str]: bool | int | float | str | [any] | any + +schema Controls: + r""" + Optional controls configuration + + Attributes + ---------- + archiveId : float | str, optional + Read-only property present when you GET a declaration from configuration system. Archived versions of declaration are identified by a combination of 'id' and 'archiveId' + archiveTimestamp : str, optional + Read-only property present when you GET a declaration from configuration system. Indicates when this version (see archiveId) of declaration was archived + class : "Controls", required, default is "Controls" + dryRun : bool, optional, default is False + Boolean that indicates if this declaration will be run as a dry-run. If true, the declaration will NOT make any changes to the system, but will respond with whether or not it would. + fortune : bool, optional + If true, BIG-IP AS3 will activate Zoltar mode and read you your fortune + logLevel : "emergency" | "alert" | "critical" | "error" | "warning" | "notice" | "info" | "debug", optional, default is "error" + Controls the amount of detail in logs produced while configuring this Tenant (default is whole-declaration Controls/logLevel value) + trace : bool, optional, default is False + If true, BIG-IP AS3 creates a detailed trace of the configuration process for this Tenant for subsequent analysis (default is whole-declaration Controls/trace value). Warning: trace files may contain sensitive configuration data + traceResponse : bool, optional, default is False + If true, the response will contain the trace files + userAgent : str, optional + User Agent information to include in TEEM report + """ + + archiveId?: float | str + archiveTimestamp?: str + class: "Controls" = "Controls" + dryRun?: bool = False + fortune?: bool + logLevel?: "emergency" | "alert" | "critical" | "error" | "warning" | "notice" | "info" | "debug" = "error" + trace?: bool = False + traceResponse?: bool = False + userAgent?: str + +schema Tenant: + r""" + Declares a Tenant + + Attributes + ---------- + class : "Tenant", required, default is "Tenant" + label : str, optional + Optional friendly name for this object. Allows 0-64 chars, excluding a few likely to cause trouble with string searching, JS, TCL, or HTML + remark : str, optional + Arbitrary (brief) text pertaining to this object. Allows 0-64 chars, excluding only control characters, double-quote, and backslash. This is permissive enough that you should worry about XSS attacks + verifiers : As3OneOf4Items0AdditionalPropertiesVerifiers, optional + Data (in 'key':'value' properties) used to verify automated tests. Ordinary declarations do not need this + enable : bool, optional, default is True + Tenant handles traffic only when enabled (default) + defaultRouteDomain : int, optional, default is 0 + Using the route-domain ID, this property selects the default route domain for IP traffic to and from this Tenant's application resources (note: affects declared IP addresses which do not include a %RD route-domain specifier). You must choose an existing route domain--this option cannot create one. Route domain 0 (default) is always available + Shared : ApplicationShared, optional + Special application Shared holds objects other applications can share + constants : Constants, optional + Named values for (re-)use by declaration objects + controls : Controls, optional + Optional controls configuration + optimisticLockKey : str, optional, default is "" + When you deploy a declaration with a non-empty 'key' value here, that activates an optimistic lock on changes to this Tenant. If the key in your declaration does not match the key BIG-IP AS3 computes for the most-recent previous declaration, then BIG-IP AS3 will NOT update this Tenant and will return an error code. To use optimistic locking, first retrieve a declaration using option 'showHash=true' to get the current per-Tenant keys. Make any changes you desire, then deploy your updated declaration. Deployment of each Tenant with a key will succeed only if that Tenant has not been modified since the time you retrieved the declaration. (To overwrite all previous changes to a Tenant simply do NOT include any opportunistic-lock key for that Tenant when you deploy a declaration. That is the default.) Note that only keys computed by BIG-IP AS3 may be used here-- you cannot generate your own. If 'showHash=true' is used on a POST then the optimisticLockKey will be shown as a part of the output (This helps to avoid the need to do a GET request). + """ + + class: "Tenant" = "Tenant" + label?: str + remark?: str + verifiers?: As3OneOf4Items0AdditionalPropertiesVerifiers + enable?: bool = True + defaultRouteDomain?: int = 0 + Shared?: ApplicationShared + constants?: Constants + controls?: Controls + optimisticLockKey?: str = "" + [...str]: Application + + check: + len(label) <= 64 if label + len(label) >= 0 if label + regex.match(label, r"^[^\x00-\x1f\x22#&*<>?\x5b-\x5d`\x7f]*$") if label + len(remark) <= 64 if remark + len(remark) >= 0 if remark + regex.match(remark, r"^[^\x00-\x1f\x22\x5c\x7f]*$") if remark + defaultRouteDomain <= 65535 if defaultRouteDomain + defaultRouteDomain >= 0 if defaultRouteDomain + len(optimisticLockKey) <= 128 if optimisticLockKey + diff --git a/pkg/tools/gen/testdata/jsonschema/as3/input.json b/pkg/tools/gen/testdata/jsonschema/as3/input.json new file mode 100644 index 00000000..3a004a26 --- /dev/null +++ b/pkg/tools/gen/testdata/jsonschema/as3/input.json @@ -0,0 +1,37541 @@ +{ + "$id": "https://example.com/schemas/as3.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "AS3 API Request", + "description": "BIG-IP AS3 API request body", + "oneOf": [ + { + "$ref": "#/definitions/AS3" + }, + { + "$ref": "#/definitions/ADC" + }, + { + "$ref": "#/definitions/AS3_Patch_Body" + }, + { + "$ref": "#/definitions/AS3_Array" + }, + { + "$ref": "#/definitions/ADC_Array" + } + ], + "definitions": { + "ADC": { + "title": "ADC", + "description": "A declarative configuration for an ADC such as F5 BIG-IP", + "type": "object", + "properties": { + "class": { + "title": "Class", + "description": "Indicates this JSON document is an ADC declaration", + "type": "string", + "const": "ADC" + }, + "$schema": { + "description": "URL of schema against which to validate. Used by validation in your local environment only (via Visual Studio Code, for example)", + "type": "string", + "format": "uri" + }, + "updateMode": { + "title": "Update mode", + "description": "When set to 'selective' (default) BIG-IP AS3 does not modify Tenants not referenced in the declaration. Otherwise ('complete') BIG-IP AS3 removes unreferenced Tenants.", + "type": "string", + "enum": [ + "complete", + "selective" + ], + "default": "selective" + }, + "schemaVersion": { + "title": "Schema version", + "description": "Version of ADC Declaration schema this declaration uses", + "type": "string", + "anyOf": [ + { + "description": "Any version of AS3.", + "pattern": "^3[.]([0-9]|[1234][0-9]|5[0])($|[.][0-9]+$)" + }, + { + "description": "The current version of AS3.", + "const": "3.50.0" + } + ] + }, + "id": { + "title": "Declaration ID", + "description": "Unique identifier for this declaration (max 255 printable chars with no spaces, quotation marks, angle brackets, nor backslashes)", + "type": "string", + "pattern": "^[^\\x00-\\x20\\x22'<>\\x5c^`|\\x7f]*$", + "minLength": 0, + "maxLength": 255 + }, + "target": { + "title": "Target Device", + "description": "Trusted target for config when configuring with BIG-IQ", + "type": "object", + "properties": { + "hostname": { + "title": "Host Name", + "description": "Host name of managed device to be configured", + "type": "string" + }, + "address": { + "title": "IP Address", + "description": "IP address of managed device to be configured", + "type": "string", + "format": "f5ip" + } + }, + "maxProperties": 1 + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "constants": { + "title": "Constants", + "description": "Declaration metadata and/or named values for (re-)use by declaration objects", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Constants", + "default": "Constants" + }, + "version": { + "title": "Declaration version", + "description": "Version number of declaration; update when you change contents but not ID (optional but recommended)", + "type": [ + "number", + "string" + ] + }, + "timestamp": { + "title": "Declaration timestamp", + "description": "Date+time (this version of) declaration was created (optional but recommended)", + "type": "string", + "format": "date-time" + } + }, + "additionalProperties": { + "type": [ + "boolean", + "integer", + "number", + "string", + "array", + "object" + ], + "if": { + "type": "object", + "required": [ + "protected", + "ciphertext" + ] + }, + "then": { + "properties": { + "allowReuse": { + "title": "Allow reuse", + "description": "If true (default), different declaration objects may reuse a cryptogram, WHICH MAY POSE A SECURITY RISK!", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false, + "allOf": [ + { + "$ref": "#/definitions/JWE" + } + ] + } + }, + "propertyNames": { + "pattern": "^[A-Za-z][0-9A-Za-z_]*$", + "maxLength": 64 + } + }, + "Common": { + "title": "Common tenant", + "description": "Special tenant Common holds objects other tenants can share", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Tenant", + "default": "Tenant" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "verifiers": { + "title": "Verifiers", + "description": "Data (in 'key':'value' properties) used to verify automated tests. Ordinary declarations do not need this", + "type": "object" + }, + "enable": { + "title": "Enable", + "description": "If declared, you must enable the Common tenant", + "type": "boolean", + "const": true + }, + "Shared": { + "$ref": "#/definitions/Application_Shared" + }, + "constants": { + "$ref": "#/definitions/Constants" + }, + "controls": { + "$ref": "#/definitions/Controls" + }, + "optimisticLockKey": { + "title": "Optimistic lock key", + "description": "When you deploy a declaration with a non-empty 'key' value here, that activates an optimistic lock on changes to this Tenant. If the key in your declaration does not match the key BIG-IP AS3 computes for the most-recent previous declaration, then BIG-IP AS3 will NOT update this Tenant and will return an error code. To use optimistic locking, first retrieve a declaration using option 'showHash=true' to get the current per-Tenant keys. Make any changes you desire, then deploy your updated declaration. Deployment of each Tenant with a key will succeed only if that Tenant has not been modified since the time you retrieved the declaration. (To overwrite all previous changes to a Tenant simply do NOT include any opportunistic-lock key for that Tenant when you deploy a declaration. That is the default.) Note that only keys computed by BIG-IP AS3 may be used here-- you cannot generate your own. If 'showHash=true' is used on a POST then the optimisticLockKey will be shown as a part of the output (This helps to avoid the need to do a GET request).", + "type": "string", + "maxLength": 128, + "default": "" + } + }, + "additionalProperties": false + }, + "controls": { + "$ref": "#/definitions/Controls" + }, + "scratch": { + "title": "f5 scratch", + "description": "Holds some system data during declaration processing", + "type": "string", + "readOnly": true + } + }, + "additionalProperties": { + "$ref": "#/definitions/Tenant" + }, + "propertyNames": { + "oneOf": [ + { + "pattern": "^[A-Za-z][0-9A-Za-z_.-]*$", + "maxLength": 190 + }, + { + "enum": [ + "$schema" + ] + } + ] + }, + "required": [ + "class", + "schemaVersion" + ] + }, + "ADC_Array": { + "title": "Declaration Array", + "description": "An array of declarations (ADC) to process", + "type": "array", + "items": { + "$ref": "#/definitions/ADC" + }, + "minItems": 1 + }, + "AS3_Patch_Item": { + "type": "object", + "title": "AS3 PATCH item", + "description": "Defines a PATCH operation to perform", + "properties": { + "op": { + "title": "Op", + "description": "Operation to perform", + "type": "string" + }, + "path": { + "title": "Path", + "description": "Declaration Object Path relative to URI on which the operation is to be performed", + "type": "string" + }, + "value": { + "title": "Value", + "description": "Value to use for the operation", + "type": [ + "string", + "number", + "boolean", + "object", + "array" + ] + }, + "target": { + "title": "Optional Target Device", + "description": "Optional target device (only applies when configuring with certain hosts such as BIG-IQ)", + "type": "object", + "properties": { + "hostname": { + "title": "Host Name", + "description": "Host name of managed device to be configured", + "type": "string" + }, + "address": { + "title": "IP Address", + "description": "IP address of managed device to be configured", + "type": "string", + "format": "f5ip" + } + }, + "maxProperties": 1 + } + }, + "required": [ + "op", + "path" + ] + }, + "AS3_Patch_Body": { + "title": "AS3 PATCH Body", + "description": "An array containing the patch operations to apply on the declaration", + "type": "array", + "items": { + "$ref": "#/definitions/AS3_Patch_Item" + }, + "$comment": "Refer to docs for additional information on patch request syntax", + "minItems": 1 + }, + "AS3": { + "title": "AS3 Request", + "description": "A body with AS3 Class", + "type": "object", + "properties": { + "class": { + "title": "Class", + "description": "Indicates a BIG-IP AS3 request", + "type": "string", + "const": "AS3" + }, + "$schema": { + "description": "URL of schema against which to validate. Used by validation in your local environment only (via Visual Studio Code, for example)", + "type": "string", + "format": "uri" + }, + "action": { + "title": "Action", + "description": "Indicates desired action: 'deploy' means deploy the included declaration to targetHost; 'dry-run' does NOT deploy the declaration but does do everything short of changing targetHost's configuration; 'patch' modifies the declaration based on the provided set of commands and then deploys the updated declaration; 'redeploy' causes an old declaration from targetHost's declaration history to be re-deployed (property redeployAge (default 0) selects the old declaration, and note redeployUpdateMode as well); 'retrieve' returns a copy of a previously-deployed declaration; 'remove' deletes the declaration or declaration component.", + "type": "string", + "enum": [ + "deploy", + "dry-run", + "patch", + "redeploy", + "retrieve", + "remove" + ], + "default": "deploy" + }, + "redeployAge": { + "title": "Redeploy age", + "description": "For action=redeploy (only), chooses which old declaration to deploy again. Value 0 (default) means re-deploy the most recent declaration (the one which set the current configuration of targetHost-- useful to erase changes introduced by manual configuration). Value 1 means re-deploy the declaration prior to the most-recent one, etc. Note that whenever re-deploying an old declaration causes ADC configuration changes, that declaration becomes the current declaration (age 0) and the ages of all other declarations in the history increase (0 => 1, 1 => 2, u.s.w.)", + "type": "integer", + "minimum": 0, + "maximum": 15, + "default": 0 + }, + "redeployUpdateMode": { + "title": "Redeploy update mode", + "description": "Value 'original' (default) means re-deploy the chosen declaration using its original updateMode (which if not explicitly specified in that declaration will default to 'selective'). Otherwise, forces the updateMode for re-deployment to 'complete' or 'selective' as specified. Remember, 'selective' updates do not affect Tenants not explicitly named. To simply roll-back the targetHost configuration to the state it had immediately after deploying some earlier declaration, put 'complete' here (that will remove Tenants created later than the redeployAge declaration). To use action=redeploy as a simple roll-back facility, always deploy (updateMode=)complete declarations.", + "type": "string", + "enum": [ + "original", + "complete", + "selective" + ], + "default": "original" + }, + "persist": { + "title": "Persist on device", + "description": "When true (default) make the whole working configuration persistent on targetHost after (and only if) this request deploys any changes. If false, leave the working configuration in memory only (if targetHost restart, you may lose the configuration from memory)", + "type": "boolean", + "default": true + }, + "syncToGroup": { + "title": "Sync to device group", + "description": "Name (like /Common/my_dg) of the config-sync group TO which the system should synchronize the targetHost configuration after (and only if) this request deploys any changes. When empty (default) this request will not affect config-sync at all. Leave undefined or empty whenever you use auto-sync or manage configuration synchronization separately", + "type": "string", + "default": "" + }, + "historyLimit": { + "title": "History limit", + "description": "This value (default 4) limits the number of previously-deployed declarations saved on targetHost for review using GET and for use with POST action=redeploy and redeployAge=N. The limit includes the current and immediately-previous declarations so may not be less than two", + "type": "number", + "minimum": 2, + "maximum": 15, + "default": 4 + }, + "logLevel": { + "title": "Log level", + "description": "Controls level of detail in logs using RFC 5424 severity levels (default is 'warning'). Portions of declaration may use different logLevels", + "type": "string", + "enum": [ + "emergency", + "alert", + "critical", + "error", + "warning", + "notice", + "info", + "debug" + ], + "default": "warning" + }, + "trace": { + "title": "Trace", + "description": "If true, BIG-IP AS3 creates a detailed trace of the configuration process for subsequent analysis (default false). May be overridden on a per-Declaration and/or per-Tenant basis. Warning: trace files may contain sensitive configuration data", + "type": "boolean", + "default": false + }, + "retrieveAge": { + "title": "Retrieve age", + "description": "Use this property with action=retrieve. You can usually get a copy of the declaration most recently deployed to targetHost, and often copies of previously-deployed declarations are also available. Value 0 (default) means 'the last-deployed declaration,' value 1 means 'the declaration previous to 0' and so-forth. To get a list of available declarations, set value 'list'", + "oneOf": [ + { + "type": "integer", + "minimum": 0 + }, + { + "type": "string", + "const": "list" + } + ], + "default": 0 + }, + "targetHost": { + "title": "Target host", + "description": "Hostname or IP address of ADC to which request applies (default localhost)", + "type": "string", + "anyOf": [ + { + "format": "hostname" + }, + { + "format": "f5ip" + } + ], + "default": "localhost" + }, + "targetPort": { + "title": "Target port", + "description": "TCP port number of management service on targetHost; default 0 means auto-discover", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "targetUsername": { + "title": "Target username", + "description": "Username of principal authorized to modify configuration of targetHost (may not include the character ':'). NOTE: this is generally not required to configure 'localhost' because client authentication and authorization precede invocation of BIG-IP AS3. It is also not required for any targetHost if you populate targetTokens", + "type": "string", + "pattern": "^[^:]*$", + "maxLength": 254 + }, + "targetPassphrase": { + "title": "Target passphrase", + "description": "Passphrase for targetUsername account. This is generally not required to configure 'localhost' and is not required when you populate targetTokens", + "type": "string", + "maxLength": 254 + }, + "targetTokens": { + "title": "Target tokens", + "description": "One or more HTTP headers (each a property, like 'X-F5-Auth-Token': 'ABC123') you want to send with queries to the targetHost management service as authentication/authorization tokens", + "type": "object", + "patternProperties": { + "^[^\\x00-\\x20:\\x7f-\\xff]{1,254}$": { + "title": "HTTP header", + "type": "string", + "pattern": "^[^\\x00-\\x1f\\x7f-\\xff]*$", + "maxLength": 8192 + } + }, + "additionalProperties": false + }, + "targetTimeout": { + "title": "Target timeout", + "description": "Maximum delay allowed while communicating with targetHost device (seconds, default 150)", + "type": "integer", + "minimum": 1, + "maximum": 900, + "default": 150 + }, + "resourceTimeout": { + "title": "Resource timeout", + "description": "Maximum delay allowed while communicating with URL resources (seconds, default 5)", + "type": "integer", + "minimum": 1, + "maximum": 900, + "default": 5 + }, + "declaration": { + "$ref": "#/definitions/ADC" + }, + "patchBody": { + "$ref": "#/definitions/AS3_Patch_Body" + } + }, + "dependencies": { + "declaration": { + "not": { + "required": [ + "patchBody" + ] + } + }, + "patchBody": { + "not": { + "required": [ + "declaration" + ] + } + } + }, + "required": [ + "class" + ] + }, + "AS3_Array": { + "title": "AS3 Array", + "description": "An array of BIG-IP AS3 requests to process", + "type": "array", + "items": { + "$ref": "#/definitions/AS3" + }, + "minItems": 1 + }, + "Include": { + "title": "Include", + "description": "Defines inclusion of one part of the schema into another", + "type": "object", + "properties": { + "include": { + "description": "Keyword to allow for inclusion of one part of the declaration into another", + "oneOf": [ + { + "type": "string", + "format": "f5pointer" + }, + { + "type": "array", + "items": { + "type": "string", + "format": "f5pointer" + } + } + ], + "f5PostProcess": { + "tag": "include", + "data": "object" + } + } + } + }, + "Tenant": { + "title": "Tenant", + "description": "Declares a Tenant", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Tenant" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "verifiers": { + "title": "Verifiers", + "description": "Data (in 'key':'value' properties) used to verify automated tests. Ordinary declarations do not need this", + "type": "object" + }, + "enable": { + "title": "Enable", + "description": "Tenant handles traffic only when enabled (default)", + "type": "boolean", + "default": true + }, + "defaultRouteDomain": { + "title": "Default route domain", + "description": "Using the route-domain ID, this property selects the default route domain for IP traffic to and from this Tenant's application resources (note: affects declared IP addresses which do not include a %RD route-domain specifier). You must choose an existing route domain--this option cannot create one. Route domain 0 (default) is always available", + "$comment": "TMSH forces this value to be an integer", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query net route-domain" + ] + } + }, + "Shared": { + "$ref": "#/definitions/Application_Shared" + }, + "constants": { + "$ref": "#/definitions/Constants" + }, + "controls": { + "$ref": "#/definitions/Controls" + }, + "optimisticLockKey": { + "title": "Optimistic lock key", + "description": "When you deploy a declaration with a non-empty 'key' value here, that activates an optimistic lock on changes to this Tenant. If the key in your declaration does not match the key BIG-IP AS3 computes for the most-recent previous declaration, then BIG-IP AS3 will NOT update this Tenant and will return an error code. To use optimistic locking, first retrieve a declaration using option 'showHash=true' to get the current per-Tenant keys. Make any changes you desire, then deploy your updated declaration. Deployment of each Tenant with a key will succeed only if that Tenant has not been modified since the time you retrieved the declaration. (To overwrite all previous changes to a Tenant simply do NOT include any opportunistic-lock key for that Tenant when you deploy a declaration. That is the default.) Note that only keys computed by BIG-IP AS3 may be used here-- you cannot generate your own. If 'showHash=true' is used on a POST then the optimisticLockKey will be shown as a part of the output (This helps to avoid the need to do a GET request).", + "type": "string", + "maxLength": 128, + "default": "" + } + }, + "additionalProperties": { + "$ref": "#/definitions/Application" + }, + "propertyNames": { + "pattern": "^[A-Za-z][0-9A-Za-z_.-]*$", + "maxLength": 190 + }, + "required": [ + "class" + ] + }, + "Application_Shared": { + "title": "Shared Application", + "description": "Special application Shared holds objects other applications can share", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Application" + }, + "template": { + "title": "Template Name", + "description": "Shared Application template is always generic", + "type": "string", + "const": "shared" + }, + "enable": { + "title": "Enable", + "description": "If declared, you must enable the Shared Application", + "type": "boolean", + "const": true, + "default": true + } + }, + "allOf": [ + { + "$ref": "#/definitions/Application" + } + ], + "required": [ + "class", + "template" + ] + }, + "Application": { + "title": "Application", + "description": "Application declaration main schema", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Application" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "template": { + "title": "Template Name", + "description": "Each application type has certain required and default elements and selects appropriate setup of various ADC/Security features", + "type": "string", + "default": "generic" + }, + "schemaOverlay": { + "title": "Schema Overlay", + "description": "BIG-IQ name for a supplemental validation schema is applied to the Application class definition before the main BIG-IP AS3 schema", + "type": "string" + }, + "enable": { + "title": "Enable", + "description": "Application handles traffic only when enabled (default)", + "type": "boolean", + "default": true + }, + "constants": { + "$ref": "#/definitions/Constants" + }, + "serviceMain": { + "description": "Primary service of the application" + } + }, + "additionalProperties": { + "properties": { + "class": { + "type": "string", + "enum": [ + "Service_HTTP", + "Service_HTTPS", + "Service_TCP", + "Service_UDP", + "Service_SCTP", + "Service_L4", + "Service_Generic", + "Service_Forwarding", + "Service_Address", + "WAF_Policy", + "Persist", + "Pool", + "Address_Discovery", + "TLS_Server", + "TLS_Client", + "FIX_Profile", + "RTSP_Profile", + "SIP_Profile", + "Statistics_Profile", + "TFTP_Profile", + "FTP_Profile", + "HTML_Rule", + "HTML_Profile", + "WebSocket_Profile", + "Multiplex_Profile", + "SOCKS_Profile", + "TCP_Profile", + "Classification_Profile", + "Radius_Profile", + "IP_Other_Profile", + "Rewrite_Profile", + "Stream_Profile", + "Access_Profile", + "Per_Request_Access_Policy", + "ICAP_Profile", + "Adapt_Profile", + "Cipher_Rule", + "Cipher_Group", + "iFile", + "Firewall_Address_List", + "Firewall_Port_List", + "Firewall_Rule_List", + "Firewall_Policy", + "NAT_Policy", + "NAT_Source_Translation", + "Protocol_Inspection_Profile", + "SSH_Proxy_Profile", + "Data_Group", + "DNS_Cache", + "DNS_Profile", + "DNS_TSIG_Key", + "DNS_Zone", + "DNS_Nameserver", + "DOS_Profile", + "GSLB_Domain", + "GSLB_iRule", + "GSLB_Monitor", + "GSLB_Pool", + "GSLB_Server", + "GSLB_Data_Center", + "GSLB_Prober_Pool", + "GSLB_Topology_Records", + "GSLB_Topology_Region", + "ALG_Log_Profile", + "Security_Log_Profile", + "Traffic_Log_Profile", + "Endpoint_Policy", + "Endpoint_Strategy", + "Bandwidth_Control_Policy", + "Idle_Timeout_Policy", + "Net_Address_List", + "Net_Port_List", + "Enforcement_Policy", + "Enforcement_Diameter_Endpoint_Profile", + "Enforcement_iRule", + "Enforcement_Radius_AAA_Profile", + "Enforcement_Profile", + "Enforcement_Subscriber_Management_Profile", + "Enforcement_Listener", + "Enforcement_Interception_Endpoint", + "Enforcement_Format_Script", + "Enforcement_Forwarding_Endpoint", + "Enforcement_Service_Chain_Endpoint", + "Analytics_Profile", + "Analytics_TCP_Profile", + "CA_Bundle", + "Certificate", + "Certificate_Validator_OCSP", + "DNS_Logging_Profile", + "HTTP_Acceleration_Profile", + "HTTP_Compress", + "HTTP_Profile", + "HTTP2_Profile", + "iRule", + "L4_Profile", + "Log_Destination", + "Log_Publisher", + "Monitor", + "SNAT_Pool", + "SNAT_Translation", + "UDP_Profile" + ] + } + }, + "allOf": [ + { + "if": { + "properties": { + "class": { + "const": "Service_HTTP" + } + } + }, + "then": { + "$ref": "#/definitions/Service_HTTP" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Service_HTTPS" + } + } + }, + "then": { + "$ref": "#/definitions/Service_HTTPS" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Service_TCP" + } + } + }, + "then": { + "$ref": "#/definitions/Service_TCP" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Service_UDP" + } + } + }, + "then": { + "$ref": "#/definitions/Service_UDP" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Service_SCTP" + } + } + }, + "then": { + "$ref": "#/definitions/Service_SCTP" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Service_L4" + } + } + }, + "then": { + "$ref": "#/definitions/Service_L4" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Service_Generic" + } + } + }, + "then": { + "$ref": "#/definitions/Service_Generic" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Service_Forwarding" + } + } + }, + "then": { + "$ref": "#/definitions/Service_Forwarding" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Service_Address" + } + } + }, + "then": { + "$ref": "#/definitions/Service_Address" + } + }, + { + "if": { + "properties": { + "class": { + "const": "WAF_Policy" + } + } + }, + "then": { + "$ref": "#/definitions/WAF_Policy" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Persist" + } + } + }, + "then": { + "$ref": "#/definitions/Persist" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Pool" + } + } + }, + "then": { + "$ref": "#/definitions/Pool" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Address_Discovery" + } + } + }, + "then": { + "$ref": "#/definitions/Address_Discovery" + } + }, + { + "if": { + "properties": { + "class": { + "const": "TLS_Server" + } + } + }, + "then": { + "$ref": "#/definitions/TLS_Server" + } + }, + { + "if": { + "properties": { + "class": { + "const": "TLS_Client" + } + } + }, + "then": { + "$ref": "#/definitions/TLS_Client" + } + }, + { + "if": { + "properties": { + "class": { + "const": "FIX_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/FIX_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "RTSP_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/RTSP_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "SIP_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/SIP_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Statistics_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/Statistics_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "TFTP_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/TFTP_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "FTP_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/FTP_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "HTML_Rule" + } + } + }, + "then": { + "$ref": "#/definitions/HTML_Rule" + } + }, + { + "if": { + "properties": { + "class": { + "const": "HTML_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/HTML_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "WebSocket_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/WebSocket_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Multiplex_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/Multiplex_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "SOCKS_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/SOCKS_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "TCP_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/TCP_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Classification_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/Classification_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Radius_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/Radius_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "IP_Other_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/IP_Other_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Rewrite_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/Rewrite_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Stream_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/Stream_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Access_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/Access_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Per_Request_Access_Policy" + } + } + }, + "then": { + "$ref": "#/definitions/Per_Request_Access_Policy" + } + }, + { + "if": { + "properties": { + "class": { + "const": "ICAP_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/ICAP_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Adapt_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/Adapt_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Cipher_Rule" + } + } + }, + "then": { + "$ref": "#/definitions/Cipher_Rule" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Cipher_Group" + } + } + }, + "then": { + "$ref": "#/definitions/Cipher_Group" + } + }, + { + "if": { + "properties": { + "class": { + "const": "iFile" + } + } + }, + "then": { + "$ref": "#/definitions/iFile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Firewall_Address_List" + } + } + }, + "then": { + "$ref": "#/definitions/Firewall_Address_List" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Firewall_Port_List" + } + } + }, + "then": { + "$ref": "#/definitions/Firewall_Port_List" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Firewall_Rule_List" + } + } + }, + "then": { + "$ref": "#/definitions/Firewall_Rule_List" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Firewall_Policy" + } + } + }, + "then": { + "$ref": "#/definitions/Firewall_Policy" + } + }, + { + "if": { + "properties": { + "class": { + "const": "NAT_Policy" + } + } + }, + "then": { + "$ref": "#/definitions/NAT_Policy" + } + }, + { + "if": { + "properties": { + "class": { + "const": "NAT_Source_Translation" + } + } + }, + "then": { + "$ref": "#/definitions/NAT_Source_Translation" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Protocol_Inspection_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/Protocol_Inspection_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "SSH_Proxy_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/SSH_Proxy_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Data_Group" + } + } + }, + "then": { + "$ref": "#/definitions/Data_Group" + } + }, + { + "if": { + "properties": { + "class": { + "const": "DNS_Cache" + } + } + }, + "then": { + "$ref": "#/definitions/DNS_Cache" + } + }, + { + "if": { + "properties": { + "class": { + "const": "DNS_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/DNS_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "DNS_TSIG_Key" + } + } + }, + "then": { + "$ref": "#/definitions/DNS_TSIG_Key" + } + }, + { + "if": { + "properties": { + "class": { + "const": "DNS_Zone" + } + } + }, + "then": { + "$ref": "#/definitions/DNS_Zone" + } + }, + { + "if": { + "properties": { + "class": { + "const": "DNS_Nameserver" + } + } + }, + "then": { + "$ref": "#/definitions/DNS_Nameserver" + } + }, + { + "if": { + "properties": { + "class": { + "const": "DOS_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/DOS_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "GSLB_Domain" + } + } + }, + "then": { + "$ref": "#/definitions/GSLB_Domain" + } + }, + { + "if": { + "properties": { + "class": { + "const": "GSLB_iRule" + } + } + }, + "then": { + "$ref": "#/definitions/GSLB_iRule" + } + }, + { + "if": { + "properties": { + "class": { + "const": "GSLB_Monitor" + } + } + }, + "then": { + "$ref": "#/definitions/GSLB_Monitor" + } + }, + { + "if": { + "properties": { + "class": { + "const": "GSLB_Pool" + } + } + }, + "then": { + "$ref": "#/definitions/GSLB_Pool" + } + }, + { + "if": { + "properties": { + "class": { + "const": "GSLB_Server" + } + } + }, + "then": { + "$ref": "#/definitions/GSLB_Server" + } + }, + { + "if": { + "properties": { + "class": { + "const": "GSLB_Data_Center" + } + } + }, + "then": { + "$ref": "#/definitions/GSLB_Data_Center" + } + }, + { + "if": { + "properties": { + "class": { + "const": "GSLB_Prober_Pool" + } + } + }, + "then": { + "$ref": "#/definitions/GSLB_Prober_Pool" + } + }, + { + "if": { + "properties": { + "class": { + "const": "GSLB_Topology_Records" + } + } + }, + "then": { + "$ref": "#/definitions/GSLB_Topology_Records" + } + }, + { + "if": { + "properties": { + "class": { + "const": "GSLB_Topology_Region" + } + } + }, + "then": { + "$ref": "#/definitions/GSLB_Topology_Region" + } + }, + { + "if": { + "properties": { + "class": { + "const": "ALG_Log_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/ALG_Log_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Security_Log_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/Security_Log_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Traffic_Log_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/Traffic_Log_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Endpoint_Policy" + } + } + }, + "then": { + "$ref": "#/definitions/Endpoint_Policy" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Endpoint_Strategy" + } + } + }, + "then": { + "$ref": "#/definitions/Endpoint_Strategy" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Bandwidth_Control_Policy" + } + } + }, + "then": { + "$ref": "#/definitions/Bandwidth_Control_Policy" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Idle_Timeout_Policy" + } + } + }, + "then": { + "$ref": "#/definitions/Idle_Timeout_Policy" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Net_Address_List" + } + } + }, + "then": { + "$ref": "#/definitions/Net_Address_List" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Net_Port_List" + } + } + }, + "then": { + "$ref": "#/definitions/Net_Port_List" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Enforcement_Policy" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Policy" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Enforcement_Diameter_Endpoint_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Diameter_Endpoint_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Enforcement_iRule" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_iRule" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Enforcement_Radius_AAA_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Radius_AAA_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Enforcement_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Enforcement_Subscriber_Management_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Subscriber_Management_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Enforcement_Listener" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Listener" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Enforcement_Interception_Endpoint" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Interception_Endpoint" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Enforcement_Format_Script" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Format_Script" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Enforcement_Forwarding_Endpoint" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Forwarding_Endpoint" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Enforcement_Service_Chain_Endpoint" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Service_Chain_Endpoint" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Analytics_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/Analytics_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Analytics_TCP_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/Analytics_TCP_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "CA_Bundle" + } + } + }, + "then": { + "$ref": "#/definitions/CA_Bundle" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Certificate" + } + } + }, + "then": { + "$ref": "#/definitions/Certificate" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Certificate_Validator_OCSP" + } + } + }, + "then": { + "$ref": "#/definitions/Certificate_Validator_OCSP" + } + }, + { + "if": { + "properties": { + "class": { + "const": "DNS_Logging_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/DNS_Logging_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "HTTP_Acceleration_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/HTTP_Acceleration_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "HTTP_Compress" + } + } + }, + "then": { + "$ref": "#/definitions/HTTP_Compress" + } + }, + { + "if": { + "properties": { + "class": { + "const": "HTTP_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/HTTP_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "HTTP2_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/HTTP2_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "iRule" + } + } + }, + "then": { + "$ref": "#/definitions/IRule" + } + }, + { + "if": { + "properties": { + "class": { + "const": "L4_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/L4_Profile" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Log_Destination" + } + } + }, + "then": { + "$ref": "#/definitions/Log_Destination" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Log_Publisher" + } + } + }, + "then": { + "$ref": "#/definitions/Log_Publisher" + } + }, + { + "if": { + "properties": { + "class": { + "const": "Monitor" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor" + } + }, + { + "if": { + "properties": { + "class": { + "const": "SNAT_Pool" + } + } + }, + "then": { + "$ref": "#/definitions/SNAT_Pool" + } + }, + { + "if": { + "properties": { + "class": { + "const": "SNAT_Translation" + } + } + }, + "then": { + "$ref": "#/definitions/SNAT_Translation" + } + }, + { + "if": { + "properties": { + "class": { + "const": "UDP_Profile" + } + } + }, + "then": { + "$ref": "#/definitions/UDP_Profile" + } + } + ] + }, + "propertyNames": { + "pattern": "^[A-Za-z]([0-9A-Za-z_.-]{0,188}[0-9A-Za-z_.])?$", + "maxLength": 190 + }, + "allOf": [ + { + "if": { + "required": [ + "template" + ], + "properties": { + "template": { + "const": "https" + } + } + }, + "then": { + "$ref": "#/definitions/Template_https" + } + }, + { + "if": { + "required": [ + "template" + ], + "properties": { + "template": { + "const": "http" + } + } + }, + "then": { + "$ref": "#/definitions/Template_http" + } + }, + { + "if": { + "required": [ + "template" + ], + "properties": { + "template": { + "const": "tcp" + } + } + }, + "then": { + "$ref": "#/definitions/Template_tcp" + } + }, + { + "if": { + "required": [ + "template" + ], + "properties": { + "template": { + "const": "udp" + } + } + }, + "then": { + "$ref": "#/definitions/Template_udp" + } + }, + { + "if": { + "required": [ + "template" + ], + "properties": { + "template": { + "const": "sctp" + } + } + }, + "then": { + "$ref": "#/definitions/Template_sctp" + } + }, + { + "if": { + "required": [ + "template" + ], + "properties": { + "template": { + "const": "l4" + } + } + }, + "then": { + "$ref": "#/definitions/Template_l4" + } + }, + { + "if": { + "required": [ + "template" + ], + "properties": { + "template": { + "const": "generic" + } + } + }, + "then": { + "$ref": "#/definitions/Template_generic" + } + } + ], + "required": [ + "class" + ] + }, + "Template_https": { + "title": "HTTPS application", + "description": "Declares an HTTPS application", + "type": "object", + "properties": { + "serviceMain": { + "$ref": "#/definitions/Service_HTTPS" + } + }, + "required": [ + "serviceMain" + ] + }, + "Template_http": { + "title": "HTTP application", + "description": "Declares an HTTP application", + "type": "object", + "properties": { + "serviceMain": { + "$ref": "#/definitions/Service_HTTP" + } + }, + "required": [ + "serviceMain" + ] + }, + "Template_tcp": { + "title": "TCP application", + "description": "Declares a TCP application", + "type": "object", + "properties": { + "serviceMain": { + "$ref": "#/definitions/Service_TCP" + } + }, + "required": [ + "serviceMain" + ] + }, + "Template_udp": { + "title": "UDP application", + "description": "Declares a UDP application", + "type": "object", + "properties": { + "serviceMain": { + "$ref": "#/definitions/Service_UDP" + } + }, + "required": [ + "serviceMain" + ] + }, + "Template_sctp": { + "title": "SCTP application", + "description": "Declares a SCTP application", + "type": "object", + "properties": { + "serviceMain": { + "$ref": "#/definitions/Service_SCTP" + } + }, + "required": [ + "serviceMain" + ] + }, + "Template_l4": { + "title": "L4 application", + "description": "Declares a L4 application", + "type": "object", + "properties": { + "serviceMain": { + "$ref": "#/definitions/Service_L4" + } + }, + "required": [ + "serviceMain" + ] + }, + "Template_generic": { + "title": "Generic application", + "description": "Declares a generic application", + "type": "object", + "properties": { + "template": { + "title": "Template Name", + "description": "In addition to 'generic' and 'shared' other values may appear here for extensibility", + "type": "string" + }, + "serviceMain": { + "$ref": "#/definitions/Service_Generic" + } + } + }, + "Service_HTTP": { + "title": "Service_HTTP", + "description": "HTTP virtual server", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Service_HTTP" + }, + "virtualPort": { + "title": "Virtual server TCP port", + "description": "Default 80 is well-known HTTP port. Accepts either an integer or a reference to a Firewall_Port_List that contains the ports on which to listen. Firewall_Port_List is only supported on BIG-IP 14.1 and later. If a Firewall_Port_List is provided, BIG-IP AS3 will create a traffic-matching-criteria for the virtual.", + "oneOf": [ + { + "type": "integer" + }, + { + "allOf": [ + { + "$ref": "#/definitions/Pointer_Port_List" + }, + { + "f5PostProcess": { + "tag": "minVersion", + "data": { + "version": "14.1", + "strict": true + } + } + } + ] + } + ], + "default": 80 + } + }, + "allOf": [ + { + "$ref": "#/definitions/Service_HTTP_Core" + } + ], + "dependencies": { + "serverTLS": { + "not": {} + }, + "profileConnectivity": { + "oneOf": [ + { + "required": [ + "profileAccess" + ] + }, + { + "required": [ + "policyIAM" + ] + } + ] + }, + "policyPerRequestAccess": { + "oneOf": [ + { + "required": [ + "profileAccess" + ] + }, + { + "required": [ + "policyIAM" + ] + } + ] + } + }, + "required": [ + "class" + ] + }, + "Service_HTTPS": { + "title": "Service_HTTPS", + "description": "HTTPS (HTTP+TLS) virtual server", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Service_HTTPS" + }, + "virtualPort": { + "title": "Virtual server TCP port", + "description": "Default 443 is well-known HTTPS port. Accepts either an integer or a reference to a Firewall_Port_List that contains the ports on which to listen. Firewall_Port_List is only supported on BIG-IP 14.1 and later. If a Firewall_Port_List is provided, BIG-IP AS3 will create a traffic-matching-criteria for the virtual.", + "oneOf": [ + { + "type": "integer" + }, + { + "allOf": [ + { + "$ref": "#/definitions/Pointer_Port_List" + }, + { + "f5PostProcess": { + "tag": "minVersion", + "data": { + "version": "14.1", + "strict": true + } + } + } + ] + } + ], + "default": 443 + }, + "redirect80": { + "title": "Redirect HTTP", + "description": "If true, BIG-IP AS3 redirects HTTP traffic to any virtualAddress on port 80 to virtualPort", + "type": "boolean", + "default": true + }, + "profileHTTP2": { + "title": "HTTP/2 profile", + "type": [ + "string", + "object" + ], + "description": "HTTP/2 profile; name of built-in or else BIG-IP AS3 pointer", + "oneOf": [ + { + "type": "string", + "enum": [ + "basic" + ] + }, + { + "$ref": "#/definitions/Pointer_HTTP2_Profile" + }, + { + "type": "object", + "properties": { + "ingress": { + "type": "object", + "description": "Ingress (client-side context) HTTP2 profile. This property is available on BIGIP 14.1 and above.", + "allOf": [ + { + "$ref": "#/definitions/Pointer_HTTP2_Profile" + } + ] + }, + "egress": { + "type": "object", + "description": "Egress (server-side context) HTTP2 profile. This property is available on BIGIP 14.1 and above.", + "allOf": [ + { + "$ref": "#/definitions/Pointer_HTTP2_Profile" + } + ] + } + }, + "minProperties": 1, + "maxProperties": 1, + "additionalProperties": false + } + ] + } + }, + "allOf": [ + { + "$ref": "#/definitions/Service_HTTP_Core" + } + ], + "dependencies": { + "serverTLS": { + "properties": { + "serverTLS": { + "minLength": 1 + } + } + } + }, + "required": [ + "class", + "serverTLS" + ] + }, + "Service_HTTP_Core": { + "title": "HTTP VS core", + "type": "object", + "description": "Core attributes of HTTP(S) virtual server", + "properties": { + "persistenceMethods": { + "title": "Persistence methods", + "description": "Default 'cookie' is generally good. Use 'persistenceMethods: []' for no persistence.", + "type": "array", + "items": { + "$ref": "#/definitions/Basic_Persist" + }, + "default": [ + "cookie" + ] + }, + "profileAnalytics": { + "$ref": "#/definitions/Pointer_Analytics_Profile" + }, + "profileAnalyticsTcp": { + "$ref": "#/definitions/Pointer_Analytics_TCP_Profile" + }, + "profileHTTP": { + "title": "HTTP profile", + "description": "HTTP profile; name of built-in or else BIG-IP AS3 pointer", + "oneOf": [ + { + "type": "string", + "enum": [ + "basic" + ] + }, + { + "$ref": "#/definitions/Pointer_HTTP_Profile" + } + ], + "default": "basic" + }, + "profileHTTPCompression": { + "title": "HTTP compression profile", + "description": "HTTP compression profile; name of built-in or else BIG-IP AS3 pointer", + "if": { + "not": { + "type": "object" + } + }, + "then": { + "type": "string", + "enum": [ + "basic", + "wan" + ] + }, + "else": { + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to HTTP compression profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "HTTP_Compress" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP HTTP compression profile", + "description": "Pathname of existing BIG-IP HTTP compression profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile http-compression" + ] + } + } + }, + "profileHTTPAcceleration": { + "title": "Web acceleration profile", + "description": "Web acceleration profile; name of built-in or else BIG-IP AS3 pointer", + "if": { + "not": { + "type": "object" + } + }, + "then": { + "type": "string", + "enum": [ + "basic" + ] + }, + "else": { + "$ref": "#/definitions/Pointer_HTTP_Acceleration_Profile" + } + }, + "profileHTML": { + "$ref": "#/definitions/Pointer_HTML_Profile" + }, + "profileMultiplex": { + "title": "Multiplex profile", + "description": "Multiplex (OneConnect) profile; name of built-in or else BIG-IP AS3 pointer", + "if": { + "not": { + "type": "object" + } + }, + "then": { + "type": "string", + "enum": [ + "basic" + ] + }, + "else": { + "$ref": "#/definitions/Pointer_Multiplex_Profile" + } + }, + "profileNTLM": { + "$ref": "#/definitions/Pointer_NTLM_Profile" + }, + "policyWAF": { + "$ref": "#/definitions/Pointer_WAF_Policy" + }, + "policyIAM": { + "title": "IAM policy", + "description": "BIG-IP AS3 pointer to IAM (APM) policy declaration", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "apm" + ] + } + }, + { + "$ref": "#/definitions/Pointer_Access_Profile" + } + ] + }, + "profileFPS": { + "description": "FPS Profile to attach to service", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "fps" + ] + } + }, + { + "$ref": "#/definitions/Pointer_FPS_Profile" + } + ] + }, + "profileRequestAdapt": { + "$ref": "#/definitions/Pointer_Request_Adapt_Profile" + }, + "profileResponseAdapt": { + "$ref": "#/definitions/Pointer_Response_Adapt_Profile" + }, + "profileAccess": { + "title": "Access profile", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "apm" + ] + } + }, + { + "$ref": "#/definitions/Pointer_Access_Profile" + } + ] + }, + "profileConnectivity": { + "title": "Connectivity profile", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "apm" + ] + } + }, + { + "$ref": "#/definitions/Pointer_Connectivity_Profile" + } + ] + }, + "policyPerRequestAccess": { + "title": "Per Request Access Policy", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "apm" + ] + } + }, + { + "$ref": "#/definitions/Pointer_Per_Request_Access_Policy" + } + ] + }, + "profileVdi": { + "title": "VDI profile", + "description": "VDI profile to attach to service.", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "apm" + ] + } + }, + { + "$ref": "#/definitions/Pointer_VDI_Profile" + } + ] + }, + "profileApiProtection": { + "title": "API Protection Profile", + "description": "API protection profile to attach to service. This property is available on BIGIP 14.1 and above.", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "apm", + "asm" + ] + } + }, + { + "$ref": "#/definitions/Pointer_API_Protection_Profile" + } + ] + }, + "profileDOS": { + "$ref": "#/definitions/Pointer_DOS_Profile" + }, + "profileBotDefense": { + "description": "Attaches a Bot Defense profile to the service. This property is available on BIGIP 14.1 and above.", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Bot_Defense_Profile" + } + ] + }, + "profileWebSocket": { + "description": "Attaches a WebSocket profile to the Service.", + "allOf": [ + { + "$ref": "#/definitions/Pointer_WebSocket_Profile" + } + ] + } + }, + "allOf": [ + { + "if": { + "properties": { + "policyIAM": {} + }, + "required": [ + "policyIAM" + ] + }, + "then": { + "not": { + "properties": { + "profileAccess": {} + }, + "required": [ + "profileAccess" + ] + } + } + }, + { + "$ref": "#/definitions/Service_TCP_Core" + } + ], + "required": [ + "class" + ] + }, + "Service_TCP": { + "title": "Service_TCP", + "description": "Declares a TCP virtual server (w/optional TLS)", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Service_TCP" + }, + "mqttEnabled": { + "title": "MQTT profile", + "description": "Attaches the MQTT profile /Common/mqtt. MQTT profiles have no configurable properties.", + "type": "boolean", + "default": false + }, + "persistenceMethods": { + "title": "Persistence methods", + "description": "Default 'source-address' is generally good. Use 'persistenceMethods: []' for no persistence.", + "type": "array", + "items": { + "$ref": "#/definitions/Basic_Persist" + }, + "default": [ + "source-address" + ] + }, + "profileSIP": { + "$ref": "#/definitions/Pointer_SIP_Profile" + }, + "profileFTP": { + "$ref": "#/definitions/Pointer_FTP_Profile" + }, + "profileILX": { + "$ref": "#/definitions/Pointer_ILX_Profile" + }, + "profilePPTP": { + "$ref": "#/definitions/Pointer_PPTP_Profile" + }, + "profileRTSP": { + "$ref": "#/definitions/Pointer_RTSP_Profile" + }, + "profileSOCKS": { + "$ref": "#/definitions/Pointer_SOCKS_Profile" + }, + "profileICAP": { + "$ref": "#/definitions/Pointer_ICAP_Profile" + } + }, + "allOf": [ + { + "$ref": "#/definitions/Service_TCP_Core" + } + ], + "required": [ + "class" + ], + "if": { + "not": { + "properties": { + "virtualType": { + "const": "internal" + } + } + } + }, + "then": { + "required": [ + "virtualPort" + ], + "not": { + "required": [ + "profileICAP" + ] + } + } + }, + "Service_TCP_Core": { + "title": "Service_TCP core", + "description": "Core attributes of TCP virtual server", + "type": "object", + "properties": { + "virtualType": { + "title": "Virtual addresses", + "description": "Type of the virtual", + "type": "string", + "enum": [ + "standard", + "internal" + ], + "default": "standard" + }, + "virtualPort": { + "title": "virtual server TCP port", + "description": "Accepts either an integer or a reference to a Firewall_Port_List that contains the ports on which to listen. Firewall_Port_List is only supported on BIG-IP 14.1 and later. If a Firewall_Port_List is provided, BIG-IP AS3 will create a traffic-matching-criteria for the virtual.", + "oneOf": [ + { + "type": "integer" + }, + { + "allOf": [ + { + "$ref": "#/definitions/Pointer_Port_List" + }, + { + "f5PostProcess": { + "tag": "minVersion", + "data": { + "version": "14.1", + "strict": true + } + } + } + ] + } + ], + "minimum": 0, + "maximum": 65535 + }, + "layer4": { + "title": "L4 protocol", + "description": "For TCP virtual server, Layer 4 protocol must be TCP", + "type": "string", + "const": "tcp", + "default": "tcp" + }, + "profileFIX": { + "$ref": "#/definitions/Pointer_FIX_Profile" + }, + "profileTCP": { + "title": "TCP profile", + "description": "TCP profile; name of built-in or else BIG-IP AS3 pointer", + "if": { + "not": { + "type": "object" + } + }, + "then": { + "type": "string", + "enum": [ + "normal", + "lan", + "wan", + "mobile" + ] + }, + "else": { + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to TCP profile declaration for ingress and egress", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "TCP_Profile" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP TCP profile", + "description": "Pathname of existing BIG-IP TCP profile for both ingress and egress", + "type": "string", + "format": "f5bigip" + }, + "ingress": { + "title": "Ingress profile", + "description": "Ingress (client-side context) TCP profile", + "if": { + "not": { + "type": "object" + } + }, + "then": { + "type": "string", + "enum": [ + "normal", + "lan", + "wan", + "mobile" + ], + "default": "normal" + }, + "else": { + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to TCP profile declaration for incoming connections", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "TCP_Profile" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP TCP profile", + "description": "Pathname of existing BIG-IP TCP profile in client-side context", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1 + } + }, + "egress": { + "title": "Egress TCP profile", + "description": "Egress (server-side context) TCP profile", + "if": { + "not": { + "type": "object" + } + }, + "then": { + "type": "string", + "enum": [ + "normal", + "lan", + "wan", + "mobile" + ], + "default": "normal" + }, + "else": { + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to TCP profile declaration for outgoing connections", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "TCP_Profile" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP server-side TCP profile", + "description": "Pathname of existing BIG-IP TCP profile in server-side context", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1 + } + } + }, + "additionalProperties": false, + "dependencies": { + "use": { + "minProperties": 1, + "maxProperties": 1 + }, + "bigip": { + "minProperties": 1, + "maxProperties": 1 + }, + "ingress": { + "minProperties": 2, + "maxProperties": 2 + }, + "egress": { + "minProperties": 2, + "maxProperties": 2 + } + }, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile tcp" + ] + } + }, + "default": "normal" + }, + "profileAnalyticsTcp": { + "$ref": "#/definitions/Pointer_Analytics_TCP_Profile" + }, + "profileSSHProxy": { + "$ref": "#/definitions/Pointer_SSH_Proxy_Profile" + }, + "serverTLS": { + "title": "TLS server", + "description": "BIG-IP AS3 pointer to TLS Server declaration", + "if": { + "type": "string" + }, + "then": { + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "TLS_Server" + } + }, + "required": [ + "class" + ] + } + } + }, + "else": { + "if": { + "type": "object" + }, + "then": { + "$ref": "#/definitions/Pointer_Existing_TLS_Server_Profile" + }, + "else": { + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Existing_TLS_Server_Profile" + } + } + } + }, + "clientTLS": { + "title": "TLS client", + "description": "BIG-IP AS3 pointer to TLS Client declaration", + "if": { + "type": "string" + }, + "then": { + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "TLS_Client" + } + }, + "required": [ + "class" + ] + } + } + }, + "else": { + "if": { + "type": "object" + }, + "then": { + "$ref": "#/definitions/Pointer_Existing_TLS_Client_Profile" + }, + "else": { + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Existing_TLS_Client_Profile" + } + } + } + }, + "policyEndpoint": { + "title": "Endpoint policy", + "description": "BIG-IP AS3 pointer to Endpoint policy declaration", + "if": { + "type": "array" + }, + "then": { + "items": { + "$ref": "#/definitions/Pointer_Endpoint_Policy" + } + }, + "else": { + "$ref": "#/definitions/Pointer_Endpoint_Policy" + } + }, + "profileStream": { + "$ref": "#/definitions/Pointer_Stream_Profile" + } + }, + "allOf": [ + { + "$ref": "#/definitions/Service_Core" + } + ] + }, + "Service_UDP": { + "title": "Service_UDP", + "description": "Declares a UDP virtual server (w/optional (D)TLS)", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Service_UDP" + }, + "persistenceMethods": { + "title": "Persistence methods", + "description": "Default 'source-address' is generally good. Use 'persistenceMethods: []' for no persistence.", + "type": "array", + "items": { + "$ref": "#/definitions/Basic_Persist" + }, + "default": [ + "source-address" + ] + } + }, + "allOf": [ + { + "$ref": "#/definitions/Service_UDP_Core" + } + ], + "required": [ + "class" + ], + "if": { + "not": { + "properties": { + "virtualType": { + "const": "internal" + } + } + } + }, + "then": { + "required": [ + "virtualPort" + ] + }, + "dependencies": { + "virtualType": { + "if": { + "properties": { + "virtualType": { + "const": "stateless" + } + } + }, + "then": { + "properties": { + "translateClientPort": { + "const": false + }, + "translateServerPort": { + "const": false + } + }, + "required": [ + "pool" + ] + } + } + } + }, + "Service_UDP_Core": { + "title": "Service_UDP core", + "description": "Core attributes of UDP virtual server", + "type": "object", + "properties": { + "virtualType": { + "title": "Virtual addresses", + "description": "Type of the virtual", + "type": "string", + "enum": [ + "standard", + "internal", + "stateless" + ], + "default": "standard" + }, + "virtualPort": { + "title": "Virtual server UDP port", + "description": "Accepts either an integer or a reference to a Firewall_Port_List that contains the ports on which to listen. Firewall_Port_List is only supported on BIG-IP 14.1 and later. If a Firewall_Port_List is provided, BIG-IP AS3 will create a traffic-matching-criteria for the virtual.", + "oneOf": [ + { + "type": "integer" + }, + { + "allOf": [ + { + "$ref": "#/definitions/Pointer_Port_List" + }, + { + "f5PostProcess": { + "tag": "minVersion", + "data": { + "version": "14.1", + "strict": true + } + } + } + ] + } + ], + "minimum": 0, + "maximum": 65535 + }, + "layer4": { + "title": "L4 protocol", + "description": "For UDP virtual server, Layer 4 protocol must be UDP", + "type": "string", + "const": "udp", + "default": "udp" + }, + "profileUDP": { + "title": "UDP profile", + "description": "UDP profile; name of built-in or else BIG-IP AS3 pointer", + "if": { + "not": { + "type": "object" + } + }, + "then": { + "type": "string", + "enum": [ + "normal" + ] + }, + "else": { + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to UDP profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "UDP_Profile" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP UDP profile", + "description": "Pathname of existing BIG-IP UDP profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile udp" + ] + } + }, + "default": "normal" + }, + "serverTLS": { + "title": "TLS server", + "description": "BIG-IP AS3 pointer to TLS Server declaration", + "if": { + "type": "string" + }, + "then": { + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "TLS_Server" + } + }, + "required": [ + "class" + ] + } + } + }, + "else": { + "if": { + "type": "object" + }, + "then": { + "$ref": "#/definitions/Pointer_Existing_TLS_Server_Profile" + }, + "else": { + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Existing_TLS_Server_Profile" + } + } + } + }, + "clientTLS": { + "title": "TLS client", + "description": "BIG-IP AS3 pointer to TLS Client declaration", + "if": { + "type": "string" + }, + "then": { + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "TLS_Client" + } + }, + "required": [ + "class" + ] + } + } + }, + "else": { + "if": { + "type": "object" + }, + "then": { + "$ref": "#/definitions/Pointer_Existing_TLS_Client_Profile" + }, + "else": { + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Existing_TLS_Client_Profile" + } + } + } + }, + "policyEndpoint": { + "title": "Endpoint policy", + "description": "BIG-IP AS3 pointer to Endpoint policy declaration", + "if": { + "type": "array" + }, + "then": { + "items": { + "$ref": "#/definitions/Pointer_Endpoint_Policy" + } + }, + "else": { + "$ref": "#/definitions/Pointer_Endpoint_Policy" + } + }, + "profileRADIUS": { + "$ref": "#/definitions/Pointer_Radius_Profile" + }, + "profileSIP": { + "$ref": "#/definitions/Pointer_SIP_Profile" + }, + "profileTFTP": { + "$ref": "#/definitions/Pointer_TFTP_Profile" + } + }, + "allOf": [ + { + "$ref": "#/definitions/Service_Core" + } + ] + }, + "Service_SCTP": { + "title": "Service_SCTP", + "description": "Declares a SCTP virtual server", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Service_SCTP" + }, + "virtualPort": { + "title": "virtual server SCTP port", + "description": "Accepts either an integer or a reference to a Firewall_Port_List that contains the ports on which to listen. Firewall_Port_List is only supported on BIG-IP 14.1 and later. If a Firewall_Port_List is provided, BIG-IP AS3 will create a traffic-matching-criteria for the virtual.", + "oneOf": [ + { + "type": "integer" + }, + { + "allOf": [ + { + "$ref": "#/definitions/Pointer_Port_List" + }, + { + "f5PostProcess": { + "tag": "minVersion", + "data": { + "version": "14.1", + "strict": true + } + } + } + ] + } + ], + "minimum": 0, + "maximum": 65535 + }, + "profileSCTP": { + "$ref": "#/definitions/Pointer_SCTP_Profile" + }, + "layer4": { + "title": "L4 protocol", + "description": "For SCTP virtual server, Layer 4 protocol must be SCTP", + "type": "string", + "const": "sctp", + "default": "sctp" + } + }, + "allOf": [ + { + "$ref": "#/definitions/Service_Core" + } + ], + "required": [ + "class", + "virtualPort" + ] + }, + "Service_L4": { + "title": "Service_L4", + "description": "Declares a L4 (FastL4) virtual server", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Service_L4" + }, + "persistenceMethods": { + "title": "Persistence methods", + "description": "Default 'source-address' is generally good. Use 'persistenceMethods: []' for no persistence.", + "type": "array", + "items": { + "$ref": "#/definitions/Basic_Persist" + }, + "default": [ + "source-address" + ] + } + }, + "allOf": [ + { + "$ref": "#/definitions/Service_L4_Core" + } + ], + "required": [ + "class", + "virtualPort" + ], + "not": { + "required": [ + "profileTrafficLog" + ] + } + }, + "Service_Generic": { + "title": "Service_Generic", + "description": "Declares an 'Any IP' (IPOther) virtual server", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Service_Generic" + }, + "layer4": { + "title": "L4 protocol", + "description": "The L4 protocol type for this virtual server", + "type": "string", + "default": "any" + }, + "profileIPOther": { + "allOf": [ + { + "$ref": "#/definitions/Pointer_IP_Other_Profile" + } + ], + "default": { + "bigip": "/Common/ipother" + } + } + }, + "allOf": [ + { + "$ref": "#/definitions/Service_L4_Core" + } + ], + "required": [ + "class" + ] + }, + "Service_L4_Core": { + "title": "Service_L4 core", + "description": "Core attributes of L4 virtual server", + "type": "object", + "properties": { + "virtualPort": { + "title": "virtual server TCP port", + "description": "Accepts either an integer or a reference to a Firewall_Port_List that contains the ports on which to listen. Firewall_Port_List is only supported on BIG-IP 14.1 and later. If a Firewall_Port_List is provided, BIG-IP AS3 will create a traffic-matching-criteria for the virtual.", + "oneOf": [ + { + "type": "integer" + }, + { + "allOf": [ + { + "$ref": "#/definitions/Pointer_Port_List" + }, + { + "f5PostProcess": { + "tag": "minVersion", + "data": { + "version": "14.1", + "strict": true + } + } + } + ] + } + ], + "minimum": 0, + "maximum": 65535 + }, + "layer4": { + "title": "L4 protocol", + "description": "The L4 protocol type for this virtual server", + "type": "string", + "enum": [ + "any", + "tcp", + "udp", + "3pc", + "a/n", + "ah", + "argus", + "aris", + "ax.25", + "bbn-rcc", + "bna", + "br-sat-mon", + "cbt", + "cftp", + "chaos", + "compaq-peer", + "cphb", + "cpnx", + "crdup", + "crtp", + "dccp", + "dcn", + "ddp", + "ddx", + "dgp", + "dsr", + "egp", + "eigrp", + "emcon", + "encap", + "esp", + "etherip", + "fc", + "fire", + "ggp", + "gmtp", + "gre", + "hip", + "hmp", + "hopopt", + "i-nlsp", + "iatp", + "icmp", + "idpr", + "idpr-cmtp", + "idrp", + "ifmp", + "igmp", + "igp", + "il", + "ip", + "ipcomp", + "ipcv", + "ipencap", + "ipip", + "iplt", + "ippc", + "ipv6", + "ipv6-auth", + "ipv6-crypt", + "ipv6-frag", + "ipv6-icmp", + "ipv6-nonxt", + "ipv6-opts", + "ipv6-route", + "ipx-in-ip", + "irtp", + "isis", + "iso-ip", + "iso-tp4", + "kryptolan", + "l2tp", + "larp", + "leaf-1", + "leaf-2", + "manet", + "merit-inp", + "mfe-nsp", + "micp", + "mobile", + "mpls-in-ip", + "mtp", + "mux", + "narp", + "netblt", + "nsfnet-igp", + "nvp", + "ospf", + "pgm", + "pim", + "pipe", + "pnni", + "prm", + "ptp", + "pup", + "pvp", + "qnx", + "rdp", + "rsvp", + "rsvp-e2e-ignore", + "rvd", + "sat-expak", + "sat-mon", + "scc-sp", + "scps", + "sctp", + "sdrp", + "secure-vmtp", + "shim6", + "skip", + "sm", + "smp", + "snp", + "sprite-rpc", + "sps", + "srp", + "sscopmce", + "st", + "stp", + "sun-nd", + "swipe", + "tcf", + "tlsp", + "tp++", + "trunk-1", + "trunk-2", + "ttp", + "udplite", + "uti", + "vines", + "visa", + "vmtp", + "vrrp", + "wb-expak", + "wb-mon", + "wesp", + "wsn", + "xnet", + "xns-idp", + "xtp" + ], + "default": "tcp" + }, + "profileFIX": { + "$ref": "#/definitions/Pointer_FIX_Profile" + }, + "profileL4": { + "title": "L4 profile", + "description": "L4 profile; name of built-in or else BIG-IP AS3 pointer", + "if": { + "not": { + "type": "object" + } + }, + "then": { + "type": "string", + "enum": [ + "basic" + ] + }, + "else": { + "$ref": "#/definitions/Pointer_L4_Profile" + }, + "default": "basic" + }, + "profileAnalyticsTcp": { + "$ref": "#/definitions/Pointer_Analytics_TCP_Profile" + } + }, + "allOf": [ + { + "$ref": "#/definitions/Service_Core" + } + ] + }, + "Service_Forwarding": { + "title": "Service_Forwarding", + "description": "Attributes of a forwarding virtual server. ARP and ICMP Echo will be disabled on virtualAddresses by default.", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Service_Forwarding" + }, + "forwardingType": { + "title": "Forwarding Type", + "description": "Controls whether the forwarding service uses IP or L2 forwarding", + "type": "string", + "enum": [ + "ip", + "l2" + ] + }, + "layer4": { + "title": "L4 protocol", + "description": "Layer 4 protocol", + "type": "string", + "default": "any" + }, + "profileL4": { + "title": "L4 profile", + "description": "L4 profile; name of built-in or else BIG-IP AS3 pointer", + "if": { + "not": { + "type": "object" + } + }, + "then": { + "type": "string", + "enum": [ + "basic" + ] + }, + "else": { + "$ref": "#/definitions/Pointer_L4_Profile" + } + } + }, + "allOf": [ + { + "if": { + "properties": { + "forwardingType": { + "const": "ip" + } + } + }, + "then": { + "properties": { + "translateServerPort": { + "type": "boolean", + "default": false, + "const": false + }, + "translateServerAddress": { + "type": "boolean", + "default": false, + "const": false + } + } + } + }, + { + "$ref": "#/definitions/Service_Core" + } + ], + "required": [ + "class", + "forwardingType" + ], + "not": { + "anyOf": [ + { + "required": [ + "fallbackPersistenceMethod" + ] + }, + { + "required": [ + "persistenceMethods" + ] + }, + { + "required": [ + "pool" + ] + }, + { + "required": [ + "profileBotDefense" + ] + }, + { + "required": [ + "profileDiameterEndpoint" + ] + }, + { + "required": [ + "profileDNS" + ] + }, + { + "required": [ + "profileIPOther" + ] + }, + { + "required": [ + "profileProtocolInspection" + ] + }, + { + "required": [ + "profileRewrite" + ] + }, + { + "required": [ + "profileTrafficLog" + ] + }, + { + "required": [ + "sourceAddress" + ] + } + ] + } + }, + "Service_Core": { + "title": "Virtual-server core", + "description": "Core attributes of a virtual server", + "type": "object", + "properties": { + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "virtualAddresses": { + "title": "Virtual addresses", + "description": "Accepts either an array or a reference to an Address_List which contains destination addresses to which this virtual will listen. To accept connections only from certain subnet(s), replace IP address in the provided array with array [IP-address, accept-from-subnet]. If you do this, you cannot also include the sourceAddress property. IP address in the provided array can also be replaced by a reference to a Service_Address. A reference to an Address_List is only supported on BIG-IP 14.1 and later. If an Address_List is provided, BIG-IP AS3 will create a traffic-matching-criteria for the virtual.", + "oneOf": [ + { + "type": "array", + "f5PostProcess": { + "tag": "virtualAddress" + }, + "items": { + "if": { + "type": "string" + }, + "then": { + "format": "f5ip" + }, + "else": { + "if": { + "type": "array" + }, + "then": { + "type": "array", + "items": { + "title": "Virtual address", + "if": { + "type": "string" + }, + "then": { + "format": "f5ip" + }, + "else": { + "$ref": "#/definitions/Pointer_Service_Address" + } + }, + "minItems": 2, + "maxItems": 2, + "uniqueItems": true + }, + "else": { + "$ref": "#/definitions/Pointer_Service_Address" + } + } + }, + "minItems": 1, + "uniqueItems": true + }, + { + "allOf": [ + { + "$ref": "#/definitions/Pointer_Address_List" + }, + { + "f5PostProcess": { + "tag": "minVersion", + "data": { + "version": "14.1", + "strict": true + } + } + } + ] + } + ] + }, + "serviceDownImmediateAction": { + "title": "Service Down Immediate Action", + "description": "Specifies the immediate action the BIG-IP system should respond with upon the receipt of the initial client's SYN packet if the availability status of the virtual server is Offline or Unavailable. This is supported for the virtual server of Standard type and TCP protocol. The default value is none.", + "type": "string", + "enum": [ + "none", + "drop", + "reset" + ], + "default": "none" + }, + "shareAddresses": { + "title": "Share addresses", + "description": "A user set boolean that indicates whether the virtualAddresses should be added to or checked for /Common instead of the tenant. This value defaults to false, and so will put the virtualAddresses into their tenant.", + "type": "boolean", + "default": false + }, + "sourceAddress": { + "title": "Source address", + "description": "Accepts either a string or a reference to an Address_List which contains source addresses from which this virtual will listen. A reference to an Address_List is only supported on BIG-IP 14.1 and later. If an Address_List is provided, BIG-IP AS3 will create a traffic-matching-criteria for the virtual. If you also include the virtualAddresses property, those addresses cannot include the accept-from-subnet field.", + "oneOf": [ + { + "type": "string", + "format": "f5ip" + }, + { + "allOf": [ + { + "$ref": "#/definitions/Pointer_Address_List" + }, + { + "f5PostProcess": { + "tag": "minVersion", + "data": { + "version": "14.1", + "strict": true + } + } + } + ] + } + ] + }, + "enable": { + "title": "Enable", + "description": "Virtual server handles traffic only when enabled (default)", + "type": "boolean", + "default": true + }, + "maxConnections": { + "title": "Maximum connections", + "description": "Specifies the maximum number of concurrent connections you want to allow for the virtual server", + "type": "integer", + "minimum": 0, + "default": 0 + }, + "snat": { + "title": "SNAT", + "description": "Name of built-in SNAT method or BIG-IP AS3 pointer to SNAT pool. If 'self', the system uses the virtual-server address as SNAT address", + "if": { + "not": { + "type": "object" + } + }, + "then": { + "type": "string", + "enum": [ + "none", + "self", + "auto" + ] + }, + "else": { + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to SNAT pool declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "SNAT_Pool" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP SNAT pool", + "description": "Pathname of existing BIG-IP SNAT pool", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm snatpool" + ] + } + }, + "default": "auto" + }, + "iRules": { + "title": "iRules", + "description": "List iRules for this virtual server (order is significant)", + "type": "array", + "items": { + "title": "iRule", + "description": "BIG-IP AS3 pointer to iRule (declared separately)", + "if": { + "type": "string" + }, + "then": { + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "iRule" + } + }, + "required": [ + "class" + ] + } + } + }, + "else": { + "type": "object", + "properties": { + "bigip": { + "title": "BIG-IP iRule", + "description": "Pathname of existing BIG-IP iRule", + "type": "string", + "format": "f5bigip" + }, + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to iRule (declared separately)", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "iRule" + } + }, + "required": [ + "class" + ] + } + } + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm rule" + ] + } + } + }, + "$comment": "uniqueItems: true" + }, + "pool": { + "title": "Pool", + "description": "BIG-IP AS3 pointer to pool if any (declared separately)", + "if": { + "type": "string" + }, + "then": { + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Pool" + } + }, + "required": [ + "class" + ] + } + } + }, + "else": { + "type": "object", + "properties": { + "bigip": { + "title": "BIG-IP pool", + "description": "Pathname of existing BIG-IP pool", + "type": "string", + "format": "f5bigip" + }, + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to pool if any (declared separately)", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Pool" + } + }, + "required": [ + "class" + ] + } + } + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm pool" + ] + } + } + }, + "addressStatus": { + "title": "Address status", + "description": "Specifies whether the virtual server will contribute to the operational status of the associated virtual address", + "type": "boolean", + "default": true + }, + "mirroring": { + "title": "Mirroring", + "description": "Controls connection-mirroring for high-availability", + "type": "string", + "enum": [ + "none", + "L4" + ], + "default": "none" + }, + "policyBandwidthControl": { + "title": "Bandwidth Control Policy", + "description": "BIG-IP AS3 pointer to Bandwidth Control Policy (policy must be static)", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Bandwidth_Control_Policy" + } + ] + }, + "policyFirewallEnforced": { + "title": "Firewall policy (enforced)", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm" + ] + } + }, + { + "$ref": "#/definitions/Pointer_Firewall_Policy" + } + ] + }, + "policyFirewallStaged": { + "title": "Firewall policy (staged)", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm" + ] + } + }, + { + "$ref": "#/definitions/Pointer_Firewall_Policy" + } + ] + }, + "policyNAT": { + "description": "BIG-IP AS3 pointer to NAT policy declaration", + "type": "object", + "properties": { + "bigip": { + "title": "BIG-IP NAT policy", + "description": "Pathname of existing BIG-IP NAT policy", + "type": "string", + "format": "f5bigip" + }, + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to NAT policy declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "NAT_Policy" + } + }, + "required": [ + "class" + ] + } + } + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm" + ] + } + }, + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security nat policy" + ] + } + } + ] + }, + "policyIdleTimeout": { + "$ref": "#/definitions/Pointer_Idle_Timeout_Policy" + }, + "lastHop": { + "title": "Last hop", + "description": "Name of built-in last-hop method or BIG-IP AS3 pointer to last-hop pool (default 'default' means use system setting)", + "if": { + "not": { + "type": "object" + } + }, + "then": { + "type": "string", + "enum": [ + "default", + "auto", + "disable" + ] + }, + "else": { + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to last-hop pool declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Pool" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP last-hop pool", + "description": "Pathname of existing BIG-IP pool", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm pool" + ] + } + }, + "default": "default" + }, + "translateClientPort": { + "title": "Translate client port", + "description": "If true, hide client's port number from server. A value of true is the same as the string 'change' while a value of false is the same as the string 'preserve'. The value 'preserve-strict' is the only other allowed value for a string", + "type": [ + "boolean", + "string" + ], + "default": false, + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "string", + "enum": [ + "change", + "preserve", + "preserve-strict" + ] + } + ] + }, + "translateServerAddress": { + "title": "Translate server address", + "description": "If true (default), make server-side connection to server address (otherwise, treat server as gateway to virtual-server address)", + "type": "boolean", + "default": true + }, + "translateServerPort": { + "title": "Translate server port", + "description": "If true (default), make server-side connection to server port (otherwise, connect to server on virtual-server port)", + "type": "boolean", + "default": true + }, + "nat64Enabled": { + "title": "Translate IPv6 to IPv4", + "description": "If true, translate IPv6 traffic into IPv4 (default false)", + "type": "boolean", + "default": false + }, + "httpMrfRoutingEnabled": { + "title": "HTTP MRF Router", + "description": "Specifies whether to use the HTTP message routing framework (MRF) functionality. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": false + }, + "persistenceMethods": { + "title": "Persistence method(s)", + "description": "List of persistence methods (each by name or BIG-IP AS3 pointer). Element 0 is primary (default) persistence method. Use 'persistenceMethods: []' for no persistence.", + "type": "array", + "items": { + "$ref": "#/definitions/Basic_Persist" + }, + "$comment": "uniqueItems: true" + }, + "fallbackPersistenceMethod": { + "$ref": "#/definitions/Basic_Persist" + }, + "allowVlans": { + "title": "VLAN list to allow", + "description": "Names of existing VLANs to add to this virtual server to allow.", + "type": "array", + "items": { + "bigip": { + "title": "BIG-IP VLAN", + "description": "Pathname of existing BIG-IP VLAN", + "type": "string", + "format": "f5bigip" + } + } + }, + "rejectVlans": { + "title": "VLAN list to reject", + "description": "Names of existing VLANs to add to this virtual server to reject.", + "type": "array", + "items": { + "bigip": { + "title": "BIG-IP VLAN", + "description": "Pathname of existing BIG-IP VLAN", + "type": "string", + "format": "f5bigip" + } + } + }, + "securityLogProfiles": { + "title": "Security Log Profiles", + "description": "Specifies the log profile applied to the virtual server", + "type": "array", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm", + "asm" + ] + }, + "items": { + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to security log profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Security_Log_Profile" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP security log profile", + "description": "Pathname of existing BIG-IP security log profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security log profile" + ] + } + } + }, + "profileDiameterEndpoint": { + "$ref": "#/definitions/Pointer_Enforcement_Diameter_Endpoint_Profile" + }, + "profileEnforcement": { + "$ref": "#/definitions/Pointer_Enforcement_Profile" + }, + "profileSubscriberManagement": { + "$ref": "#/definitions/Pointer_Enforcement_Subscriber_Management_Profile" + }, + "profileIPOther": { + "$ref": "#/definitions/Pointer_IP_Other_Profile" + }, + "profileClassification": { + "$ref": "#/definitions/Pointer_Classification_Profile" + }, + "profileDNS": { + "$ref": "#/definitions/Pointer_DNS_Profile" + }, + "profileStatistics": { + "$ref": "#/definitions/Pointer_Statistics_Profile" + }, + "profileTrafficLog": { + "$ref": "#/definitions/Pointer_Traffic_Log_Profile" + }, + "profileRewrite": { + "$ref": "#/definitions/Pointer_Rewrite_Profile" + }, + "profileProtocolInspection": { + "description": "BIG-IP AS3 pointer to Protocol Inspection Profile declaration", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm" + ] + } + }, + { + "$ref": "#/definitions/Pointer_Protocol_Inspection_Profile" + } + ] + }, + "metadata": { + "$ref": "#/definitions/Metadata" + }, + "rateLimit": { + "description": "Specifies the maximum number of connections per second allowed for a virtual server", + "type": "integer", + "minimum": 0, + "default": 0 + }, + "clonePools": { + "$ref": "#/definitions/Clone_Pools" + }, + "maximumBandwidth": { + "description": "Specifies the maximum bandwidth allowed, in Mbps.", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm" + ] + }, + "oneOf": [ + { + "type": "integer", + "minimum": 10, + "maximum": 1000000 + }, + { + "type": "string", + "const": "infinite" + } + ] + }, + "ipIntelligencePolicy": { + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm", + "asm" + ] + } + }, + { + "$ref": "#/definitions/Pointer_IP_Intelligence_Policy" + } + ] + }, + "profileIntegratedBotDefense": { + "description": "BIG-IP AS3 pointer to an Integrated Bot Defense Profile. These are only supported in tmos version 17.0+.", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Integrated_Bot_Defense_Profile" + } + ] + }, + "adminState": { + "title": "Administration State", + "description": "Specifies the state of the Service. When set to disable the Service no longer accepts new connection requests, but will allow current connections to finish processing before going to a down state.", + "type": "string", + "enum": [ + "enable", + "disable" + ], + "default": "enable" + } + }, + "allOf": [ + { + "if": { + "properties": { + "allowVlans": {} + }, + "required": [ + "allowVlans" + ] + }, + "then": { + "not": { + "properties": { + "rejectVlans": {} + }, + "required": [ + "rejectVlans" + ] + } + } + }, + { + "if": { + "not": { + "required": [ + "virtualType" + ], + "properties": { + "virtualType": { + "const": "internal" + } + } + } + }, + "then": { + "required": [ + "virtualAddresses" + ] + } + }, + { + "if": { + "properties": { + "virtualAddresses": { + "type": "array", + "items": { + "type": "array", + "minItems": 2, + "maxItems": 2 + } + } + }, + "required": [ + "virtualAddresses" + ] + }, + "then": { + "not": { + "properties": { + "sourceAddress": {} + }, + "required": [ + "sourceAddress" + ] + } + } + }, + { + "$ref": "#/definitions/Include" + } + ], + "dependencies": { + "fallbackPersistenceMethod": [ + "persistenceMethods" + ] + } + }, + "Clone_Pools": { + "title": "Clone Pools", + "description": "Specifies a pool that the virtual server uses to replicate either client or server traffic", + "type": "object", + "properties": { + "ingress": { + "title": "Ingress Clone Pool", + "description": "Ingress (client-side context) clone pool", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Pool" + } + ] + }, + "egress": { + "title": "Egress Clone Pool", + "description": "Egress (server-side context) clone pool", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Pool" + } + ] + } + }, + "additionalProperties": false, + "anyOf": [ + { + "required": [ + "ingress" + ] + }, + { + "required": [ + "egress" + ] + } + ] + }, + "Service_Address": { + "title": "Service_Address", + "description": "Service IP address definition (BIG-IP virtual-address). NOTE: When BIG-IP AS3 creates a Service_Address, it is placed in /tenant/serviceAddress (and not /tenant/app/serviceAddress) on the BIG-IP system.", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Service_Address" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "virtualAddress": { + "title": "Virtual address", + "description": "The virtual IP address. Defaults to mask /32.", + "type": "string", + "format": "f5ip" + }, + "arpEnabled": { + "title": "Enable ARP", + "description": "If true (default), the system services ARP requests on this address", + "type": "boolean", + "default": true + }, + "icmpEcho": { + "title": "Enable ICMP echo", + "description": "If true (default), the system answers ICMP echo requests on this address", + "type": "string", + "enum": [ + "enable", + "disable", + "selective" + ], + "default": "enable" + }, + "routeAdvertisement": { + "title": "Enable route advertisement", + "description": "If true, the route is advertised", + "type": "string", + "enum": [ + "enable", + "disable", + "selective", + "always", + "any", + "all" + ], + "default": "disable" + }, + "spanningEnabled": { + "title": "Enable spanning", + "description": "Enable all BIG-IP systems in device group to listen for and process traffic on the same virtual address", + "type": "boolean", + "default": false + }, + "trafficGroup": { + "title": "Traffic Group", + "description": "Specifies the traffic group which the Service_Address belongs.", + "type": "string", + "default": "default" + } + }, + "dependencies": { + "arpEnabled": { + "$comment": "Only 1 of 2 can be true.", + "if": { + "properties": { + "arpEnabled": { + "const": true + } + } + }, + "then": { + "properties": { + "spanningEnabled": { + "const": false + } + } + } + } + }, + "required": [ + "virtualAddress" + ], + "additionalProperties": false + }, + "WAF_Policy": { + "title": "WAF_Policy", + "description": "A Web Application Firewall Policy. Supports both traditional and advanced WAF policies. Advanced WAF policies require TMOS version 16.0 or newer.", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "asm" + ] + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "WAF_Policy" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "url": { + "title": "URL", + "description": "The URL to pull the ASM policy from", + "allOf": [ + { + "$ref": "#/definitions/Resource_URL" + } + ] + }, + "file": { + "title": "File", + "description": "The absolute file path for the ASM policy stored on the BIG-IP", + "type": "string", + "minLength": 3, + "allOf": [ + { + "f5PostProcess": { + "tag": "expand" + } + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "string" + } + } + ] + }, + "policy": { + "description": "Reference to a WAF Policy", + "allOf": [ + { + "$ref": "#/definitions/F5string" + }, + { + "f5PostProcess": { + "tag": "expand", + "data": { + "when": "1/expand" + } + } + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "string" + } + } + ] + }, + "ignoreChanges": { + "title": "Ignore changes", + "description": "If false (default), the system updates the policy in every BIG-IP AS3 declaration deployment. If true, BIG-IP AS3 creates the policy on first deployment, and leaves it untouched afterwards", + "type": "boolean", + "default": false + }, + "enforcementMode": { + "title": "Enforcement Mode", + "description": "Overrides the enforcement mode setting of the WAF policy. Ignored on Advanced WAF policies", + "type": "string", + "enum": [ + "blocking", + "transparent" + ] + }, + "serverTechnologies": { + "title": "Server Technologies", + "description": "Define server technologies for the WAF Policy, such as Java Servlets or Apache Struts. Ignored on Advanced WAF policies", + "type": "array", + "items": { + "title": "Server Technology", + "type": "string" + }, + "uniqueItems": true + }, + "disabledSignatures": { + "title": "Disabled attack signatures", + "description": "Disable various attack signatures by ID. Ignored on Advanced WAF policies", + "type": "array", + "items": { + "title": "Attack Signature ID", + "type": "integer", + "minimum": 200000000, + "maximum": 399999999 + }, + "uniqueItems": true + }, + "expand": { + "title": "Expand", + "description": "Performs AS3 string expansion on specified values within the WAF Policy. WAF Policies that are not in JSON format will be ignored", + "type": "array", + "items": { + "title": "JSON pointer", + "description": "A JSON pointer to a value within the WAF Policy that requires AS3 string expansion. Pointing to a parent property results in AS3 traversing the sub-properties and expanding any strings that it may find", + "type": "string" + }, + "uniqueItems": true + } + }, + "additionalProperties": false, + "required": [ + "class" + ], + "oneOf": [ + { + "required": [ + "url" + ] + }, + { + "required": [ + "file" + ] + }, + { + "required": [ + "policy" + ] + } + ] + }, + "Basic_Persist": { + "title": "Basic Persist", + "description": "Holds name of simple persistence method or BIG-IP AS3 pointer to persistence method", + "if": { + "type": "string" + }, + "then": { + "enum": [ + "cookie", + "destination-address", + "msrdp", + "source-address", + "tls-session-id" + ] + }, + "else": { + "$ref": "#/definitions/Pointer_Persist_Profile" + } + }, + "Persist": { + "title": "Persist", + "description": "Declares a persistence method", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Persist" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "persistenceMethod": { + "title": "Persistence method", + "description": "You may customize each basic persistence method", + "type": "string", + "enum": [ + "cookie", + "destination-address", + "hash", + "msrdp", + "sip-info", + "source-address", + "tls-session-id", + "universal" + ] + }, + "matchAcrossPools": { + "title": "Match across pools", + "description": "Specifies that the system can use any pool that contains this persistence record", + "type": "boolean", + "default": false + }, + "matchAcrossVirtualPorts": { + "title": "Match across virtual ports", + "description": "Specifies that all persistent connections from a client IP address that go to the same virtual IP address also go to the same node", + "type": "boolean", + "default": false + }, + "matchAcrossVirtualAddresses": { + "title": "Match across virtual addresses", + "description": "Specifies that all persistent connections from the same client IP address go to the same node", + "type": "boolean", + "default": false + }, + "mirror": { + "title": "Mirror", + "description": "If true, try to maintain persistence even after HA failover of ADC (default false)", + "type": "boolean", + "default": false + }, + "overrideConnectionLimit": { + "title": "Override connection limit", + "description": "If true, do not enforce pool member connection limit for persisted connections (default false)", + "type": "boolean", + "default": false + } + }, + "allOf": [ + { + "if": { + "properties": { + "persistenceMethod": { + "const": "cookie" + } + } + }, + "then": { + "$ref": "#/definitions/Persist_Cookie" + } + }, + { + "if": { + "properties": { + "persistenceMethod": { + "enum": [ + "destination-address", + "source-address" + ] + } + } + }, + "then": { + "$ref": "#/definitions/Persist_Addr" + } + }, + { + "if": { + "properties": { + "persistenceMethod": { + "const": "hash" + } + } + }, + "then": { + "$ref": "#/definitions/Persist_Hash" + } + }, + { + "if": { + "properties": { + "persistenceMethod": { + "const": "msrdp" + } + } + }, + "then": { + "$ref": "#/definitions/Persist_MSRDP" + } + }, + { + "if": { + "properties": { + "persistenceMethod": { + "const": "sip-info" + } + } + }, + "then": { + "$ref": "#/definitions/Persist_SIP" + } + }, + { + "if": { + "properties": { + "persistenceMethod": { + "const": "tls-session-id" + } + } + }, + "then": { + "$ref": "#/definitions/Persist_TLS_Session" + } + }, + { + "if": { + "properties": { + "persistenceMethod": { + "const": "universal" + } + } + }, + "then": { + "$ref": "#/definitions/Persist_UIE" + } + } + ], + "dependencies": { + "use": { + "not": {} + }, + "bigip": { + "not": {} + } + }, + "required": [ + "class", + "persistenceMethod" + ] + }, + "Persist_Addr": { + "title": "Address persistence", + "description": "Configures an address affinity persistence profile", + "type": "object", + "properties": { + "duration": { + "title": "Duration", + "description": "Lifetime of persistence record (seconds, default 180)", + "type": "integer", + "minimum": 0, + "maximum": 604800, + "default": 180 + }, + "hashAlgorithm": { + "title": "Hash algorithm", + "description": "Specifies the algorithm the system uses for hash persistence load balancing. The hash result is the input for the algorithm.", + "type": "string", + "enum": [ + "carp", + "default" + ], + "default": "default" + }, + "addressMask": { + "title": "Address mask", + "description": "Optional mask selects portion of address used by simple persistence (if omitted the system uses all address bits)", + "type": "string", + "format": "f5ip" + } + } + }, + "Persist_Cookie": { + "title": "Cookie persistence", + "description": "Configures a cookie persistence profile", + "type": "object", + "properties": { + "duration": { + "title": "Duration", + "description": "Lifetime of persistence record (seconds, default 0 means indefinite)", + "type": "integer", + "minimum": 0, + "maximum": 604800, + "default": 0 + }, + "cookieMethod": { + "title": "Method", + "description": "Selects cookie processing method (default is insert)", + "type": "string", + "enum": [ + "insert", + "hash", + "passive", + "rewrite" + ], + "default": "insert" + }, + "cookieName": { + "title": "Cookie name", + "description": "Cookie name (for method 'insert', default (empty-string) yields system-generated name)", + "type": "string", + "pattern": "^[0-9A-Za-z.~#$%^&*_-]*$", + "maxLength": 64, + "default": "" + } + }, + "if": { + "properties": { + "cookieMethod": { + "const": "insert" + } + } + }, + "then": { + "properties": { + "ttl": { + "title": "TTL", + "description": "Requested cookie lifetime (seconds, default 0 means session cookie)", + "type": "integer", + "minimum": 0, + "maximum": 604800, + "default": 0 + }, + "httpOnly": { + "title": "HTTP only flag", + "description": "If true (default) the system sets the HTTPOnly flag", + "type": "boolean", + "default": true + }, + "secure": { + "title": "Secure flag", + "description": "If true (default) the system sets the Secure (TLS) flag", + "type": "boolean", + "default": true + }, + "alwaysSet": { + "title": "Always set", + "description": "If true, set cookie with every HTTP response (default false)", + "type": "boolean", + "default": false + }, + "encrypt": { + "title": "Encrypt cookie", + "description": "If true, prevent disclosure of (or tampering with) ADC info in cookie (default false, to reduce latency)", + "type": "boolean", + "default": false + }, + "passphrase": { + "title": "Passphrase", + "description": "Used to create secret key for cookie encryption", + "type": "object", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "allOf": [ + { + "$ref": "#/definitions/Secret" + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "object" + } + }, + { + "f5PostProcess": { + "tag": "secret" + } + } + ] + } + }, + "if": { + "properties": { + "encrypt": { + "const": true + } + }, + "required": [ + "encrypt" + ] + }, + "then": { + "required": [ + "passphrase" + ] + } + }, + "else": { + "if": { + "properties": { + "cookieMethod": { + "const": "hash" + } + } + }, + "then": { + "properties": { + "cookieName": { + "minLength": 1 + }, + "startAt": { + "title": "Start at", + "description": "Index of first octet in cookie value to hash", + "type": "integer", + "minimum": 0, + "maximum": 4096, + "default": 0 + }, + "hashCount": { + "title": "Hash count", + "description": "Number of octets in cookie value to hash; 0 (default) means all", + "type": "integer", + "minimum": 0, + "maximum": 4096, + "default": 0 + } + } + }, + "else": { + "$comment": "No extra properties for passive or rewrite." + } + } + }, + "Persist_Hash": { + "title": "Hash persistence", + "description": "Configures a hash persistence profile", + "type": "object", + "properties": { + "duration": { + "title": "Duration", + "description": "Lifetime of persistence record (seconds, default 180)", + "type": "integer", + "minimum": 0, + "maximum": 604800, + "default": 180 + }, + "hashAlgorithm": { + "title": "Hash algorithm", + "description": "Specifies the algorithm the system uses for hash persistence load balancing. The hash result is the input for the algorithm.", + "type": "string", + "enum": [ + "carp", + "default" + ], + "default": "default" + }, + "startAt": { + "title": "Start at", + "description": "Index of first octet in packet to hash", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "count": { + "title": "Hash count", + "description": "Number of octets in cookie value to hash; 0 (default) means all", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "startPattern": { + "title": "Start pattern", + "description": "Regular expression which matches start of data to hash; default \"\" averts matching", + "type": "string", + "default": "" + }, + "endPattern": { + "title": "End pattern", + "description": "Regular expression which matches end of data to hash; default \"\" averts matching", + "type": "string", + "default": "" + }, + "bufferLimit": { + "title": "Buffer limit", + "description": "Number of octets to buffer while pattern-matching", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "iRule": { + "title": "iRule", + "description": "BIG-IP AS3 pointer to iRule if any (declared separately)", + "if": { + "type": "string" + }, + "then": { + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "iRule" + } + }, + "required": [ + "class" + ] + } + } + }, + "else": { + "type": "object", + "properties": { + "bigip": { + "title": "BIG-IP iRule", + "description": "Pathname of existing BIG-IP iRule", + "type": "string", + "format": "f5bigip" + }, + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to iRule (declared separately)", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "iRule" + } + }, + "required": [ + "class" + ] + } + } + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm rule" + ] + } + } + } + } + }, + "Persist_MSRDP": { + "title": "MSRDP persistence", + "description": "Configures a Microsoft(r) Remote Display Protocol (MSRDP) persistence profile", + "type": "object", + "properties": { + "duration": { + "title": "Duration", + "description": "Lifetime of persistence record (seconds, default 300)", + "type": "integer", + "minimum": 0, + "maximum": 604800, + "default": 300 + }, + "sessionBroker": { + "title": "Session broker", + "description": "If true (default), the system will persist the client to the server chosen by session broker", + "type": "boolean", + "default": true + } + } + }, + "Persist_SIP": { + "title": "SIP info persistence", + "description": "Configures a Session Initiation Protocol (SIP) persistence profile", + "type": "object", + "properties": { + "duration": { + "title": "Duration", + "description": "Lifetime of persistence record (seconds, default 180)", + "type": "integer", + "minimum": 0, + "maximum": 604800, + "default": 180 + }, + "header": { + "title": "SIP header", + "description": "Suggested values include: Call-ID, To, From, SIP-ETag, and Subject", + "type": "string", + "minLength": 1 + } + }, + "required": [ + "header" + ] + }, + "Persist_TLS_Session": { + "title": "TLS session persistence", + "description": "Configures a Secure Socket Layer (SSL) persistence profile", + "type": "object", + "properties": { + "duration": { + "title": "Duration", + "description": "Lifetime of persistence record (seconds, default 300)", + "type": "integer", + "minimum": 0, + "maximum": 604800, + "default": 300 + } + } + }, + "Persist_UIE": { + "title": "Universal persistence", + "description": "Configures a universal persistence profile", + "type": "object", + "properties": { + "duration": { + "title": "Duration", + "description": "Lifetime of persistence record (seconds, default 180)", + "type": "integer", + "minimum": 0, + "maximum": 604800, + "default": 180 + }, + "iRule": { + "title": "iRule", + "description": "BIG-IP AS3 pointer to required iRule (declared separately)", + "if": { + "type": "string" + }, + "then": { + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "iRule" + } + }, + "required": [ + "class" + ] + } + } + }, + "else": { + "type": "object", + "properties": { + "bigip": { + "title": "BIG-IP iRule", + "description": "Pathname of existing BIG-IP iRule", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "required": [ + "bigip" + ], + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm rule" + ] + } + } + } + }, + "required": [ + "iRule" + ] + }, + "Pool": { + "title": "Pool", + "description": "Declares a service pool", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Pool" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "allowNATEnabled": { + "title": "Enable Allow NAT", + "description": "If true (default), NATs are automatically enabled for any connections using this pool.", + "type": "boolean", + "default": true + }, + "allowSNATEnabled": { + "title": "Enable Allow SNAT", + "description": "If true (default), SNATs are automatically enabled for any connections using this pool.", + "type": "boolean", + "default": true + }, + "loadBalancingMode": { + "title": "LB mode", + "description": "Load-balancing mode", + "type": "string", + "enum": [ + "dynamic-ratio-member", + "dynamic-ratio-node", + "fastest-app-response", + "fastest-node", + "least-connections-member", + "least-connections-node", + "least-sessions", + "observed-member", + "observed-node", + "predictive-member", + "predictive-node", + "ratio-least-connections-member", + "ratio-least-connections-node", + "ratio-member", + "ratio-node", + "ratio-session", + "round-robin", + "weighted-least-connections-member", + "weighted-least-connections-node" + ], + "default": "round-robin" + }, + "minimumMembersActive": { + "title": "Minimum active", + "description": "Pool is down when fewer than this number of members are up", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 1 + }, + "monitors": { + "title": "Monitors", + "description": "List of health monitors (each by name or BIG-IP AS3 pointer)", + "type": "array", + "items": { + "$ref": "#/definitions/Basic_Monitor" + }, + "$comment": "uniqueItems: true" + }, + "minimumMonitors": { + "title": "Minimum monitors", + "description": "Member is down when fewer than minimum monitors report it healthy. Specify 'all' to require all monitors to be up.", + "oneOf": [ + { + "type": "string", + "const": "all" + }, + { + "type": "integer", + "minimum": 1, + "maximum": 63 + } + ] + }, + "members": { + "title": "Members", + "description": "Set of Pool members", + "type": "array", + "items": { + "$ref": "#/definitions/Pool_Member" + }, + "$comment": "uniqueItems: true", + "f5PostProcess": { + "tag": "node" + } + }, + "metadata": { + "$ref": "#/definitions/Metadata" + }, + "reselectTries": { + "title": "Reselect tries", + "description": "Maximum number of attempts to find a responsive member for a connection", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "serviceDownAction": { + "title": "Service-down action", + "description": "Specifies connection handling when member is non-responsive", + "type": "string", + "enum": [ + "drop", + "none", + "reselect", + "reset" + ], + "default": "none" + }, + "slowRampTime": { + "title": "Slow ramp time", + "description": "BIG-IP AS3 slowly the connection rate to a newly-active member slowly during this interval (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 900, + "default": 10 + } + }, + "additionalProperties": false, + "if": { + "required": [ + "monitors" + ] + }, + "then": { + "properties": { + "minimumMonitors": { + "default": 1 + } + } + }, + "required": [ + "class" + ] + }, + "Address_Discovery_Common": { + "type": "object", + "allOf": [ + { + "if": { + "properties": { + "addressDiscovery": { + "enum": [ + "fqdn", + "aws", + "azure", + "gce", + "consul" + ] + } + }, + "required": [ + "addressDiscovery" + ] + }, + "then": { + "properties": { + "updateInterval": { + "title": "Update interval", + "description": "Server-discovery update interval (seconds)", + "type": "integer", + "minimum": 1, + "maximum": 3600, + "default": 60 + } + }, + "not": { + "required": [ + "bigip" + ] + } + } + }, + { + "if": { + "properties": { + "addressDiscovery": { + "const": "static" + } + } + }, + "then": { + "oneOf": [ + { + "required": [ + "bigip" + ] + }, + { + "properties": { + "serverAddresses": { + "title": "Server addresses", + "description": "Static IP addresses of servers (nodes). Shorthand for 'servers' where you only want to specify the address property.", + "type": "array", + "items": { + "title": "Server address", + "description": "Static IP address for this server (node)", + "type": "string", + "format": "f5ip" + }, + "uniqueItems": true + }, + "servers": { + "title": "Servers", + "description": "Same as serverAddresses, but allowing for further specification of each node.", + "type": "array", + "items": { + "title": "Servers", + "description": "Static IP address and other details for this server (node)", + "type": "object", + "properties": { + "address": { + "title": "Server address", + "description": "Static IP address for this server (node)", + "type": "string", + "format": "f5ip" + }, + "name": { + "title": "Name", + "type": "string", + "pattern": "^[A-Za-z][0-9A-Za-z_.-]*$", + "maxLength": 64 + } + }, + "required": [ + "address" + ], + "additionalProperties": false + } + } + }, + "if": { + "required": [ + "monitors" + ] + }, + "then": { + "properties": { + "minimumMonitors": { + "default": 1 + } + } + }, + "anyOf": [ + { + "required": [ + "serverAddresses" + ] + }, + { + "required": [ + "servers" + ] + } + ] + } + ] + } + }, + { + "if": { + "properties": { + "addressDiscovery": { + "const": "fqdn" + } + }, + "required": [ + "addressDiscovery" + ] + }, + "then": { + "properties": { + "hostname": { + "title": "Hostname", + "type": "string", + "format": "hostname" + }, + "addressFamily": { + "title": "Address family", + "description": "Selects IPv4/6 and DNS A/AAAA RR's", + "type": "string", + "enum": [ + "IPv4", + "IPv6" + ], + "default": "IPv4" + }, + "autoPopulate": { + "title": "Auto-populate", + "description": "If true use multiple server (node) addresses when available, otherwise use only one", + "type": "boolean", + "default": false + }, + "queryInterval": { + "title": "Query interval", + "description": "Normal DNS query interval (seconds, default 0 means RR TTL)", + "type": "integer", + "minimum": 0, + "default": 0 + }, + "downInterval": { + "title": "Down interval", + "description": "DNS retry interval after resolution failure (seconds)", + "type": "integer", + "minimum": 0, + "default": 5 + }, + "fqdnPrefix": { + "description": "String to prepend onto the hostname to create the node name", + "type": "string", + "oneOf": [ + { + "pattern": "^[A-Za-z][0-9A-Za-z_.-]*$" + }, + { + "const": "" + } + ], + "default": "" + } + }, + "if": { + "required": [ + "monitors" + ] + }, + "then": { + "properties": { + "minimumMonitors": { + "default": 1 + } + } + }, + "required": [ + "hostname" + ] + } + }, + { + "if": { + "properties": { + "addressDiscovery": { + "const": "aws" + } + }, + "required": [ + "addressDiscovery" + ] + }, + "then": { + "$ref": "#/definitions/Service_Discovery_AWS" + } + }, + { + "if": { + "properties": { + "addressDiscovery": { + "const": "azure" + } + }, + "required": [ + "addressDiscovery" + ] + }, + "then": { + "$ref": "#/definitions/Service_Discovery_Azure" + } + }, + { + "if": { + "properties": { + "addressDiscovery": { + "const": "gce" + } + }, + "required": [ + "addressDiscovery" + ] + }, + "then": { + "$ref": "#/definitions/Service_Discovery_GCE" + } + }, + { + "if": { + "properties": { + "addressDiscovery": { + "const": "consul" + } + }, + "required": [ + "addressDiscovery" + ] + }, + "then": { + "$ref": "#/definitions/Service_Discovery_Consul" + } + } + ] + }, + "Address_Discovery": { + "title": "Address_Discovery", + "description": "Sharable Pool Member information", + "type": "object", + "properties": { + "class": { + "type": "string", + "const": "Address_Discovery" + }, + "addressDiscovery": { + "title": "Address discovery", + "description": "Selects how server (node) addresses are discovered", + "type": "string", + "enum": [ + "static", + "fqdn", + "event", + "aws", + "gce", + "azure", + "consul" + ], + "f5PostProcess": { + "tag": "serviceDiscovery" + } + }, + "shareNodes": { + "description": "If enabled, nodes are created in /Common instead of the tenant's partition", + "type": "boolean", + "default": false + } + }, + "required": [ + "addressDiscovery" + ], + "allOf": [ + { + "$ref": "#/definitions/Address_Discovery_Common" + } + ] + }, + "Pool_Member": { + "title": "Pool member", + "description": "Declares a service-pool member", + "type": "object", + "properties": { + "remark": { + "$ref": "#/definitions/Remark" + }, + "servicePort": { + "title": "Service port", + "description": "Service L4 port (optional port-discovery may override)", + "type": "integer", + "minimum": 0, + "maximum": 65535 + }, + "bigip": { + "title": "BIG-IP node", + "description": "If defined, pathname of existing BIG-IP node", + "type": "string", + "format": "f5bigip" + }, + "enable": { + "description": "Maps to BIG-IP pool member state", + "type": "boolean", + "default": true + }, + "connectionLimit": { + "title": "Connection limit", + "description": "Maximum concurrent connections to member", + "type": "integer", + "minimum": 0, + "maximum": 2147483647, + "default": 0 + }, + "rateLimit": { + "title": "Rate limit", + "description": "Value zero prevents use of member", + "type": "integer", + "minimum": -1, + "maximum": 2147483647, + "default": -1 + }, + "dynamicRatio": { + "title": "Dynamic ratio", + "description": "Specifies a range of numbers that you want the system to use in conjunction with the ratio load balancing method", + "type": "integer", + "minimum": 0, + "maximum": 100, + "default": 1 + }, + "ratio": { + "title": "Ratio", + "description": "Specifies the weight of the pool member for load balancing purposes", + "type": "integer", + "minimum": 0, + "maximum": 100, + "default": 1 + }, + "priorityGroup": { + "title": "Priority group", + "description": "Specifies the priority group within the pool for this pool member", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "monitors": { + "title": "Monitors", + "description": "List of monitors (each by name or BIG-IP AS3 pointer)", + "type": "array", + "items": { + "$ref": "#/definitions/Basic_Monitor" + }, + "$comment": "uniqueItems: true" + }, + "minimumMonitors": { + "title": "Minimum monitors", + "description": "Member is down when fewer than minimum monitors report it healthy", + "type": "integer", + "minimum": 0, + "maximum": 63 + }, + "metadata": { + "$ref": "#/definitions/Metadata" + }, + "adminState": { + "title": "Administration State", + "description": "Setting adminState to enable will create the node in an operational state. Set to disable to disallow new connections but allow existing connections to drain. Set to offline to force immediate termination of all connections.", + "type": "string", + "enum": [ + "enable", + "disable", + "offline" + ], + "default": "enable" + }, + "addressDiscovery": { + "title": "Address discovery", + "description": "Selects how server (node) addresses are discovered", + "type": [ + "string", + "object" + ], + "if": { + "type": "string" + }, + "then": { + "enum": [ + "static", + "fqdn", + "event", + "aws", + "gce", + "azure", + "consul" + ] + }, + "else": { + "$ref": "#/definitions/Pointer_Address_Discovery" + }, + "default": "static", + "f5PostProcess": { + "tag": "serviceDiscovery", + "data": { + "exceptions": [ + "static", + "fqdn" + ] + } + } + }, + "shareNodes": { + "description": "If enabled, nodes are created in /Common instead of the tenant's partition", + "type": "boolean", + "default": false + }, + "routeDomain": { + "description": "The Route Domain to use for the pool member", + "$comment": "Due to the fact the Route Domain id is required for address modification, BIG-IP AS3 does NOT support this route domain reference as anything but the id.", + "type": "integer", + "minimum": 0, + "maximum": 65534 + } + }, + "required": [ + "servicePort" + ], + "allOf": [ + { + "$ref": "#/definitions/Address_Discovery_Common" + }, + { + "if": { + "required": [ + "bigip" + ] + }, + "then": { + "if": { + "required": [ + "monitors" + ] + }, + "then": { + "properties": { + "minimumMonitors": { + "default": 1 + } + } + } + } + }, + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm node" + ] + } + } + ] + }, + "Service_Discovery_Polling_Core": { + "type": "object", + "properties": { + "addressRealm": { + "title": "Address realm", + "description": "Specifies whether to look for public or private IP addresses", + "type": "string", + "enum": [ + "public", + "private" + ], + "default": "private" + }, + "credentialUpdate": { + "title": "Credential Update", + "type": "boolean", + "description": "Specifies whether you are updating your credentials", + "default": false + }, + "undetectableAction": { + "title": "Undetectable Action", + "description": "Action to take when node cannot be detected", + "type": "string", + "enum": [ + "disable", + "remove" + ], + "default": "remove" + } + } + }, + "Service_Discovery_Polling_Core_Tagged": { + "properties": { + "tagKey": { + "title": "Tag key", + "type": "string", + "minLength": 1, + "description": "The tag key associated with the node to add to this pool" + }, + "tagValue": { + "title": "Tag value", + "type": "string", + "minLength": 1, + "description": "The tag value associated with the node to add to this pool" + } + }, + "allOf": [ + { + "$ref": "#/definitions/Service_Discovery_Polling_Core" + } + ] + }, + "Service_Discovery_AWS": { + "description": "Service Discovery properties for Amazon Web Services (AWS)", + "properties": { + "region": { + "title": "AWS region", + "description": "Empty string (default) means region in which ADC is running", + "type": "string", + "default": "" + }, + "roleARN": { + "title": "Role Amazon Resource Name", + "description": "Assume a role (also requires the externalId field)", + "type": "string", + "minLength": 1 + }, + "externalId": { + "title": "External Id", + "description": "External Id", + "type": "string", + "minLength": 1 + }, + "accessKeyId": { + "title": "Access Key Id", + "description": "Information for discovering AWS nodes that are not in the same region as your BIG-IP (also requires the secretAccessKey field", + "type": "string", + "minLength": 1 + }, + "secretAccessKey": { + "title": "Secret Access Key", + "description": "Will be stored in the declaration as an encrypted string", + "oneOf": [ + { + "type": "string", + "minLength": 1 + }, + { + "allOf": [ + { + "required": [ + "ciphertext" + ] + }, + { + "$ref": "#/definitions/Secret" + } + ] + } + ], + "f5PostProcess": { + "tag": "longSecret" + } + } + }, + "dependencies": { + "roleARN": { + "required": [ + "externalId" + ] + }, + "externalId": { + "required": [ + "roleARN" + ] + }, + "accessKeyId": { + "required": [ + "secretAccessKey" + ] + }, + "secretAccessKey": { + "required": [ + "accessKeyId" + ] + } + }, + "if": { + "required": [ + "monitors" + ] + }, + "then": { + "properties": { + "minimumMonitors": { + "type": "integer", + "default": 1 + } + } + }, + "required": [ + "region", + "tagKey", + "tagValue" + ], + "allOf": [ + { + "$ref": "#/definitions/Service_Discovery_Polling_Core_Tagged" + } + ] + }, + "Service_Discovery_Azure": { + "description": "Service Discovery properties for Azure", + "properties": { + "resourceGroup": { + "title": "Resource group", + "description": "Azure Resource Group name", + "type": "string" + }, + "subscriptionId": { + "title": "Subscription ID", + "description": "Azure subscription ID", + "type": "string" + }, + "useManagedIdentity": { + "title": "Use Managed Identity", + "description": "Use Azure managed identity rather than directoryId, applicationId, and apiAccessKey", + "type": "boolean", + "default": false + }, + "directoryId": { + "title": "(Azure) Directory ID", + "description": "Azure Active Directory ID (AKA tenant ID)", + "type": "string" + }, + "applicationId": { + "title": "(Azure) Application ID", + "description": "Azure registered application ID (AKA client ID)", + "type": "string" + }, + "apiAccessKey": { + "title": "Azure API access key", + "description": "Azure registered application API access key (AKA service principal secret). Will be stored in the declaration in an encrypted format.", + "oneOf": [ + { + "type": "string", + "minLength": 1 + }, + { + "allOf": [ + { + "required": [ + "ciphertext" + ] + }, + { + "$ref": "#/definitions/Secret" + } + ] + } + ], + "f5PostProcess": { + "tag": "longSecret" + } + }, + "resourceType": { + "description": "Type of resource identified by resourceId. This can be used in place of tagKey/tagValue.", + "type": "string", + "enum": [ + "tag", + "scaleSet" + ] + }, + "resourceId": { + "description": "ID of resource to find nodes by.", + "type": "string" + }, + "environment": { + "title": "Azure environment", + "description": "Azure environment name. Required if environment should not be determined by instance metadata.", + "type": "string", + "default": "Azure" + } + }, + "required": [ + "resourceGroup", + "subscriptionId" + ], + "allOf": [ + { + "$ref": "#/definitions/Service_Discovery_Polling_Core_Tagged" + }, + { + "if": { + "required": [ + "monitors" + ] + }, + "then": { + "properties": { + "minimumMonitors": { + "type": "integer", + "default": 1 + } + } + } + }, + { + "if": { + "required": [ + "tagKey", + "tagValue" + ] + }, + "then": { + "not": { + "required": [ + "resourceId", + "resourceType" + ] + } + }, + "else": { + "required": [ + "resourceId", + "resourceType" + ], + "not": { + "required": [ + "tagKey", + "tagValue" + ] + } + } + }, + { + "if": { + "properties": { + "useManagedIdentity": { + "const": true + } + } + }, + "then": { + "allOf": [ + { + "not": { + "required": [ + "directoryId" + ] + } + }, + { + "not": { + "required": [ + "applicationId" + ] + } + }, + { + "not": { + "required": [ + "apiAccessKey" + ] + } + } + ] + }, + "else": { + "required": [ + "directoryId", + "applicationId", + "apiAccessKey" + ] + } + } + ] + }, + "Service_Discovery_GCE": { + "description": "Service Discovery properties for Google Compute Engine (GCE)", + "properties": { + "region": { + "title": "GCE region", + "description": "Empty string (default) means region in which ADC is running", + "type": "string" + }, + "encodedCredentials": { + "title": "Encoded Service Account Credentials", + "description": "Base 64 encoded service account credentials JSON", + "oneOf": [ + { + "type": "string", + "minLength": 1 + }, + { + "allOf": [ + { + "required": [ + "ciphertext" + ] + }, + { + "$ref": "#/definitions/Secret" + } + ] + } + ], + "f5PostProcess": { + "tag": "longSecret" + } + }, + "projectId": { + "title": "Project Id", + "description": "For Google Cloud Engine (GCE) only: The ID of the project in which the members are located", + "type": "string" + } + }, + "if": { + "required": [ + "monitors" + ] + }, + "then": { + "properties": { + "minimumMonitors": { + "type": "integer", + "default": 1 + } + } + }, + "required": [ + "region", + "tagKey", + "tagValue" + ], + "allOf": [ + { + "$ref": "#/definitions/Service_Discovery_Polling_Core_Tagged" + } + ] + }, + "Service_Discovery_Consul": { + "description": "Service Discovery properties for Consul", + "properties": { + "uri": { + "title": "URI", + "type": "string", + "minLength": 1, + "description": "The location of the node data" + }, + "encodedToken": { + "title": "Encoded ACL Token", + "description": "Base 64 encoded bearer token to make requests to the Consul API. Will be stored in the declaration in an encrypted format.", + "oneOf": [ + { + "type": "string", + "minLength": 1 + }, + { + "allOf": [ + { + "required": [ + "ciphertext" + ] + }, + { + "$ref": "#/definitions/Secret" + } + ] + } + ], + "f5PostProcess": { + "tag": "longSecret" + } + }, + "trustCA": { + "title": "Trusted CA bundle", + "description": "CA Bundle to validate server certificates", + "allOf": [ + { + "$ref": "#/definitions/Pointer_CA_Bundle" + } + ] + }, + "rejectUnauthorized": { + "title": "Reject Unauthorized Connection", + "description": "If true, the server certificate is verified against the list of supplied/default CAs when making requests to the Consul API.", + "type": "boolean", + "default": true + }, + "jmesPathQuery": { + "title": "JMESPath Query", + "type": "string", + "description": "Custom JMESPath Query" + } + }, + "if": { + "required": [ + "monitors" + ] + }, + "then": { + "properties": { + "minimumMonitors": { + "type": "integer", + "default": 1 + } + } + }, + "required": [ + "uri" + ], + "allOf": [ + { + "$ref": "#/definitions/Service_Discovery_Polling_Core" + } + ] + }, + "TLS_Server": { + "title": "TLS_Server", + "description": "TLS server parameters (connections arriving to ADC)", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "TLS_Server" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "requireSNI": { + "title": "Require SNI", + "description": "When a client sends no or unknown SNI and Require SNI is false (default), the system uses the primary certificate, otherwise the system rejects the client", + "type": "boolean", + "default": false + }, + "alertTimeout": { + "title": "Alert Timeout", + "description": "Specifies the duration of time, in seconds, for the system to try to close an SSL connection before resetting the connection. The default is 'indefinite'. You can also specify 'immediate', or an integer.", + "oneOf": [ + { + "type": "integer", + "maximum": 4294967294, + "minimum": 1 + }, + { + "type": "string", + "enum": [ + "immediate", + "indefinite" + ] + } + ], + "default": "indefinite" + }, + "cacheTimeout": { + "title": "Cache Timeout", + "description": "Sets the cache timeout (in seconds)", + "type": "integer", + "maximum": 86400, + "minimum": 0, + "default": 3600 + }, + "certificates": { + "title": "Certificates", + "description": "Primary and (optional) additional certificates (order is significant, element 0 is primary cert)", + "type": "array", + "items": { + "type": "object", + "properties": { + "matchToSNI": { + "title": "Match to SNI", + "description": "If value is FQDN (wildcard okay), ignore all names in certificate and select this cert when SNI matches value (or by default)", + "type": "string" + }, + "sniDefault": { + "title": "Default SNI", + "description": "When true, this profile is the default SSL profile when a client connection does not specify a known server name, or does not specify any server name at all. The default value is false", + "type": "boolean", + "default": false + }, + "enabled": { + "title": "Enabled", + "description": "Enables SSL processing", + "type": "boolean", + "default": true + }, + "certificate": { + "title": "Certificate", + "description": "BIG-IP AS3 pointer to Certificate declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Certificate" + } + }, + "required": [ + "class" + ] + } + } + }, + "proxyCertificate": { + "title": "Proxy Certificate", + "description": "BIG-IP AS3 pointer to Certificate declaration for SSL forward proxy", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Certificate" + } + }, + "required": [ + "class" + ] + } + } + } + }, + "additionalProperties": false, + "required": [ + "certificate" + ] + }, + "minItems": 1, + "$comment": "uniqueItems: true" + }, + "ciphers": { + "title": "Ciphers", + "description": "Ciphersuite selection string. ciphers and cipherGroup are mutually exclusive, only use one.", + "type": "string" + }, + "cipherGroup": { + "description": "Pointer to a cipherGroup. cipherGroup and ciphers are mutually exclusive, only use one.", + "$ref": "#/definitions/Pointer_Cipher_Group" + }, + "authenticationMode": { + "title": "Authentication mode", + "description": "Client certificate authentication mode", + "type": "string", + "enum": [ + "ignore", + "request", + "require" + ], + "default": "ignore" + }, + "authenticationFrequency": { + "title": "Authentication frequency", + "description": "Client certificate authentication frequency", + "type": "string", + "enum": [ + "one-time", + "every-time" + ], + "default": "one-time" + }, + "authenticationTrustCA": { + "title": "Authentication trust CA", + "description": "BIG-IP AS3 pointer to declaration of CA Bundle used to validate client certificates", + "if": { + "type": "string" + }, + "then": { + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "CA_Bundle" + } + }, + "required": [ + "class" + ] + } + } + }, + "else": { + "type": "object", + "properties": { + "bigip": { + "title": "BIG-IP CA bundle", + "description": "Pathname of existing BIG-IP CA bundle", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "required": [ + "bigip" + ], + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys file ssl-cert" + ] + } + } + }, + "authenticationInviteCA": { + "title": "Authentication invite CA", + "description": "BIG-IP AS3 pointer to declaration of CA Bundle used to invite client certificates", + "if": { + "type": "string" + }, + "then": { + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "CA_Bundle" + } + }, + "required": [ + "class" + ] + } + } + }, + "else": { + "type": "object", + "properties": { + "bigip": { + "title": "BIG-IP CA bundle", + "description": "Pathname of existing BIG-IP CA bundle", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "required": [ + "bigip" + ], + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys file ssl-cert" + ] + } + } + }, + "crlFile": { + "title": "Certificate Revocation List (CRL) File", + "description": "Specifies the name of a file containing a list of revoked client certificates", + "allOf": [ + { + "$ref": "#/definitions/Pointer_SSL_CRL_File" + } + ] + }, + "allowExpiredCRL": { + "title": "Allow Expired CRL", + "description": "Specifies if the CRL can be used even if it has expired", + "type": "boolean", + "default": false + }, + "cacheCertificateEnabled": { + "title": "Cache Certificate Enabled", + "description": "Enables or disables (default) caching certificates by IP address and port number", + "type": "boolean", + "default": false + }, + "c3dOCSPUnknownStatusAction": { + "title": "C3D OCSP Unknown Status Action", + "description": "Specifies the BIG-IP action when the OCSP returns unknown status. The default is drop", + "type": "string", + "enum": [ + "drop", + "ignore" + ], + "default": "drop" + }, + "c3dOCSP": { + "title": "C3D OCSP", + "description": "Specifies SSL Client Certificate Constrained Delegation (C3D) OCSP object that the BIG-IP SSL should use to connect to the OCSP responder and check the client certificate status", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Certificate_Validator_OCSP" + } + ] + }, + "c3dEnabled": { + "title": "C3D Delegation Enabled", + "description": "Enables or disables SSL Client Certificate Constrained Delegation (C3D). The default is false", + "type": "boolean", + "default": false + }, + "forwardProxyEnabled": { + "title": "Forward Proxy Enabled", + "description": "Enables or disables (default) SSL forward proxy", + "type": "boolean", + "default": false + }, + "forwardProxyBypassEnabled": { + "title": "Forward Proxy Bypass Enabled", + "description": "Enables or disables (default) SSL forward proxy bypass", + "type": "boolean", + "default": false + }, + "forwardProxyBypassAllowlist": { + "title": "Forward Proxy Bypass Allowlist", + "description": "Specifies the data group name of hostname allowlist when both SSL forwardProxyEnabled & forwardProxyBypassEnabled features are set to true.", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Data_Group" + } + ] + }, + "ldapStartTLS": { + "title": "Client-LDAP Profile", + "description": "Creates a client LDAP profile with the specified activation mode STARTTLS.", + "type": "string", + "enum": [ + "none", + "allow", + "require" + ] + }, + "smtpsStartTLS": { + "title": "Simple Mail Transfer Protocol Security (SMTPS) profile", + "description": "Creates a SMTPS profile with the specified activation mode STARTTTLS. Because HTTP profile is not compatible with SMTPS use with Service_TCP instead of Service_HTTPS. Also incompatible with ldapStartTLS. Use only one of the two.", + "type": "string", + "enum": [ + "none", + "allow", + "require" + ] + }, + "staplerOCSPEnabled": { + "description": "Specifies whether to enable OCSP stapling", + "type": "boolean", + "default": false + }, + "insertEmptyFragmentsEnabled": { + "title": "Insert Empty Fragments Enabled", + "description": "Enables a countermeasure against an SSL 3.0/TLS 1.0 protocol vulnerability affecting CBC ciphers. These ciphers cannot be handled by certain broken SSL implementations.", + "type": "boolean", + "default": false + }, + "singleUseDhEnabled": { + "title": "Single Use DH Enabled", + "description": "Creates a new key when using temporary/ephemeral DH parameters. This option must be used to prevent small subgroup attacks, when the DH parameters were not generated using strong primes (for example. when using DSA-parameters). If strong primes were used, it is not strictly necessary to generate a new DH key during each handshake, but F5 Networks recommends it. Enable the Single DH Use option whenever temporary or ephemeral DH parameters are used.", + "type": "boolean", + "default": false + }, + "tls1_3Enabled": { + "title": "TLS 1.3", + "description": "Allow TLS 1.3 Protocol. Note: tls1_3Enabled is only supported in tmos version 14.0+.", + "type": "boolean", + "default": false + }, + "tls1_2Enabled": { + "title": "TLS 1.2", + "description": "Allow TLS 1.2 Protocol.", + "type": "boolean", + "default": true + }, + "tls1_1Enabled": { + "title": "TLS 1.1", + "description": "Allow TLS 1.1 Protocol.", + "type": "boolean", + "default": true + }, + "tls1_0Enabled": { + "title": "TLS 1.0", + "description": "Allow TLS 1.0 Protocol.", + "type": "boolean", + "default": true + }, + "renegotiationEnabled": { + "title": "Renegotiation", + "description": "Controls on a per-connection basis how the system responds to mid-stream SSL reconnection requests.", + "type": "boolean", + "default": true + }, + "retainCertificateEnabled": { + "title": "Retain Certificate", + "description": "When enabled, server certificate is retained in SSL session.", + "type": "boolean", + "default": true + }, + "namingScheme": { + "description": "Scheme to use when naming generated tmsh configuration", + "type": "string", + "enum": [ + "numbered", + "certificate" + ], + "default": "numbered" + }, + "sslEnabled": { + "title": "SSL", + "description": "Allow SSL protocol", + "type": "boolean", + "default": true + }, + "ssl3Enabled": { + "title": "SSL v3", + "description": "Allow SSL v3 protocol", + "type": "boolean", + "default": true + }, + "proxySslEnabled": { + "title": "Proxy SSL Enabled", + "description": "When enabled, further modification of application traffic within an SSL tunnel is allowed while still allowing the server to perform necessary authorization, authentication, and auditing steps. Requires a corresponding TLS_Client with this enabled to perform transparent SSL decryption.", + "type": "boolean", + "default": false + }, + "proxySslPassthroughEnabled": { + "title": "Proxy SSL Passthrough Enabled", + "description": "When enabled, it allows Proxy SSL to passthrough the traffic when ciphersuite negotiated between the client and server is not supported. Requires a corresponding TLS_Client with this enabled to perform transparent SSL decryption.", + "type": "boolean", + "default": false + }, + "secureRenegotiation": { + "title": "Secure Renegotiation", + "description": "Specifies the secure renegotiation mode. When set to require, any client attempting to renegotiate that does not support secure renegotiation will have its connection aborted. When set to require-strict, any client attempting to connect that does not support secure renegotiation will have its initial handshake denied. When set to request, unpatched clients will be permitted to renegotiate. Setting to request is not recommended as it is subject to active man-in-the-middle attacks.", + "type": "string", + "enum": [ + "request", + "require", + "require-strict" + ], + "default": "require" + }, + "uncleanShutdownEnabled": { + "title": "Unclean Shutdown Enabled", + "description": "When enabled, the profile performs unclean shutdowns of all SSL connections, which means the underlying TCP connections are closed without exchanging the required SSL shutdown alerts.", + "type": "boolean", + "default": true + }, + "dtlsEnabled": { + "title": "DTLS Enabled", + "description": "Allows the DTLS protocol.", + "type": "boolean", + "default": true + }, + "dtls1_2Enabled": { + "title": "DTLS1.2 Enabled", + "description": "Allows the DTLS 1.2 protocol.", + "type": "boolean", + "default": true + }, + "certificateExtensions": { + "title": "Certificate Extensions", + "description": "Specifies the extensions of the web server certificates to be included in the generated certificates using SSL Forward Proxy.", + "type": "array", + "items": { + "type": "string", + "enum": [ + "authority-key-identifier", + "basic-constraints", + "certificate-policies", + "crl-distribution-points", + "extended-key-usage", + "fresh-crl", + "issuer-alternative-name", + "key-usage", + "subject-alternative-name", + "subject-directory-attribute", + "subject-key-identifier" + ] + } + }, + "nonSslConnectionsEnabled": { + "title": "Allow Non-SSL Connections", + "description": "Specifies if non-SSL connections are allowed.", + "type": "boolean", + "default": false + }, + "allowDynamicRecordSizing": { + "title": "Allow Dynamic Record Sizing", + "description": "Enables or disables dynamic application record sizing.", + "type": "boolean", + "default": false + }, + "dataZeroRoundTripTime": { + "title": "Data Zero Round Trip Time", + "description": "Specifies if TLSv1.3 should accept 0-RTT with early data, with or without anti-replay. To protect against packet replay, F5 recommends that you enable anti-replay. The default value is disabled, which means TLSv1.3 will discard any early data.", + "type": "string", + "enum": [ + "disabled", + "enabled-with-anti-replay", + "enabled-no-anti-replay" + ], + "default": "disabled" + }, + "renegotiateMaxRecordDelay": { + "title": "Renegotiate Max Record Delay", + "description": "Specifies the maximum number of SSL records that the traffic management system can receive before it renegotiates an SSL session. After the system receives this number of SSL records, it closes the connection. This setting applies to client profiles only.", + "oneOf": [ + { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 + }, + { + "type": "string", + "const": "indefinite" + } + ], + "default": "indefinite" + }, + "renegotiatePeriod": { + "title": "Renegotiate Period", + "description": "Specifies the number of seconds required to renegotiate an SSL session.", + "oneOf": [ + { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 + }, + { + "type": "string", + "const": "indefinite" + } + ], + "default": "indefinite" + }, + "renegotiateSize": { + "title": "Renegotiate Size", + "description": "Specifies the size of the application data, in megabytes, that is transmitted over the secure channel. If the size of the data is higher than this value, the traffic management system must renegotiate the SSL session.", + "oneOf": [ + { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 + }, + { + "type": "string", + "const": "indefinite" + } + ], + "default": "indefinite" + }, + "sslSignHash": { + "title": "SSL Sign Hash", + "description": "Specifies SSL sign hash algorithm which is used to sign and verify SSL Server Key Exchange and Certificate Verify messages for the specified SSL profiles.", + "type": "string", + "enum": [ + "any", + "sha1", + "sha256", + "sha384" + ], + "default": "any" + }, + "handshakeTimeout": { + "title": "Handshake Timeout", + "description": "Specifies the handshake timeout in seconds.", + "oneOf": [ + { + "type": "integer", + "minimum": 1, + "maximum": 4294967295 + }, + { + "type": "string", + "const": "indefinite" + } + ], + "default": 10 + } + }, + "additionalProperties": false, + "dependencies": { + "forwardProxyBypassAllowlist": { + "properties": { + "forwardProxyEnabled": { + "const": true + }, + "forwardProxyBypassEnabled": { + "const": true + } + } + }, + "smtpsStartTLS": { + "not": { + "required": [ + "ldapStartTLS" + ] + } + } + }, + "allOf": [ + { + "if": { + "properties": { + "c3dEnabled": { + "const": true + } + }, + "required": [ + "c3dEnabled" + ] + }, + "then": { + "properties": { + "authenticationMode": { + "enum": [ + "request", + "require" + ] + } + } + } + }, + { + "if": { + "properties": { + "authenticationMode": { + "enum": [ + "request", + "require" + ] + } + }, + "required": [ + "authenticationMode" + ] + }, + "then": { + "required": [ + "authenticationTrustCA" + ] + } + }, + { + "if": { + "required": [ + "ciphers" + ] + }, + "then": { + "not": { + "required": [ + "cipherGroup" + ] + } + } + }, + { + "if": { + "not": { + "required": [ + "ciphers", + "cipherGroup" + ] + } + }, + "then": { + "properties": { + "ciphers": { + "default": "DEFAULT" + } + } + } + } + ], + "required": [ + "class", + "certificates" + ] + }, + "TLS_Client": { + "title": "TLS_Client", + "description": "TLS client parameters (connections leaving ADC)", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "TLS_Client" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "sendSNI": { + "title": "Send SNI", + "description": "FQDN to send in SNI (optional)", + "type": "string", + "format": "hostname", + "default": "none" + }, + "sniDefault": { + "title": "Default SNI", + "description": "When true, this profile is the default SSL profile when a client connection does not specify a known server name, or does not specify any server name at all. The default value is false", + "type": "boolean", + "default": false + }, + "requireSNI": { + "title": "Require SNI", + "description": "When a client sends no or unknown SNI and Require SNI is false (default), the system uses the primary certificate, otherwise the system rejects the client", + "type": "boolean", + "default": false + }, + "alertTimeout": { + "title": "Alert Timeout", + "description": "Specifies the duration of time, in seconds, for the system to try to close an SSL connection before resetting the connection. The default is 'indefinite'. You can also specify 'immediate', or an integer.", + "oneOf": [ + { + "type": "integer", + "maximum": 4294967294, + "minimum": 1 + }, + { + "type": "string", + "enum": [ + "immediate", + "indefinite" + ] + } + ], + "default": "indefinite" + }, + "cacheTimeout": { + "title": "Cache Timeout", + "description": "Sets the cache timeout (in seconds)", + "type": "integer", + "maximum": 86400, + "minimum": 0, + "default": 3600 + }, + "ciphers": { + "title": "Ciphers", + "description": "Ciphersuite selection string. ciphers and cipherGroup are mutually exclusive, only use one.", + "type": "string" + }, + "cipherGroup": { + "description": "Pointer to a cipherGroup. cipherGroup and ciphers are mutually exclusive, only use one.", + "$ref": "#/definitions/Pointer_Cipher_Group" + }, + "authenticationFrequency": { + "title": "Authentication frequency", + "description": "Client certificate authentication frequency", + "type": "string", + "enum": [ + "one-time", + "every-time" + ], + "default": "one-time" + }, + "serverName": { + "title": "Server name", + "description": "FQDN which server certificate must match (optional)", + "type": "string", + "format": "hostname", + "default": "none" + }, + "validateCertificate": { + "title": "Validate certificate", + "description": "If false (default) accept any cert from server, else validate server cert against trusted CA bundle", + "type": "boolean", + "default": false + }, + "trustCA": { + "title": "Trusted CA bundle", + "description": "CA's trusted to validate server certificate; 'generic' (default) or else BIG-IP AS3 pointer to declaration of CA Bundle", + "if": { + "not": { + "type": "object" + } + }, + "then": { + "type": "string", + "enum": [ + "generic", + "none" + ], + "default": "generic" + }, + "else": { + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to declaration of CA bundle", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "CA_Bundle" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP CA bundle", + "description": "Pathname of existing BIG-IP CA bundle", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys file ssl-cert" + ] + } + } + }, + "ignoreExpired": { + "title": "Ignored expired", + "description": "If false (default) drop connections with expired server certificates", + "type": "boolean", + "default": false + }, + "ignoreUntrusted": { + "title": "Ignored untrusted", + "description": "If false (default) drop connections with untrusted server certificates", + "type": "boolean", + "default": false + }, + "sessionTickets": { + "title": "Session tickets", + "description": "If false (default) do not use rfc5077 session tickets", + "type": "boolean", + "default": false + }, + "clientCertificate": { + "title": "Client certificate", + "description": "BIG-IP AS3 pointer to client Certificate declaration (optional)", + "type": "string", + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Certificate" + } + }, + "required": [ + "class" + ] + } + } + }, + "crlFile": { + "title": "Certificate Revocation List (CRL) File", + "description": "Specifies the name of a file containing a list of revoked client certificates", + "allOf": [ + { + "$ref": "#/definitions/Pointer_SSL_CRL_File" + } + ] + }, + "allowExpiredCRL": { + "title": "Allow Expired CRL", + "description": "Specifies if the CRL can be used even if it has expired", + "type": "boolean", + "default": false + }, + "c3dCertificateAuthority": { + "title": "C3D Certificate Authority", + "description": "Pointer to a Certificate class which specifies the Certificate Authority values for C3D", + "type": "string", + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Certificate" + } + }, + "required": [ + "class" + ] + } + } + }, + "c3dCertificateExtensions": { + "title": "C3D Certificate Extensions", + "description": "Specifies the custom extension OID of the client certificates to be included in the generated certificates using SSL C3D", + "type": "array", + "items": { + "type": "string", + "enum": [ + "basic-constraints", + "extended-key-usage", + "key-usage", + "subject-alternative-name" + ] + }, + "default": [ + "basic-constraints", + "extended-key-usage", + "key-usage", + "subject-alternative-name" + ] + }, + "c3dCertificateLifespan": { + "title": "C3D Certificate Lifespan", + "description": "Specifies the lifespan of the certificate generated using the SSL client certificate constrained delegation", + "type": "integer", + "maximum": 8760, + "minimum": 0, + "default": 24 + }, + "c3dEnabled": { + "title": "C3D Enabled", + "description": "Enables or disables SSL Client certificate constrained delegation (C3D). Using C3D eliminates the need for requiring users to provide credentials twice for certain authentication actions", + "type": "boolean", + "default": false + }, + "forwardProxyEnabled": { + "title": "Forward Proxy Enabled", + "description": "Enables or disables (default) SSL forward proxy", + "type": "boolean", + "default": false + }, + "forwardProxyBypassEnabled": { + "title": "Forward Proxy Bypass Enabled", + "description": "Enables or disables (default) SSL forward proxy bypass", + "type": "boolean", + "default": false + }, + "ldapStartTLS": { + "title": "Server-LDAP Profile", + "description": "Creates a client LDAP profile with the specified activation mode STARTTLS.", + "type": "string", + "enum": [ + "none", + "allow", + "require" + ] + }, + "insertEmptyFragmentsEnabled": { + "title": "Insert Empty Fragments Enabled", + "description": "Enables a countermeasure against an SSL 3.0/TLS 1.0 protocol vulnerability affecting CBC ciphers. These ciphers cannot be handled by certain broken SSL implementations.", + "type": "boolean", + "default": false + }, + "singleUseDhEnabled": { + "title": "Single Use DH Enabled", + "description": "Creates a new key when using temporary/ephemeral DH parameters. This option must be used to prevent small subgroup attacks, when the DH parameters were not generated using strong primes (for example. when using DSA-parameters). If strong primes were used, it is not strictly necessary to generate a new DH key during each handshake, but F5 Networks recommends it. Enable the Single DH Use option whenever temporary or ephemeral DH parameters are used.", + "type": "boolean", + "default": false + }, + "tls1_3Enabled": { + "title": "TLS 1.3", + "description": "Allow TLS 1.3 Ciphers. Note: tls1_3Enabled is only supported in tmos version 14.0+.", + "type": "boolean", + "default": false + }, + "tls1_2Enabled": { + "title": "TLS 1.2", + "description": "Allow TLS 1.2 Ciphers.", + "type": "boolean", + "default": true + }, + "tls1_1Enabled": { + "title": "TLS 1.1", + "description": "Allow TLS 1.1 Ciphers.", + "type": "boolean", + "default": true + }, + "tls1_0Enabled": { + "title": "TLS 1.0", + "description": "Allow TLS 1.0 Ciphers.", + "type": "boolean", + "default": true + }, + "renegotiationEnabled": { + "title": "Renegotiation", + "description": "Controls on a per-connection basis how the system responds to mid-stream SSL reconnection requests.", + "type": "boolean", + "default": true + }, + "retainCertificateEnabled": { + "title": "Retain Certificate", + "description": "When enabled, server certificate is retained in SSL session.", + "type": "boolean", + "default": true + }, + "sslEnabled": { + "title": "SSL", + "description": "Allow SSL protocol", + "type": "boolean", + "default": true + }, + "ssl3Enabled": { + "title": "SSL v3", + "description": "Allow SSL v3 protocol", + "type": "boolean", + "default": true + }, + "proxySslEnabled": { + "title": "Proxy SSL Enabled", + "description": "When enabled, further modification of application traffic within an SSL tunnel is allowed while still allowing the server to perform necessary authorization, authentication, and auditing steps. Requires a corresponding TLS_Server with this enabled to perform transparent SSL decryption.", + "type": "boolean", + "default": false + }, + "proxySslPassthroughEnabled": { + "title": "Proxy SSL Passthrough Enabled", + "description": "When enabled, it allows Proxy SSL to passthrough the traffic when ciphersuite negotiated between the client and server is not supported. Requires a corresponding TLS_Server with this enabled to perform transparent SSL decryption.", + "type": "boolean", + "default": false + }, + "secureRenegotiation": { + "title": "Secure Renegotiation", + "description": "Specifies the secure renegotiation mode. When set to require, any connection to an unpatched server will be aborted. For TLS_Client, require and require-strict are the same. When set to request, connections to unpatched servers will be permitted. Setting to request is not recommended as it is subject to active man-in-the-middle attacks.", + "type": "string", + "enum": [ + "request", + "require", + "require-strict" + ], + "default": "require-strict" + }, + "uncleanShutdownEnabled": { + "title": "Unclean Shutdown Enabled", + "description": "When enabled, the profile performs unclean shutdowns of all SSL connections, which means the underlying TCP connections are closed without exchanging the required SSL shutdown alerts.", + "type": "boolean", + "default": true + }, + "dtlsEnabled": { + "title": "DTLS Enabled", + "description": "Allows the DTLS protocol.", + "type": "boolean", + "default": true + }, + "dtls1_2Enabled": { + "title": "DTLS1.2 Enabled", + "description": "Allows the DTLS 1.2 protocol.", + "type": "boolean", + "default": true + }, + "dataZeroRoundTripTime": { + "title": "Data Zero Round Trip Time", + "description": "Specifies if TLSv1.3 should send 0-RTT early data when available.", + "type": "boolean", + "default": false + }, + "renegotiatePeriod": { + "title": "Renegotiate Period", + "description": "Specifies the number of seconds from the initial connect time after which the system renegotiates an SSL session. The default value is indefinite, which means that you do not want the system to renegotiate SSL sessions.", + "oneOf": [ + { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 + }, + { + "type": "string", + "const": "indefinite" + } + ], + "default": "indefinite" + }, + "renegotiateSize": { + "title": "Renegotiate Size", + "description": "Specifies a throughput size, in megabytes, of SSL renegotiation. This option forces the traffic management system to renegotiate an SSL session based on the size, in megabytes, of application data that is transmitted over the secure channel. The default value is indefinite, which specifies that you do not want a throughput size.", + "oneOf": [ + { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 + }, + { + "type": "string", + "const": "indefinite" + } + ], + "default": "indefinite" + }, + "sslSignHash": { + "title": "SSL Sign Hash", + "description": "Specifies SSL sign hash algorithm which is used to sign and verify SSL Server Key Exchange and Certificate Verify messages for the specified SSL profiles.", + "type": "string", + "enum": [ + "any", + "sha1", + "sha256", + "sha384" + ], + "default": "any" + }, + "handshakeTimeout": { + "title": "Handshake Timeout", + "description": "Specifies the handshake timeout in seconds.", + "oneOf": [ + { + "type": "integer", + "minimum": 1, + "maximum": 4294967295 + }, + { + "type": "string", + "const": "indefinite" + } + ], + "default": 10 + } + }, + "allOf": [ + { + "if": { + "required": [ + "ciphers" + ] + }, + "then": { + "not": { + "required": [ + "cipherGroup" + ] + } + } + }, + { + "if": { + "not": { + "required": [ + "ciphers", + "cipherGroup" + ] + } + }, + "then": { + "properties": { + "ciphers": { + "default": "DEFAULT" + } + } + } + } + ], + "additionalProperties": false, + "required": [ + "class" + ] + }, + "Sender_Tag_Mapping": { + "title": "Sender and Tag Data Group Mapping", + "description": "Establishes a mapping between a sender value and data group containing tag substitution values", + "type": "object", + "properties": { + "senderId": { + "title": "Sender ID", + "description": "Specifies sender ID value", + "type": "string" + }, + "tagDataGroup": { + "description": "Specifies tag substitution data group", + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to data group if any (declared separately)", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Data_Group" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP data group", + "description": "Pathname of existing BIG-IP data group", + "type": "string", + "format": "f5bigip" + } + }, + "dependencies": { + "bigip": { + "properties": { + "isExternal": { + "title": "External data group", + "description": "Toggles whether existing data group is internal or external", + "type": "boolean", + "default": false + } + } + } + }, + "if": { + "properties": { + "isExternal": { + "const": true + } + } + }, + "then": { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm data-group external" + ] + } + }, + "else": { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm data-group internal" + ] + } + }, + "minProperties": 1, + "maxProperties": 2 + } + }, + "additionalProperties": false, + "required": [ + "senderId", + "tagDataGroup" + ] + }, + "FIX_Profile": { + "title": "FIX_Profile", + "type": "object", + "description": "Configures a Financial Information eXchange Protocol (FIX) profile", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "FIX_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "parentProfile": { + "description": "Specifies the name of the profile object to inherit the settings from", + "allOf": [ + { + "$ref": "#/definitions/Pointer_FIX_Profile" + } + ], + "default": { + "bigip": "/Common/fix" + } + }, + "errorAction": { + "title": "Error Action", + "description": "Specifies the error handling method", + "type": "string", + "enum": [ + "dont-forward", + "drop-connection" + ], + "default": "dont-forward" + }, + "fullLogonParsingEnabled": { + "title": " Fully Parse Logon Message", + "description": "Enables or disables logon message as always fully parsed. Other messages are parsed according to the configuration of Quick Parsing", + "type": "boolean", + "default": true + }, + "messageLogPublisher": { + "title": "Message Log Publisher", + "description": "Specifies the publisher for message logging", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Log_Publisher" + } + ] + }, + "reportLogPublisher": { + "description": "Specifies the publisher for error messages and status reports", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Log_Publisher" + } + ] + }, + "quickParsingEnabled": { + "title": "Quick Parsing", + "description": "Enables or disables quick parsing which parses the basic standard fields and validates message length and checksum", + "type": "boolean", + "default": false + }, + "responseParsingEnabled": { + "title": "Response Parsing", + "description": "Enables or disables response parsing which parses the messages from the FIX server. Applies the same parser configuration and error handling at server side as at client side. If not enabled, server side messages are directly passed through", + "type": "boolean", + "default": false + }, + "statisticsSampleInterval": { + "title": "Statistics Sample Interval", + "description": "Specifies the sample interval of the message rate in seconds", + "type": "integer", + "default": 20, + "minimum": 10, + "maximum": 4294967295 + }, + "senderTagMappingList": { + "title": "Sender and Tag Substitution Mapping", + "description": "Specifies the mappings between sender ID and tag substitution data group.", + "type": "array", + "items": { + "$ref": "#/definitions/Sender_Tag_Mapping" + } + } + }, + "additionalProperties": false, + "required": [ + "class" + ] + }, + "RTSP_Profile": { + "title": "RTSP_Profile", + "type": "object", + "description": "Real Time Streaming Protocol Profile", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "RTSP_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "idleTimeout": { + "title": "Idle Timeout", + "description": "The number of seconds that a Real-time Transport Protocol (RTP) connection is idle before the connection is eligible for deletion", + "if": { + "type": "integer" + }, + "then": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 + }, + "else": { + "type": "string", + "enum": [ + "indefinite", + "immediate" + ] + }, + "default": 300 + }, + "maxHeaderSize": { + "title": "Maximum Header Size", + "description": "The largest RTSP request or response header, in bytes, that the RTSP filter accepts before dropping the connection", + "type": "integer", + "default": 4096, + "minimum": 0, + "maximum": 4294967295 + }, + "maxQueuedData": { + "title": "Maximum Queued Data", + "description": "The maximum amount of data, in bytes, that the RTSP filter buffers before dropping the connection", + "type": "integer", + "default": 32768, + "minimum": 0, + "maximum": 4294967295 + }, + "unicastRedirect": { + "title": "Unicast Redirect", + "description": "When enabled specifies that the client can select the destination port for the streamed data. The destination address for the data is the source of the request.", + "type": "boolean", + "default": false + }, + "multicastRedirect": { + "title": "Multicast Redirect", + "description": "When enabled, if you are using multicast streams, specifies that the client has permission to supply a different destination IP address for the streamed data", + "type": "boolean", + "default": false + }, + "sessionReconnect": { + "title": "Session Reconnect", + "description": "When enabled specifies that the system persists a resumed control connection to the correct server. Typical clients do not support this behavior.", + "type": "boolean", + "default": false + }, + "realHTTPPersistence": { + "title": "Real HTTP Persistence", + "description": "When enabled specifies that the system automatically persists Real Networks-tunneled RTSP data over HTTP, which is over the RTSP port. When disabled, a user can override the default behavior with an iRule.", + "type": "boolean", + "default": true + }, + "checkSource": { + "title": "Check Source", + "description": "When true the system uses the source attribute in the transport header to establish the target address of the RTP stream, and before the response is forwarded to the client, updates the value of the source attribute to be the virtual address of the BIG-IP system. When false the system does not change the source attribute.", + "type": "boolean", + "default": true + }, + "proxy": { + "title": "Proxy", + "description": "Specifies whether the RTSP profile is associated with an RTSP proxy configuration", + "type": "string", + "enum": [ + "external", + "internal", + "none" + ], + "default": "none" + }, + "proxyHeader": { + "title": "Proxy Header", + "description": "When set, specifies the name of the header in the RTSP proxy configuration that is passed from the client-side virtual server to the server-side virtual server. Note that the name of the header must begin with X-. To use the proxyHeader option, you must specify a value for the proxy option. Note that the system removes this header from the request prior to sending the request to the server for processing.", + "type": "string" + }, + "RTPPort": { + "title": "RTP Port", + "description": "The number of the port to use for the RTP service", + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "RTCPPort": { + "title": "RTCP Port", + "description": "The number of the port to use for the Real Time Control Protocol (RTCP) service. RTCP allows monitoring of real-time data delivery.", + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "algLogProfile": { + "description": "ALG log profile pointer", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "cgnat" + ] + } + }, + { + "$ref": "#/definitions/Pointer_ALG_Log_Profile" + } + ] + }, + "logPublisher": { + "description": "Log publisher pointer", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "cgnat" + ] + } + }, + { + "$ref": "#/definitions/Pointer_Log_Publisher" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "class" + ], + "dependencies": { + "algLogProfile": { + "required": [ + "logPublisher" + ] + }, + "logPublisher": { + "required": [ + "algLogProfile" + ] + } + } + }, + "SIP_Profile": { + "title": "SIP_Profile", + "type": "object", + "description": "Configures a profile you can use to manage Session Initiation Protocol (SIP) traffic.", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "SIP_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + } + }, + "additionalProperties": false, + "required": [ + "class" + ] + }, + "Statistics_Profile": { + "title": "Statistics Profile", + "type": "object", + "description": "User-defined statistics fields. This object assigns field names for up to 32 fields. You can then use these field names from an iRule to record values.", + "patternProperties": { + "^field(3[0-2]|[1-2][0-9]|[1-9])$": { + "title": "Field Name", + "description": "This regular expression represents 32 field properties named 'field1' through 'field32'.", + "type": "string" + } + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Statistics_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + } + }, + "additionalProperties": false, + "required": [ + "class" + ] + }, + "TFTP_Profile": { + "title": "TFTP_Profile", + "type": "object", + "description": "Trivial File Transer Protocol (TFTP) profile", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "TFTP_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "idleTimeout": { + "description": "Specifies an idle timeout in seconds. This setting specifies the number of seconds that a connection is idle before the connection is eligible for deletion.", + "if": { + "type": "integer" + }, + "then": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 + }, + "else": { + "type": "string", + "const": "indefinite" + }, + "default": 30 + }, + "algLogProfile": { + "description": "ALG log profile pointer", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "cgnat" + ] + } + }, + { + "$ref": "#/definitions/Pointer_ALG_Log_Profile" + } + ] + }, + "logPublisher": { + "description": "Log publisher pointer", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "cgnat" + ] + } + }, + { + "$ref": "#/definitions/Pointer_Log_Publisher" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "class" + ], + "dependencies": { + "algLogProfile": { + "required": [ + "logPublisher" + ] + }, + "logPublisher": { + "required": [ + "algLogProfile" + ] + } + } + }, + "FTP_Profile": { + "title": "FTP_Profile", + "type": "object", + "description": "File Transfer Protocol (FTP) profile", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "FTP_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "port": { + "description": "Specifies a service for the data channel port used for this profile", + "type": "integer", + "default": 20, + "minimum": 0, + "maximum": 65535 + }, + "ftpsMode": { + "description": "Specifies the policy for explicit FTPS negotiation on FTP command channel", + "type": "string", + "enum": [ + "disallow", + "allow", + "require" + ], + "default": "disallow" + }, + "enforceTlsSessionReuseEnabled": { + "description": "Enforce data connection to reuse TLS session", + "type": "boolean", + "default": false, + "f5PostProcess": { + "tag": "minVersion", + "data": "14.0" + } + }, + "activeModeEnabled": { + "description": "Specifies if the profile should allow FTP active transfer mode", + "type": "boolean", + "default": true, + "f5PostProcess": { + "tag": "minVersion", + "data": "14.0" + } + }, + "securityEnabled": { + "description": "Specifies whether to enable or disable secure FTP traffic for the BIG-IP Application Security Manager", + "type": "boolean", + "default": false + }, + "translateExtendedEnabled": { + "description": "Specifies if the profile should automatically translate RFC2428 extended requests EPSV and EPRT to PASV and PORT when communicating with IPv4servers", + "type": "boolean", + "default": true + }, + "inheritParentProfileEnabled": { + "description": "Specifies if the FTP data channel should inherit the TCP profile used by the control channel", + "type": "boolean", + "default": false + }, + "algLogProfile": { + "description": "ALG log profile pointer", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "cgnat" + ] + } + }, + { + "$ref": "#/definitions/Pointer_ALG_Log_Profile" + } + ] + }, + "logPublisher": { + "description": "Log publisher pointer", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "cgnat" + ] + } + }, + { + "$ref": "#/definitions/Pointer_Log_Publisher" + } + ] + } + }, + "additionalProperties": false, + "required": [ + "class" + ], + "dependencies": { + "algLogProfile": { + "required": [ + "logPublisher" + ] + }, + "logPublisher": { + "required": [ + "algLogProfile" + ] + } + } + }, + "HTML_Rule": { + "title": "HTML_Rule", + "type": "object", + "description": "HTML Rule with configurable options", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "HTML_Rule" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "ruleType": { + "title": "Rule type", + "description": "Type of rule", + "type": "string", + "enum": [ + "comment-raise-event", + "comment-remove", + "tag-append-html", + "tag-prepend-html", + "tag-raise-event", + "tag-remove", + "tag-remove-attribute" + ] + } + }, + "allOf": [ + { + "if": { + "properties": { + "ruleType": { + "const": "tag-append-html" + } + } + }, + "then": { + "$ref": "#/definitions/HTML_Rule_TagAppendHTML" + } + }, + { + "if": { + "properties": { + "ruleType": { + "const": "tag-prepend-html" + } + } + }, + "then": { + "$ref": "#/definitions/HTML_Rule_TagPrependHTML" + } + }, + { + "if": { + "properties": { + "ruleType": { + "const": "tag-raise-event" + } + } + }, + "then": { + "$ref": "#/definitions/HTML_Rule_TagRaiseEvent" + } + }, + { + "if": { + "properties": { + "ruleType": { + "const": "tag-remove" + } + } + }, + "then": { + "$ref": "#/definitions/HTML_Rule_TagRemove" + } + }, + { + "if": { + "properties": { + "ruleType": { + "const": "tag-remove-attribute" + } + } + }, + "then": { + "$ref": "#/definitions/HTML_Rule_TagRemoveAttribute" + } + } + ], + "required": [ + "class", + "ruleType" + ] + }, + "HTML_Rule_Match_Attribute_Optional": { + "title": "HTML_Rule_Match_Attribute_Optional", + "description": "Matches on the specified tag name, attribute name, and attribute value. Attribute name and value are optional.", + "type": "object", + "properties": { + "match": { + "title": "Match", + "description": "Properties the rule is to match", + "type": "object", + "properties": { + "attributeName": { + "title": "Attribute Name", + "description": "Name of attribute", + "type": "string" + }, + "attributeValue": { + "title": "Attribute Value", + "description": "Value of attribute", + "type": "string" + }, + "tagName": { + "title": "Tag Name", + "description": "Name of tag", + "type": "string" + } + }, + "dependencies": { + "attributeValue": { + "required": [ + "attributeName" + ] + } + }, + "required": [ + "tagName" + ] + } + }, + "required": [ + "match" + ] + }, + "HTML_Rule_Match_Attribute_Required": { + "title": "HTML_Rule_Match_Attribute_Required", + "description": "Matches on the specified tag name, attribute name, and attribute value. Attribute name and value are required.", + "type": "object", + "properties": { + "match": { + "title": "Match", + "description": "Properties the rule is to match", + "type": "object", + "properties": { + "attributeName": { + "title": "Attribute Name", + "description": "Name of attribute", + "type": "string" + }, + "attributeValue": { + "title": "Attribute Value", + "description": "Value of attribute", + "type": "string" + }, + "tagName": { + "title": "Tag Name", + "description": "Name of tag", + "type": "string" + } + }, + "required": [ + "tagName", + "attributeName", + "attributeValue" + ] + } + }, + "required": [ + "match" + ] + }, + "HTML_Rule_TagAppendHTML": { + "title": "Append HTML HTML_Rule", + "description": "Matches on the specified tag name and optional attribute name and attribute value, and then appends the specified HTML content to the tag delimiter.", + "type": "object", + "properties": { + "content": { + "title": "Content", + "description": "HTML content to append to tag delimiter", + "type": "string" + } + }, + "allOf": [ + { + "$ref": "#/definitions/HTML_Rule_Match_Attribute_Optional" + } + ], + "required": [ + "content" + ] + }, + "HTML_Rule_TagPrependHTML": { + "title": "HTML_Rule_TagPrependHTML", + "description": "Matches on the specified tag name and optional attribute name and attribute value, and then prepends the specified HTML content to the tag delimiter.", + "type": "object", + "properties": { + "content": { + "title": "Content", + "description": "HTML content to prepend to tag delimiter", + "type": "string" + } + }, + "allOf": [ + { + "$ref": "#/definitions/HTML_Rule_Match_Attribute_Optional" + } + ], + "required": [ + "content" + ] + }, + "HTML_Rule_TagRaiseEvent": { + "title": "HTML_Rule_TagRaiseEvent", + "description": "Matches on the specified tag name and optional attribute name and attribute value, and then raises an event.", + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/HTML_Rule_Match_Attribute_Optional" + } + ] + }, + "HTML_Rule_TagRemove": { + "title": "HTML_Rule_TagRemove", + "description": "Matches on the specified tag name and optional attribute name and attribute value, and then removes the tag.", + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/HTML_Rule_Match_Attribute_Optional" + } + ] + }, + "HTML_Rule_TagRemoveAttribute": { + "title": "Append HTML HTML_Rule", + "description": "Matches on the specified tag name, attribute name, and attribute value, and then removes a specified attribute. Tag name, attribute name, and value are required.", + "type": "object", + "properties": { + "attributeName": { + "title": "Attriute Name", + "description": "Name of the attribute to be removed", + "type": "string" + } + }, + "allOf": [ + { + "$ref": "#/definitions/HTML_Rule_Match_Attribute_Required" + } + ], + "required": [ + "attributeName" + ] + }, + "HTML_Profile": { + "title": "HTML_Profile", + "type": "object", + "description": "HTML profile with configurable options", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "HTML_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "contentDetectionEnabled": { + "title": "Content Detection Enabled", + "description": "Scans initial HTTP payload to look for HTML signatures and enables HTML profile if HTML-like patterns are detected", + "type": "boolean", + "default": false + }, + "contentSelection": { + "title": "Content Selection", + "description": "Matches content-type from response header against a list of the content-types and enables HTML profile if a match is found", + "type": "array", + "items": { + "title": "Content Type", + "type": "string" + }, + "default": [ + "text/html", + "text/xhtml" + ], + "uniqueItems": true + }, + "rules": { + "title": "HTML Rules", + "description": "HTML Rules followed by the profile", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_HTML_Rule" + } + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "WebSocket_Profile": { + "additionalProperties": false, + "allOf": [ + { + "if": { + "properties": { + "masking": { + "const": "preserve" + } + }, + "required": [ + "masking" + ] + }, + "then": { + "properties": { + "compressMode": { + "not": { + "const": "typed" + } + } + }, + "required": [ + "compressMode" + ] + } + } + ], + "description": "WebSocket profile with configurable options", + "properties": { + "class": { + "const": "WebSocket_Profile", + "title": "Class", + "type": "string" + }, + "compressMode": { + "default": "preserved", + "description": "Available when TMOS version is 16.1 or newer. Specifies the mode that controls what compression operations are performed. Setting 'masking' to 'preserve' and 'compressMode' to 'typed' will not be allowed because it results in an invalid configuration.", + "enum": [ + "preserved", + "typed" + ], + "title": "Compress Mode", + "type": "string" + }, + "compression": { + "default": true, + "description": "Available when TMOS version is 16.1 or newer and used when compressMode is 'typed'. Specifies whether compress will be negotiated with the endpoint.", + "title": "Compression", + "type": "boolean" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "masking": { + "default": "selective", + "description": "Specifies the masking operation for WebSocket frames", + "enum": [ + "preserve", + "unmask", + "remask", + "selective" + ], + "title": "Masking", + "type": "string" + }, + "maximumWindowSize": { + "default": 10, + "description": "Available when TMOS version is 16.1 or newer and used when compressMode is 'typed'. Specifies the maximum sliding window for compression negotiated with the endpoint.", + "maximum": 15, + "minimum": 8, + "title": "Maximum Window Size", + "type": "integer" + }, + "noDelay": { + "default": true, + "description": "Available when TMOS version is 16.1 or newer and used when compressMode is 'typed'. Specifies whether data should be buffered for efficient compression, or compressed without delay.", + "title": "No Delay", + "type": "boolean" + }, + "remark": { + "$ref": "#/definitions/Remark" + } + }, + "title": "WebSocket_Profile", + "type": "object" + }, + "Multiplex_Profile": { + "title": "Multiplex_Profile", + "type": "object", + "description": "Multiplex (OneConnect) profile with configurable options", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Multiplex_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "sourceMask": { + "title": "Source Address Mask", + "description": "Idle connection re-use applies to connections whose source address matches this mask", + "type": "string", + "format": "f5ip" + }, + "maxConnections": { + "title": "Maximum Connections", + "description": "Specifies the maximum number of connections that the system holds in the connection reuse pool.", + "type": "integer", + "minimum": 0, + "default": 10000 + }, + "maxConnectionAge": { + "title": "Maximum Connection Age", + "description": "Specifies the maximum age, in number of seconds, of a connection in the connection reuse pool.", + "type": "integer", + "minimum": 0, + "default": 86400 + }, + "maxConnectionReuse": { + "title": "Maximum Connection Reuse", + "description": "Specifies the maximum number of times that a server connection can be reused.", + "type": "integer", + "minimum": 0, + "default": 1000 + }, + "idleTimeoutOverride": { + "title": "Idle Timeout Override", + "description": "Specifies the number of seconds that a connection is idle before the connection flow is eligible for deletion.", + "type": "integer", + "minimum": 0, + "default": 0 + }, + "connectionLimitEnforcement": { + "title": "Connection Limit Enforcement", + "description": "When the limit is 'none', simultaneous in-flight requests and responses over TCP connections to a pool member are counted toward the limit. When the limit is 'idle', idle connections will be dropped as the TCP connection limit is reached. When the limit is 'strict', idle connections will prevent new TCP connections from being made until they expire (not recommended).", + "type": "string", + "enum": [ + "none", + "idle", + "strict" + ], + "default": "none" + }, + "sharePools": { + "title": "Share Pools", + "description": "Indicates that TCP connections for the current pool may be shared among similar virtual servers using the same pool.", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false, + "required": [ + "class" + ] + }, + "SOCKS_Profile": { + "title": "SOCKS_Profile", + "description": "Configures a SOCKS (Socket Secure) profile", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "SOCKS_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "protocolVersions": { + "description": "Specifies the SOCKS protocol versions that are supported", + "type": "array", + "items": { + "type": "string", + "enum": [ + "socks4", + "socks4a", + "socks5" + ] + }, + "default": [ + "socks4", + "socks4a", + "socks5" + ], + "minItems": 1, + "uniqueItems": true + }, + "resolver": { + "title": "DNS resolver", + "description": "BIG-IP AS3 pointer to DNS resolver used to resolve hostnames in connect requests", + "type": "object", + "properties": { + "bigip": { + "title": "BIG-IP resolver", + "description": "Pathname of existing BIG-IP net DNS resolver", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "required": [ + "bigip" + ], + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query net dns-resolver" + ] + } + }, + "ipv6First": { + "title": "IPv6 first priority", + "description": "Specifies the relative order of IPv4 and IPv6 DNS resolutions for URIs. If false (default), then the system performs IPv4 lookup before IPv6.", + "type": "boolean", + "default": false + }, + "routeDomain": { + "description": "The route domain that will be used for outbound connect requests", + "oneOf": [ + { + "type": "integer", + "minimum": 0, + "maximum": 65534 + }, + { + "type": "string" + } + ], + "default": 0 + }, + "tunnelName": { + "title": "Tunnel name", + "description": "Name of tunnel used for outbound connect requests", + "type": "string", + "minLength": 1, + "maxLength": 63, + "default": "socks-tunnel", + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query net tunnels tunnel" + ] + } + }, + "defaultConnectAction": { + "title": "Default Connect Action", + "description": "Specifies the behavior of the proxy service for connect requests. If set to 'deny', connect requests will only be honored if there is another virtual server listening for the requested outbound connection. If set to 'allow' outbound connection will be made ragardless of other virtual servers.", + "type": "string", + "enum": [ + "deny", + "allow" + ], + "default": "deny" + } + }, + "additionalProperties": false, + "required": [ + "class", + "resolver" + ] + }, + "TCP_Profile": { + "title": "TCP_Profile", + "description": "Configures a Transmission Control Protocol (TCP) profile", + "type": "object", + "$comment": "Configures TCP settings. When deployed on BIG-IP, defaults match f5-tcp-progressive.", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "TCP_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "abc": { + "title": "Appropriate Byte Counting", + "description": "If true (default), BIG-IP AS3 adjusts the congestion window per rfc3465", + "type": "boolean", + "default": true + }, + "ackOnPush": { + "title": "ACK on PSH", + "description": "If true (default), the system immediately acknowledges segments with the PSH flag set", + "type": "boolean", + "default": true + }, + "autoProxyBufferSize": { + "title": "Automatic proxy-buffer size", + "description": "If true (default), BIG-IP AS3 adjusts the proxy buffer size automatically to optimize throughput", + "type": "boolean", + "default": true + }, + "autoReceiveWindowSize": { + "title": "Automatic receive-window size", + "description": "If true (default), BIG-IP AS3 adjusts the receive window size automatically to optimize throughput", + "type": "boolean", + "default": true + }, + "autoSendBufferSize": { + "title": "Automatic send-buffer size", + "description": "If true (default), BIG-IP AS3 adjusts the send buffer size automatically to optimize throughput", + "type": "boolean", + "default": true + }, + "closeWaitTimeout": { + "title": "Close-wait timeout", + "description": "Number of seconds (default 5) connection will remain in LAST-ACK state before exiting. Value -1 means indefinite, limited by maximum retransmission timeout", + "type": "integer", + "minimum": -1, + "maximum": 3600, + "default": 5 + }, + "congestionControl": { + "title": "Congestion-control algorithm", + "description": "Selects TCP congestion-control algorithm (default 'woodside'). The bbr option is available on BIGIP 14.1 and above.", + "type": "string", + "enum": [ + "bbr", + "cdg", + "chd", + "cubic", + "high-speed", + "illinois", + "new-reno", + "none", + "reno", + "scalable", + "vegas", + "westwood", + "woodside" + ], + "default": "woodside" + }, + "congestionMetricsCache": { + "title": "Congestion metrics cache", + "description": "If true (default), the system may cache congestion metrics to inform the congestion control algorithm", + "type": "boolean", + "default": true + }, + "congestionMetricsCacheTimeout": { + "title": "Congestion metrics cache timeout", + "description": "Number of seconds for which entries in the congestion metrics cache are valid (default 0 means use system default)", + "type": "integer", + "minimum": 0, + "maximum": 1000, + "default": 0 + }, + "deferredAccept": { + "title": "Deferred accept", + "description": "If true, ADC will defer allocating resources to a connection until some payload data has arrived from the client (default false). This may help minimize the impact of certain DoS attacks but adds undesirable latency under normal conditions. Note: 'deferredAccept' is incompatible with server-speaks-first application protocols", + "type": "boolean", + "default": false + }, + "delayedAcks": { + "title": "Delayed ACKs", + "description": "If true (default), the system may coalesce multiple adjacent ACK responses", + "type": "boolean", + "default": true + }, + "delayWindowControl": { + "title": "Delay-window control", + "description": "If true, BIG-IP AS3 uses queueing delay as well as packet loss to estimate congestion (default false)", + "type": "boolean", + "default": false + }, + "dsack": { + "title": "Use D-SACK", + "description": "If true, BIG-IP AS3 uses rfc2883 duplicate selective-acknowledgements extension (default false). Do not enable this option unless you are certain all peers support D-SACK", + "type": "boolean", + "default": false + }, + "earlyRetransmit": { + "title": "Early retransmit", + "description": "If true (default), BIG-IP AS3 uses rfc5827 Early Retransmit recovery", + "type": "boolean", + "default": true + }, + "ecn": { + "title": "Explicit congestion notification", + "description": "If true (default), BIG-IP AS3 may send explicit congestion notification (ECN) flags (CWR, ECE) to peers", + "type": "boolean", + "default": true + }, + "enhancedLossRecovery": { + "title": "Enhanced loss recovery", + "description": "If true (default), BIG-IP AS3 uses Selective ACK data to increase throughput", + "type": "boolean", + "default": true + }, + "fastOpen": { + "title": "Fast-open", + "description": "If true (default), the system can use the TCP Fast Open protocol extension to reduce latency by sending payload data with initial SYN", + "type": "boolean", + "default": true + }, + "fastOpenCookieExpiration": { + "title": "Fast-open cookie expiration", + "description": "Sets maximum lifetime in seconds (default 21600 = six hours) of TCP Fast Open cookies", + "type": "integer", + "minimum": 1, + "maximum": 1000000, + "default": 21600 + }, + "finWaitTimeout": { + "title": "FIN-WAIT timeout", + "description": "Number of seconds (default 5) connection will remain in FIN-WAIT-1 or closing state before exiting. Value -1 means indefinite, limited by maximum retransmission timeout", + "type": "integer", + "minimum": -1, + "maximum": 3600, + "default": 5 + }, + "finWait2Timeout": { + "title": "FIN-WAIT-2 timeout", + "description": "Number of seconds (default 300) connection will remain in LAST-ACK state before closing. Value -1 means indefinite, limited by maximum retransmission timeout", + "type": "integer", + "minimum": -1, + "maximum": 3600, + "default": 300 + }, + "idleTimeout": { + "title": "Idle timeout", + "description": "Number of seconds (default 300; may not be 0) connection may remain idle before it becomes eligible for deletion. Value -1 (not recommended) means infinite", + "type": "integer", + "anyOf": [ + { + "minimum": 1, + "maximum": 86400 + }, + { + "const": -1 + } + ], + "default": 300 + }, + "initCwnd": { + "title": "Initial congestion-window size", + "description": "Sets the initial congestion-window size (default 16) in multiples of MSS (not in octets)", + "type": "integer", + "minimum": 0, + "maximum": 64, + "default": 16 + }, + "initRwnd": { + "title": "Initial receive-window size", + "description": "Sets the initial receive-window size (default 16) in multiples of MSS (not in octets)", + "type": "integer", + "minimum": 0, + "maximum": 64, + "default": 16 + }, + "ipDfMode": { + "title": "IP DF mode", + "description": "Controls DF (Don't Fragment) flag in outgoing packets. Value 'pmtu' (default) sets DF based on IP PMTU value. Value 'preserve' copies DF from received packets. Value 'set' forces DF true in all outgoing packets. Value 'clear' forces DF false in all outgoing packets", + "type": "string", + "enum": [ + "clear", + "pmtu", + "preserve", + "set" + ], + "default": "pmtu" + }, + "ipTosToClient": { + "title": "IP DSCP (TOS) to client", + "description": "Specifies the IP DSCP/TOS value in packets sent to clients (default 0). Numeric values in this property are decimal representations of eight-bit numbers, of which the leftmost six bits are the DSCP per rfc2474 (and the system uses the rightmost two bits for congestion signaling when 'ecn' is true). You may have to calculate the value of this property by multiplying a DSCP code, such as CS5+EF = 46, by four to obtain the proper 'ipTosToClient' value, such as 184. Value 'pass-through' sets DSCP from the initial server-side value. Value 'mimic' copies DSCP from the most-recently received server-side packet (allowing DSCP to vary during the life of a connection)", + "oneOf": [ + { + "type": "integer", + "minimum": 0, + "maximum": 252, + "multipleOf": 4 + }, + { + "type": "string", + "enum": [ + "pass-through", + "mimic" + ] + } + ], + "default": 0 + }, + "keepAliveInterval": { + "title": "Keep-alive interval", + "description": "Number of seconds (default 1800) between keep-alive probes", + "type": "integer", + "minimum": 1, + "maximum": 86400, + "default": 1800 + }, + "limitedTransmit": { + "title": "Limited transmit recovery", + "description": "When true (default), the system can use rfc3042 limited transmit recovery scheme", + "type": "boolean", + "default": true + }, + "linkQosToClient": { + "title": "Link QOS to client", + "description": "Specifies the Layer-2 QOS code in packets sent to clients (default 0). Ethernet-type networks recognize codes from 0 to 7. Value 'pass-through' sets QOS from the initial server-side value", + "oneOf": [ + { + "type": "integer", + "minimum": 0, + "maximum": 7 + }, + { + "type": "string", + "const": "pass-through" + } + ], + "default": 0 + }, + "maxRetrans": { + "title": "Maximum segment retransmissions", + "description": "Sets maximum number of times the system may retransmit a segment (default 8)", + "type": "integer", + "minimum": 0, + "maximum": 12, + "default": 8 + }, + "maxSegmentSize": { + "title": "MSS", + "description": "Sets MSS advertised to peer. Value 0 (default) will set MSS automatically in proportion to interface MTU. Default 0 is usually the best choice", + "type": "integer", + "anyOf": [ + { + "minimum": 28, + "maximum": 8960 + }, + { + "const": 0 + } + ], + "default": 0 + }, + "md5Signature": { + "title": "MD5 signatures", + "description": "If true, the system signs TCP headers using MD5 per rfc2385 (default false)", + "type": "boolean", + "default": false + }, + "md5SignaturePassphrase": { + "title": "MD5 passphrase", + "description": "Passphrase from which the system derives the key for MD5 signatures (MACs) when 'md5signature' is true", + "type": "object", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "allOf": [ + { + "$ref": "#/definitions/Secret" + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "object" + } + }, + { + "f5PostProcess": { + "tag": "secret" + } + } + ] + }, + "minimumRto": { + "title": "Minimum retransmission timeout", + "description": "Minimum retransmission timeout in milliseconds (default 1000)", + "type": "integer", + "minimum": 1, + "maximum": 5000, + "default": 1000 + }, + "mptcp": { + "title": "Multipath TCP (MPTCP)", + "description": "Value 'disable' (default) excludes use of Multipath TCP (MPTCP) through virtual server. Value 'enable' means virtual server will accept and participate in MPTCP connections. Value 'passthrough' means MPTCP packets may pass through virtual server", + "type": "string", + "enum": [ + "disable", + "enable", + "passthrough" + ], + "default": "disable" + }, + "mptcpCsum": { + "title": "MPTCP checksums", + "description": "If true, the system calculates MPTCP checksums (default false)", + "type": "boolean", + "default": false + }, + "mptcpCsumVerify": { + "title": "MPTCP checksum verify", + "description": "If true, the system verifies MPTCP checksums (default false)", + "type": "boolean", + "default": false + }, + "mptcpFallback": { + "title": "MPTCP fallback action", + "description": "Selects action on fallback from MPTCP to ordinary TCP", + "type": "string", + "enum": [ + "accept", + "active-accept", + "reset", + "retransmit" + ], + "default": "reset" + }, + "mptcpFastJoin": { + "title": "MPTCP fast join", + "description": "If true, the system may send data with MP_JOIN SYN packet, reducing connection latency (default false)", + "type": "boolean", + "default": false + }, + "mptcpIdleTimeout": { + "title": "Idle timeout", + "description": "Number of seconds (default 300) connection may remain idle before it becomes eligible for deletion", + "type": "integer", + "minimum": 1, + "maximum": 86400, + "default": 300 + }, + "mptcpJoinMax": { + "title": "MPTCP join maximum", + "description": "Limit on number of subflows which the system may add to the MPTCP connection (default 5)", + "type": "integer", + "minimum": 1, + "maximum": 20, + "default": 5 + }, + "mptcpMakeAfterBreak": { + "title": "MPTCP make-after-break", + "description": "If true, the system can add additional subflows during the 'mptcpTimeout' period, even if the ADC is not currently handling an active connection (default false)", + "type": "boolean", + "default": false + }, + "mptcpNoJoinDssAck": { + "title": "MPTCP fast join", + "description": "If true, no DSS option will sent with MP_JOIN ACK packet (default false)", + "type": "boolean", + "default": false + }, + "mptcpRtoMax": { + "title": "MPTCP RTO maximum", + "description": "Maximum number of retransmission timeouts which may occur before the system declares a subflow dead", + "type": "integer", + "minimum": 1, + "maximum": 20, + "default": 5 + }, + "mptcpRetransmitMin": { + "title": "MPTCP retransmit timer", + "description": "Minimum value in milliseconds (default 1000) of MPTCP retransmission timer", + "type": "integer", + "minimum": 1, + "maximum": 5000, + "default": 1000 + }, + "mptcpSubflowMax": { + "title": "MPTCP subflow maximum", + "description": "Maximum number of subflows per connection (default 6)", + "type": "integer", + "minimum": 1, + "maximum": 20, + "default": 6 + }, + "mptcpTimeout": { + "title": "MPTCP timeout", + "description": "Number of seconds (default 3600) after which the system may expunge an MPTCP session with no active flow", + "type": "integer", + "minimum": 60, + "maximum": 3600, + "default": 3600 + }, + "nagle": { + "title": "Nagle's algorithm", + "description": "Value 'enable' means to use Nagle's algorithm to minimize the transmission of short TCP segments (note: Nagle's algorithm yields undesirable results with many application protocols). Value 'auto' (default) means the ADC will choose automatically whether to enable Nagle's algorithm. Value 'disable' averts application of Nagle's algorithm", + "type": "string", + "enum": [ + "disable", + "enable", + "auto" + ], + "default": "auto" + }, + "pktLossIgnoreBurst": { + "title": "Packet loss ignore burst", + "description": "Modulates use of congestion control when losing multiple packets. Value 0 (default) means to perform congestion control if any packet loss occurs. Higher values increase tolerance for lost packets before signaling congestion", + "type": "integer", + "minimum": 0, + "maximum": 32, + "default": 0 + }, + "pktLossIgnoreRate": { + "title": "Packet loss ignore rate", + "description": "Sets threshold of packet loss rate (lost-packets/million-packets) above which the system performs congestion control. Value 0 (default) means to perform congestion control if any packet loss occurs. Higher values increase tolerance for lost packets before signaling congestion", + "type": "integer", + "minimum": 0, + "maximum": 1000000, + "default": 0 + }, + "proxyBufferHigh": { + "title": "Proxy-buffer high", + "description": "The system closes the receive window when the number of octets in proxy buffer rises above this value", + "type": "integer", + "minimum": 64, + "maximum": 33554432, + "default": 262144 + }, + "proxyBufferLow": { + "title": "Proxy-buffer low", + "description": "The system opens the receive window when the number of octets in proxy buffer falls below this value", + "type": "integer", + "minimum": 64, + "maximum": 33554432, + "default": 196608 + }, + "proxyMSS": { + "title": "Proxy MSS", + "description": "If true (default), the MSS value advertised on the server side will match that negotiated with the client, if permitted by MTU and other constraints", + "type": "boolean", + "default": true + }, + "proxyOptions": { + "title": "Proxy options", + "description": "If true, TCP options such as timestamp advertised on the server side will match those negotiated with client (default false)", + "type": "boolean", + "default": false + }, + "pushFlag": { + "title": "PuSH flag control", + "description": "Controls when ADC sets PSH flag in outbound TCP segments. Limiting the sending of segments with PSH improves performance. Value 'auto' (recommended) sets PSH according to a system algorithm optimal in most cases. Value 'default' (not recommended) sets the PUSH flag in every segment which happens to empty the send buffer. Value 'none' prevents use of the PSH flag, and 'one' means the system sets PSH only when FIN is, at the end of a connection", + "type": "string", + "enum": [ + "auto", + "default", + "none", + "one" + ], + "default": "auto" + }, + "ratePace": { + "title": "Rate pace", + "description": "If true (default), system will automatically pace rate of data transmission to optimize throughput", + "type": "boolean", + "default": true + }, + "ratePaceMaxRate": { + "title": "Rate pace maximum rate", + "description": "Limit maximum data-transmission rate in octets/second to this value when 'ratePace' is true. Default 0 means choose maximum rate automatically", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "$comment": "maximum in future: 137438953472", + "default": 0 + }, + "receiveWindowSize": { + "title": "Receive-window size", + "description": "Maximum size of receive window (octets, default 131072)", + "type": "integer", + "minimum": 64, + "maximum": 33554432, + "default": 131072 + }, + "resetOnTimeout": { + "title": "Reset on timeout", + "description": "If true (default), connections which time out will be reset (that is, the system will send an RST packet to the peer) before the system expunges them. Value false is not recommended", + "type": "boolean", + "default": true + }, + "retransmitThreshold": { + "title": "Retransmit threshold", + "description": "Specifies the number of duplicate ACKs to start fast recovery", + "type": "integer", + "minimum": 0, + "maximum": 12, + "default": 3 + }, + "selectiveAcks": { + "title": "Selective ACKs", + "description": "If true (default), the system negotiates rfc2018 Selective Acknowledgements with peers", + "type": "boolean", + "default": true + }, + "selectiveNack": { + "title": "Selective NAK", + "description": "If true, the system negotiates Selective Negative Acknowledgements with peers (default false)", + "type": "boolean", + "default": false + }, + "sendBufferSize": { + "title": "Send-buffer size", + "description": "Maximum size of send buffer (octets, default 262144)", + "type": "integer", + "minimum": 64, + "maximum": 33554432, + "default": 262144 + }, + "slowStart": { + "title": "Slow-start", + "description": "If true (default), BIG-IP AS3 adjusts the initial window size per rfc3390. This generally makes connections start more quickly, NOT more slowly", + "type": "boolean", + "default": true + }, + "synCookieEnable": { + "title": "SYN cookie enable", + "description": "If true (default), the system may use SYN cookies to avert connection-table overflow (for example, from DoS attacks)", + "type": "boolean", + "default": true + }, + "synCookieAllowlist": { + "title": "SYN cookie allowlist", + "description": "If true, after a client responds successfully to a SYN cookie challenge, the system accepts additional connection requests from that client without challenge for 30 seconds.", + "type": "boolean" + }, + "synCookieWhitelist": { + "title": "SYN cookie whitelist", + "description": "Deprecated. Replaced with functionally equivalent synCookieAllowlist. If true, after a client responds successfully to a SYN cookie challenge, the system accepts additional connection requests from that client without challenge for 30 seconds.", + "type": "boolean", + "default": false + }, + "synMaxRetrans": { + "title": "Maximum SYN retransmissions", + "description": "Maximum number of times the system retransmits a SYN when it does not receive a SYN+ACK (default 3)", + "type": "integer", + "minimum": 0, + "maximum": 12, + "default": 3 + }, + "synRtoBase": { + "title": "SYN RTO base", + "description": "Number of milliseconds (default 3000) to which the system initially sets the SYN retransmission timer. The system adjusts the timer after each retransmission to implement binary-exponential-backoff", + "type": "integer", + "minimum": 0, + "maximum": 5000, + "default": 3000 + }, + "tailLossProbe": { + "title": "Tail loss probe", + "description": "If true (default), the system uses the Tail Loss Probe scheme to reduce retransmission timeouts", + "type": "boolean", + "default": true + }, + "tcpOptions": { + "title": "TCP options capture for iRules", + "description": "Selects which TCP Option values the system captures for reference by iRules", + "type": "array", + "items": { + "title": "Option", + "type": "object", + "properties": { + "option": { + "title": "Number", + "description": "Specifies the TCP option to capture", + "type": "integer", + "minimum": 0, + "maximum": 255 + }, + "when": { + "title": "When seen", + "description": "Specifies when to capture the TCP option", + "type": "string", + "enum": [ + "first", + "last" + ] + } + }, + "additionalProperties": false + }, + "maxItems": 255, + "$comment": "uniqueItems: true" + }, + "timestamps": { + "title": "Timestamps", + "description": "If true (default and recommended), BIG-IP AS3 enables rfc1323 timestamps", + "type": "boolean", + "default": true + }, + "timeWaitRecycle": { + "title": "TIME-WAIT recycle", + "description": "If true (default), the system reuses connection resources immediately when it receives a SYN during the TIME-WAIT period", + "type": "boolean", + "default": true + }, + "timeWaitTimeout": { + "title": "Time-wait timeout", + "description": "Number of milliseconds (default 2,000) connection will remain in TIME-WAIT state before closing. Value -1 means indefinite", + "type": "integer", + "minimum": -1, + "maximum": 600000, + "default": 2000 + }, + "ttlMode": { + "title": "TTL mode", + "description": "Controls IP TTL in outgoing packets. Value 'set' forces TTL to value of property 'ttlIPv4' or 'ttlIPv6' as appropriate. Value 'proxy' (default) forces TTL to the default value for IPv4 or IPv6 as appropriate. Value 'preserve' copies TTL from received packet. Value 'decrement' sets TTL to one less than received packet's TTL", + "type": "string", + "enum": [ + "decrement", + "preserve", + "proxy", + "set" + ], + "default": "proxy" + }, + "ttlIPv4": { + "title": "TTL for IPv4", + "description": "TTL the system sets in outgoing IPv4 packets", + "type": "integer", + "minimum": 1, + "maximum": 255, + "default": 255 + }, + "ttlIPv6": { + "title": "TTL for IPv6", + "description": "TTL the system sets in outgoing IPv6 packets", + "type": "integer", + "minimum": 1, + "maximum": 255, + "default": 64 + }, + "verifiedAccept": { + "title": "Verified accept", + "description": "If true, the system must establish a server-side connection before a it accepts a corresponding client-side connection (default false). Value 'true' is incompatible with iRules", + "type": "boolean", + "default": false + }, + "zeroWindowTimeout": { + "title": "Zero-window timeout", + "description": "Number of milliseconds (default 20,000) connection will persist with window-size of zero (effective timeout is value rounded up to the nearest multiple of 5000). Value -1 means indefinite", + "type": "integer", + "minimum": -1, + "maximum": 86400000, + "default": 20000 + } + }, + "additionalProperties": false, + "required": [ + "class" + ], + "f5PostProcess": { + "tag": "aliases", + "data": { + "synCookieAllowlist": "synCookieWhitelist" + } + } + }, + "Classification_Profile": { + "title": "Classification_Profile", + "description": "Configures a classification profile", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Classification_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "parentProfile": { + "description": "Specifies the name of the object to inherit the settings from", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Classification_Profile" + } + ], + "default": { + "bigip": "/Common/classification" + } + }, + "appDetectionEnabled": { + "description": "Enables/disables Application Detection feature", + "type": "boolean", + "default": true + }, + "urlCategorizationEnabled": { + "description": "Enables/disables URL Categorization feature", + "type": "boolean", + "default": false + }, + "iRuleEventEnabled": { + "description": "Enables/disables CLASSIFICATION_DETECTED iRule event generation", + "type": "boolean", + "default": false + }, + "logPublisher": { + "$ref": "#/definitions/Pointer_Log_Publisher" + }, + "logUnclassifiedDomain": { + "description": "Enables/disables unclassified domain logging", + "type": "boolean", + "default": false + }, + "preset": { + "allOf": [ + { + "$ref": "#/definitions/Pointer_Classification_Preset" + } + ], + "default": { + "bigip": "/Common/ce" + } + }, + "statisticsCollectionEnabled": { + "description": "Enables/disables statistics collection", + "type": "boolean", + "default": false + }, + "statisticsPublisher": { + "$ref": "#/definitions/Pointer_Log_Publisher" + } + }, + "additionalProperties": false, + "required": [ + "class" + ] + }, + "Radius_Profile": { + "title": "Radius_Profile", + "description": "Configures a RADIUS profile for network traffic load balancing", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Radius_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "parentProfile": { + "description": "Specifies the name of the object to inherit the settings from", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Radius_Profile" + } + ], + "default": { + "bigip": "/Common/radiusLB" + } + }, + "persistAttribute": { + "description": "Specifies the name of the RADIUS attribute on which traffic persists. Acceptable values are ASCII strings from section 5 of RFC 2865 or numeric codes (1-255). A value of none indicates that persistence is disabled.", + "oneOf": [ + { + "type": "integer", + "minimum": 1, + "maximum": 255 + }, + { + "type": "string", + "enum": [ + "none", + "User-Name", + "User-Password", + "NAS-IP-Address", + "NAS-Port", + "Service-Type", + "Framed-Protocol", + "Framed-IP-Address", + "Framed-IP-Netmask", + "Framed-Routing", + "Filter-Id", + "Framed-MTU", + "Framed-Compression", + "Login-IP-Host", + "Login-Service", + "Login-TCP-Port", + "Reply-Message", + "Callback-Number", + "Callback-Id", + "Framed-Route", + "Framed-IPX-Network", + "State", + "Class", + "Vendor-Specific", + "Session-Timeout", + "Idle-Timeout", + "Termination-Action", + "Called-Station-Id", + "Calling-Station-Id", + "NAS-Identifier", + "Proxy-State", + "Login-LAT-Service", + "Login-LAT-Node", + "Login-LAT-Group", + "Framed-AppleTalk-Link", + "Framed-AppleTalk-Network", + "Framed-AppleTalk-Zone", + "CHAP-Challenge", + "NAS-Port-Type", + "Port-Limit", + "Login-LAT-Port" + ] + } + ], + "default": "none" + }, + "protocolProfile": { + "description": "Specifies PEM protocol profile that defines mapping of RADIUS AVPs to subscriber ID and other PEM subscriber session attributes", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "pem", + "afm" + ] + } + }, + { + "$ref": "#/definitions/Pointer_Enforcement_Protocol_Profile_Radius" + } + ], + "default": { + "bigip": "/Common/_sys_radius_proto_imsi" + } + }, + "subscriberDiscoveryEnabled": { + "description": "Specifies whether to enable PEM subscriber discovery based on the content of RADIUS packets", + "type": "boolean", + "f5PostProcess": { + "tag": "modules", + "data": [ + "pem", + "afm" + ] + }, + "default": true + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "IP_Other_Profile": { + "title": "IP_Other_Profile", + "description": "Configures a generic IP profile for non-TCP and non-UDP traffic", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "IP_Other_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "parentProfile": { + "description": "Specifies the name of the object to inherit the settings from", + "allOf": [ + { + "$ref": "#/definitions/Pointer_IP_Other_Profile" + } + ], + "default": { + "bigip": "/Common/ipother" + } + }, + "idleTimeout": { + "description": "Specifies the number of seconds a connection can be idle before the connection is eligible for deletion", + "$comment": "It might be possible to specify a value of 0 and remove the immediate option", + "if": { + "type": "integer" + }, + "then": { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 + }, + "else": { + "type": "string", + "enum": [ + "indefinite", + "immediate" + ] + }, + "default": 60 + } + }, + "additionalProperties": false, + "required": [ + "class" + ] + }, + "Label": { + "title": "Label", + "description": "Optional friendly name for this object. Allows 0-64 chars, excluding a few likely to cause trouble with string searching, JS, TCL, or HTML", + "type": "string", + "pattern": "^[^\\x00-\\x1f\\x22#&*<>?\\x5b-\\x5d`\\x7f]*$", + "minLength": 0, + "maxLength": 64 + }, + "Remark": { + "title": "Remark", + "description": "Arbitrary (brief) text pertaining to this object. Allows 0-64 chars, excluding only control characters, double-quote, and backslash. This is permissive enough that you should worry about XSS attacks", + "type": "string", + "pattern": "^[^\\x00-\\x1f\\x22\\x5c\\x7f]*$", + "minLength": 0, + "maxLength": 64 + }, + "F5base64": { + "type": "string", + "description": "Slightly over-matches both base64-orig and base64-url data", + "pattern": "^([0-9A-Za-z/+_-]*|[0-9A-Za-z/+_-]+={1,2})$" + }, + "F5string": { + "title": "String value", + "description": "String value optionally in base64 or from URL or BIG-IP AS3 pointer", + "if": { + "not": { + "type": "object" + } + }, + "then": { + "type": "string" + }, + "else": { + "$comment": "May add 'cryptogram' in future.", + "properties": { + "base64": { + "title": "Base64", + "description": "Base64-encoded value (in JSON string)", + "type": "string", + "allOf": [ + { + "$ref": "#/definitions/F5base64" + } + ] + }, + "text": { + "title": "Text", + "description": "UTF-8 text (in JSON string)", + "type": "string" + }, + "url": { + "$ref": "#/definitions/Resource_URL" + }, + "copyFrom": { + "title": "Copy from", + "description": "BIG-IP AS3 pointer to declaration object/property from which to copy value", + "type": "string", + "format": "f5pointer" + }, + "bigip": { + "title": "BIG-IP component pathname", + "description": "Pathname of existing BIG-IP component", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1 + } + }, + "Metadata": { + "title": "Metadata", + "type": "object", + "description": "Useful datapoints for tracking, tagging, and organizing declarations.", + "$comment": "Properties are arbitrarily set by the user.", + "additionalProperties": { + "type": "object", + "properties": { + "value": { + "type": "string" + }, + "persist": { + "type": "boolean", + "default": true + } + }, + "required": [ + "value" + ], + "additionalProperties": false + } + }, + "Rewrite_Profile": { + "title": "Rewrite_Profile", + "type": "object", + "description": "Configures a rewrite profile", + "properties": { + "class": { + "type": "string", + "const": "Rewrite_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "bypassList": { + "description": "List of URIs that are bypassed in a web page when a rewrite mode of portal is used", + "type": "array", + "items": { + "type": "string", + "minLength": 1 + } + }, + "clientCachingType": { + "description": "The type of client caching used", + "type": "string", + "enum": [ + "cache-all", + "cache-css-js", + "cache-img-css-js", + "no-cache" + ], + "default": "cache-css-js" + }, + "javaCaFile": { + "description": "The CA Bundle used to verify Java applets signature certificates", + "allOf": [ + { + "$ref": "#/definitions/Pointer_CA_Bundle" + } + ], + "default": { + "bigip": "/Common/ca-bundle.crt" + } + }, + "javaSignKeyPassphrase": { + "description": "Passphrase if any for query authentication", + "type": "object", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "allOf": [ + { + "$ref": "#/definitions/Secret" + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "object" + } + }, + { + "f5PostProcess": { + "tag": "secret" + } + } + ] + }, + "certificate": { + "description": "BIG-IP AS3 pointer to client Certificate declaration (optional)", + "type": "string", + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Certificate" + } + }, + "required": [ + "class" + ] + } + } + }, + "locationSpecificEnabled": { + "description": "Specifies if this contains an attribute with values specific to the location that the BIG-IP device resides", + "type": "boolean", + "default": false + }, + "requestSettings": { + "description": "The request settings used for uri-translation", + "allOf": [ + { + "$ref": "#/definitions/Rewrite_Profile_Request_Settings" + } + ], + "default": {} + }, + "responseSettings": { + "description": "The response settings used for uri-translation", + "allOf": [ + { + "$ref": "#/definitions/Rewrite_Profile_Response_Settings" + } + ], + "default": {} + }, + "rewriteList": { + "description": "List of URIs that are rewritten inside a web page when a rewrite mode of portal is used", + "type": "array", + "items": { + "type": "string", + "minLength": 1 + } + }, + "rewriteMode": { + "description": "The mode of rewriting that is used.uri-translation is a rules-based rewrite mode. portal is for use with Portal Access", + "type": "string", + "enum": [ + "portal", + "uri-translation" + ], + "default": "portal" + }, + "setCookieRules": { + "description": "The rules for rewriting HTTP Set-Cookie headers. Used with a rewrite mode of uri-translation", + "type": "array", + "items": { + "$ref": "#/definitions/Rewrite_Profile_Set_Cookie_Rule" + } + }, + "splitTunnelingEnabled": { + "description": "Determines if the profile provides for split tunneling", + "type": "boolean", + "default": false + }, + "uriRules": { + "description": "The rules for rewriting request and response headers and response bodies. Used with a rewrite mode of uri-translation", + "type": "array", + "items": { + "$ref": "#/definitions/Rewrite_Profile_Uri_Rule" + } + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "Rewrite_Profile_Set_Cookie_Rule": { + "description": "A Set-Cookie rule", + "type": "object", + "properties": { + "client": { + "description": "The client domain and path", + "type": "object", + "properties": { + "domain": { + "description": "The domain of the client", + "type": "string", + "minLength": 1 + }, + "path": { + "description": "The path of the client. Must be an absolute directory path", + "type": "string", + "minLength": 1 + } + }, + "required": [ + "domain", + "path" + ], + "additionalProperties": false + }, + "server": { + "description": "The server domain and path", + "type": "object", + "properties": { + "domain": { + "description": "The domain of the server", + "type": "string", + "minLength": 1 + }, + "path": { + "description": "The path of the server. Must be an absolute directory path", + "type": "string", + "minLength": 1 + } + }, + "required": [ + "domain", + "path" + ], + "additionalProperties": false + } + }, + "required": [ + "client", + "server" + ], + "additionalProperties": false + }, + "Rewrite_Profile_Uri_Rule": { + "description": "A URI rule", + "type": "object", + "properties": { + "type": { + "description": "The type of rule. request will affect request headers only, response will affect response headers and bodies, and both will do request and response", + "type": "string", + "enum": [ + "both", + "request", + "response" + ], + "default": "both" + }, + "client": { + "description": "The client URI", + "type": "object", + "properties": { + "scheme": { + "description": "The scheme of the client URI", + "type": "string" + }, + "host": { + "description": "The host of the client URI", + "type": "string", + "minLength": 1 + }, + "port": { + "description": "The port of the client URI", + "type": "string" + }, + "path": { + "description": "The path of the client URI. Must be an absolute directory path", + "type": "string", + "minLength": 1 + } + }, + "required": [ + "path" + ], + "dependencies": { + "host": { + "required": [ + "path", + "scheme" + ] + }, + "scheme": { + "required": [ + "path", + "host" + ] + }, + "port": { + "required": [ + "path", + "host", + "scheme" + ] + } + }, + "additionalProperties": false + }, + "server": { + "description": "The server URI", + "type": "object", + "properties": { + "scheme": { + "description": "The scheme of the server URI", + "type": "string" + }, + "host": { + "description": "The host of the server URI", + "type": "string", + "minLength": 1 + }, + "port": { + "description": "The port of the server URI", + "type": "string" + }, + "path": { + "description": "the path of the server URI. Must be an absolute directory path", + "type": "string", + "minLength": 1 + } + }, + "required": [ + "path" + ], + "dependencies": { + "host": { + "required": [ + "path", + "scheme" + ] + }, + "scheme": { + "required": [ + "path", + "host" + ] + }, + "port": { + "required": [ + "path", + "host", + "scheme" + ] + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "Rewrite_Profile_Request_Settings": { + "description": "Request settings for Rewrite_Profile", + "type": "object", + "properties": { + "insertXforwardedForEnabled": { + "description": "Determines if X-Forwarded-For header", + "type": "boolean", + "default": true + }, + "insertXforwardedHostEnabled": { + "description": "Determines if X-Forwarded-Proto header", + "type": "boolean", + "default": false + }, + "insertXforwardedProtoEnabled": { + "description": "Determines if X-Forwarded-Host header", + "type": "boolean", + "default": false + }, + "rewriteHeadersEnabled": { + "description": "Determines if request headers are rewritten", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "Rewrite_Profile_Response_Settings": { + "description": "Response settings for Rewrite_Profile", + "type": "object", + "properties": { + "rewriteContentEnabled": { + "description": "Determines if response content should be rewritten", + "type": "boolean", + "default": true + }, + "rewriteHeadersEnabled": { + "description": "Determines if response headers should be rewritten", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "Stream_Profile": { + "title": "Stream_Profile", + "description": "Configures a Stream profile", + "type": "object", + "properties": { + "class": { + "type": "string", + "const": "Stream_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "parentProfile": { + "description": "Specifies the profile that this profile will inherit values from", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Stream_Profile" + } + ], + "default": { + "bigip": "/Common/stream" + } + }, + "chunkingEnabled": { + "description": "Specifies that incoming data should be parsed in chunks", + "type": "boolean", + "default": false + }, + "chunkSize": { + "description": "The maximum size that a parsed chunk can be", + "type": "integer", + "minimum": 1024, + "maximum": 65535, + "default": 4096 + }, + "source": { + "description": "Specifies the string to rewrite", + "type": "string" + }, + "target": { + "description": "Specifies the new string that will replace the source string", + "type": "string" + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "Access_Profile": { + "title": "Access_Profile", + "description": "Configures an Access Profile", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "apm" + ] + }, + "properties": { + "class": { + "type": "string", + "const": "Access_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "url": { + "title": "URL", + "description": "The URL to pull the Access Profile from", + "allOf": [ + { + "$ref": "#/definitions/Resource_URL" + } + ] + }, + "ssloCreated": { + "title": "SSL Orchestrator Created", + "description": "Set to true if the profile was created by SSL Orchestrator. If true the non-configurable Kerberos Request-Based Authentication (/Common/rba) and WebSSO (/Common/websso) profiles will not be attached to Services when this profile is attached", + "type": "boolean", + "default": false + }, + "ignoreChanges": { + "title": "Ignore changes", + "description": "If false (default), the system updates the profile in every BIG-IP AS3 declaration deployment. If true, BIG-IP AS3 creates the profile on first deployment, and leaves it untouched afterwards. However, if enable is set to true, the policy will be applied even if ignoreChanges is true", + "type": "boolean", + "default": false + }, + "enable": { + "title": "Enable", + "description": "Apply the profile after updating it. If false (default), the system only updates the profile. Also note 'ignoreChanges'.", + "type": "boolean", + "default": false + } + }, + "required": [ + "class", + "url" + ], + "additionalProperties": false + }, + "Per_Request_Access_Policy": { + "title": "Per_Request_Access_Policy", + "description": "Configures a Per Flow Request Access Policy", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "apm" + ] + }, + "properties": { + "class": { + "type": "string", + "const": "Per_Request_Access_Policy" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "url": { + "title": "URL", + "description": "The URL to pull the policy from", + "allOf": [ + { + "$ref": "#/definitions/Resource_URL" + } + ] + }, + "ignoreChanges": { + "title": "Ignore changes", + "description": "If false (default), the system updates the profile in every BIG-IP AS3 declaration deployment. If true, BIG-IP AS3 creates the profile on first deployment, and leaves it untouched afterwards", + "type": "boolean", + "default": false + } + }, + "required": [ + "class", + "url" + ], + "additionalProperties": false + }, + "ICAP_Profile": { + "title": "ICAP_Profile", + "description": "Configures an ICAP profile", + "type": "object", + "properties": { + "class": { + "type": "string", + "const": "ICAP_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "uri": { + "description": "Specifies the absolute URI that contains both the complete hostname and the path of the resource to use in the ICAP header. Macro expansion is supported for all attribute values in the ICAP header (e.g. icap://${SERVER_IP}:${SERVER_PORT}/videoOptimization)", + "type": "string" + }, + "fromHeader": { + "description": "Specifies the 'From' attribute to use in the ICAP header", + "type": "string" + }, + "hostHeader": { + "description": "Specifies the 'Host' attribute to use in the ICAP header", + "type": "string" + }, + "refererHeader": { + "description": "Specifies the 'Referer' attribute to use in the ICAP header", + "type": "string" + }, + "userAgentHeader": { + "description": "Specifies the 'User-Agent' attribute to use in the ICAP header", + "type": "string" + }, + "previewLength": { + "description": "Specifies the length of the preview in the transaction", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 0 + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "Adapt_Profile": { + "title": "Adapt_Profile", + "description": "Configures a request or response Adapt profile or both", + "type": "object", + "properties": { + "class": { + "type": "string", + "const": "Adapt_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "messageType": { + "description": "The type of Adapt profile. Use both to create a request and response profile with the same property values", + "type": "string", + "enum": [ + "response", + "request", + "request-and-response" + ] + }, + "enableHttpAdaptation": { + "description": "Enable or disable the adaptation of HTTP requests/responses. They will be forwarded to the internal service", + "type": "boolean", + "default": true + }, + "internalService": { + "description": "Specifies the name of the internal service to use for adapting the request/response", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Service" + } + ] + }, + "previewSize": { + "description": "Specifies the maximum size of the preview buffer", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 1024 + }, + "serviceDownAction": { + "description": "Specifies the action to take if the internal service doesn't exist or is down", + "type": "string", + "enum": [ + "ignore", + "reset", + "drop" + ], + "default": "ignore" + }, + "timeout": { + "description": "Specifies how long in miliseconds to wait for the internal service before a timeout error will occur", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 0 + }, + "allowHTTP10": { + "description": "Specifies whether to forward HTTP 1.0 requests/responses", + "type": "boolean", + "default": false + } + }, + "required": [ + "class", + "messageType" + ] + }, + "Cipher_Rule": { + "title": "Cipher_Rule", + "description": "Configures a cipher rule", + "type": "object", + "properties": { + "class": { + "type": "string", + "const": "Cipher_Rule" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "cipherSuites": { + "description": "Specifies the cipher suites", + "type": "array", + "items": { + "type": "string" + } + }, + "namedGroups": { + "description": "Specifies the Elliptic Curve Diffie Hellman key agreement algorithms used to negotiate SSL/TLS connections. namedGroups are only supported on BIG-IP 14.0 and later.", + "type": "array", + "items": { + "type": "string", + "enum": [ + "DEFAULT", + "P256", + "P384", + "X25519" + ] + } + }, + "signatureAlgorithms": { + "description": "Specifies the digital signature algorithms used for authentication. signatureAlgorithms are only supported on BIG-IP 14.0 and later.", + "type": "array", + "items": { + "type": "string", + "enum": [ + "DEFAULT", + "DSA-SHA1", + "DSA-SHA256", + "DSA-SHA384", + "DSA-SHA512", + "ECDSA-SHA1", + "ECDSA-SHA256", + "ECDSA-SHA384", + "ECDSA-SHA512", + "RSA-PKCS1-SHA1", + "RSA-PKCS1-SHA256", + "RSA-PKCS1-SHA384", + "RSA-PKCS1-SHA512", + "RSA-PSS-SHA256", + "RSA-PSS-SHA384", + "RSA-PSS-SHA512" + ] + } + } + }, + "required": [ + "class" + ], + "anyOf": [ + { + "required": [ + "cipherSuites" + ] + }, + { + "required": [ + "namedGroups" + ] + }, + { + "required": [ + "signatureAlgorithms" + ] + } + ], + "additionalProperties": false + }, + "Cipher_Group": { + "title": "Cipher_Group", + "description": "Configures a Cipher Group", + "type": "object", + "properties": { + "class": { + "type": "string", + "const": "Cipher_Group" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "order": { + "description": "Configure the order of the specified Cipher Rules.", + "type": "string", + "enum": [ + "default", + "speed", + "strength", + "fips", + "hardware" + ], + "default": "default" + }, + "allowCipherRules": { + "description": "Allow the following Cipher Rules.", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Cipher_Rule" + }, + "default": [ + { + "bigip": "/Common/f5-default" + } + ] + }, + "excludeCipherRules": { + "description": "Exclude the following Cipher_Rules from the Allowed list.", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Cipher_Rule" + } + }, + "requireCipherRules": { + "description": "Restrict the Allowed list to the following Cipher_Rules.", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Cipher_Rule" + } + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "iFile": { + "title": "iFile", + "description": "An iFile", + "type": "object", + "properties": { + "class": { + "type": "string", + "const": "iFile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "iFile": { + "description": "Reference to an iFile", + "allOf": [ + { + "$ref": "#/definitions/F5string" + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "string" + } + } + ] + } + }, + "additionalProperties": false, + "required": [ + "class", + "iFile" + ] + }, + "Firewall_Address_List": { + "title": "Firewall_Address_List", + "description": "Declares an address-list for use by firewall rules. An address list is a list of IP-address prefixes to compare against the source-IP address and/or destination-IP address in an IP packet", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm", + "asm" + ] + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Firewall_Address_List" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "addresses": { + "type": "array", + "description": "A list of IPv4 and IPv6 addresses and address ranges. You can specify a network with CIDR slash notation.", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "addressDiscovery": { + "title": "Address discovery", + "description": "Selects how server (node) addresses are discovered", + "type": "string", + "enum": [ + "event", + "aws", + "gce", + "azure", + "consul" + ], + "f5PostProcess": { + "tag": "serviceDiscovery" + } + }, + "updateInterval": { + "title": "Update interval", + "description": "Server-discovery update interval (seconds)", + "type": "integer", + "minimum": 1, + "maximum": 3600, + "default": 60 + } + }, + "required": [ + "addressDiscovery" + ], + "allOf": [ + { + "if": { + "properties": { + "addressDiscovery": { + "const": "aws" + } + } + }, + "then": { + "$ref": "#/definitions/Service_Discovery_AWS" + } + }, + { + "if": { + "properties": { + "addressDiscovery": { + "const": "azure" + } + } + }, + "then": { + "$ref": "#/definitions/Service_Discovery_Azure" + } + }, + { + "if": { + "properties": { + "addressDiscovery": { + "const": "gce" + } + } + }, + "then": { + "$ref": "#/definitions/Service_Discovery_GCE" + } + }, + { + "if": { + "properties": { + "addressDiscovery": { + "const": "consul" + } + } + }, + "then": { + "$ref": "#/definitions/Service_Discovery_Consul" + } + } + ] + } + ] + }, + "minItems": 1 + }, + "fqdns": { + "type": "array", + "description": "A list of fully qualified domain names.", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "geo": { + "type": "array", + "description": "A list of geographic locations (for example, US:Washington).", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "addressLists": { + "type": "array", + "description": "A list of other address lists (each by BIG-IP AS3 pointer or BIG-IP pathname).", + "items": { + "$ref": "#/definitions/Pointer_Firewall_Address_List" + }, + "minItems": 1 + } + }, + "additionalProperties": false, + "required": [ + "class" + ], + "anyOf": [ + { + "required": [ + "addresses" + ] + }, + { + "required": [ + "fqdns" + ] + }, + { + "required": [ + "geo" + ] + }, + { + "required": [ + "addressLists" + ] + } + ] + }, + "Firewall_Port_List": { + "title": "Firewall_Port_List", + "description": "Declares a port-list for use by firewall rules. A firewall rule can match a packet's source port or destination port against one of the ports in a port list, and can take some action (such as ACCEPT or DROP) for a matching packet.", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm" + ] + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Firewall_Port_List" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "ports": { + "type": "array", + "description": "A list of ports and port ranges (for example, 80, \"8080-8090\").", + "items": { + "type": [ + "integer", + "string" + ] + }, + "minItems": 1 + }, + "portLists": { + "type": "array", + "description": "A list of other port lists (each by BIG-IP AS3 pointer or BIG-IP pathname).", + "items": { + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to firewall port list declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Firewall_Port_List" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP Firewall Port List", + "description": "Pathname of existing BIG-IP firewall port list", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security firewall port-list" + ] + } + }, + "minItems": 1 + } + }, + "additionalProperties": false, + "required": [ + "class" + ], + "anyOf": [ + { + "required": [ + "ports" + ] + }, + { + "required": [ + "portLists" + ] + } + ] + }, + "Firewall_Rule_List": { + "title": "Firewall_Rule_List", + "description": "Declares a list of network firewall rules. You can reuse a rule list in multiple firewalls, such as the firewalls for self IPs, routing domains, and the global firewall.", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm" + ] + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Firewall_Rule_List" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "rules": { + "type": "array", + "description": "A list of network firewall rules.", + "items": { + "$ref": "#/definitions/Firewall_Rule" + } + } + }, + "additionalProperties": false, + "required": [ + "class" + ] + }, + "Firewall_Rule": { + "title": "Firewall Rule", + "description": "Declares a network firewall rule.", + "type": "object", + "properties": { + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "name": { + "type": "string", + "description": "The name of the firewall rule." + }, + "action": { + "type": "string", + "description": "Specifies the action that the firewall rule will take on matching packets.", + "enum": [ + "accept", + "drop", + "accept-decisively", + "reject" + ] + }, + "protocol": { + "type": "string", + "description": "Specifies the protocol to which the firewall rule applies", + "enum": [ + "3pc", + "a/n", + "ah", + "any", + "argus", + "aris", + "ax.25", + "bbn-rcc", + "bna", + "br-sat-mon", + "cbt", + "cftp", + "chaos", + "compaq-peer", + "cphb", + "cpnx", + "crdup", + "crtp", + "dccp", + "dcn", + "ddp", + "ddx", + "dgp", + "dsr", + "egp", + "eigrp", + "emcon", + "encap", + "esp", + "etherip", + "fc", + "fire", + "ggp", + "gmtp", + "gre", + "hip", + "hmp", + "hopopt", + "i-nlsp", + "iatp", + "icmp", + "idpr", + "idpr-cmtp", + "idrp", + "ifmp", + "igmp", + "igp", + "il", + "ip", + "ipcomp", + "ipcv", + "ipip", + "iplt", + "ippc", + "ipv4", + "ipv6", + "ipv6-auth", + "ipv6-crypt", + "ipv6-frag", + "ipv6-icmp", + "ipv6-nonxt", + "ipv6-opts", + "ipv6-route", + "ipx-in-ip", + "irtp", + "isis", + "iso-ip", + "iso-tp4", + "kryptolan", + "l2tp", + "larp", + "leaf-1", + "leaf-2", + "manet", + "merit-inp", + "mfe-nsp", + "micp", + "mobile", + "mobility-header", + "mpls-in-ip", + "mtp", + "mux", + "narp", + "netblt", + "nsfnet-igp", + "nvp", + "ospf", + "pgm", + "pim", + "pipe", + "pnni", + "prm", + "ptp", + "pup", + "pvp", + "qnx", + "rdp", + "rohc", + "rsvp", + "rsvp-e2e-ignore", + "rvd", + "sat-expak", + "sat-mon", + "scc-sp", + "scps", + "sctp", + "sdrp", + "secure-vmtp", + "shim6", + "skip", + "sm", + "smp", + "snp", + "sprite-rpc", + "sps", + "srp", + "sscopmce", + "st", + "stp", + "sun-nd", + "swipe", + "tcf", + "tcp", + "tlsp", + "tp++", + "trunk-1", + "trunk-2", + "ttp", + "udp", + "udplite", + "uti", + "vines", + "visa", + "vmtp", + "vrrp", + "wb-expak", + "wb-mon", + "wesp", + "wsn", + "xnet", + "xns-idp", + "xtp" + ], + "default": "any" + }, + "source": { + "$ref": "#/definitions/Firewall_Rule_Source" + }, + "destination": { + "$ref": "#/definitions/Firewall_Rule_Destination" + }, + "loggingEnabled": { + "type": "boolean", + "description": "Specifies whether the system enables or disables logging for the firewall rule.", + "default": false + }, + "iRule": { + "type": "object", + "description": "Specifies the name of the iRule (by BIG-IP AS3 pointer or BIG-IP pathname) that the system will trigger when a packet matches the firewall rule.", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to iRule declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "iRule" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP iRule", + "description": "Pathname of existing BIG-IP iRule", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm rule" + ] + } + }, + "iRuleSampleRate": { + "type": "integer", + "description": "Specifies the rate at which the system will trigger the specified iRule when a packet matches this firewall rule. The default value is 1 and causes the system to trigger the iRule for every packet that matches. A value of 0 disables iRule triggering." + } + }, + "additionalProperties": false, + "dependencies": { + "iRuleSampleRate": [ + "iRule" + ] + }, + "required": [ + "name", + "action" + ] + }, + "Firewall_Rule_Source": { + "title": "Firewall Rule Source", + "description": "Declares the packet sources to which the network firewall rule applies.", + "type": "object", + "properties": { + "addressLists": { + "type": "array", + "description": "A list of address lists (each by BIG-IP AS3 pointer or BIG-IP pathname).", + "items": { + "$ref": "#/definitions/Pointer_Firewall_Address_List" + } + }, + "portLists": { + "type": "array", + "description": "A list of port lists (each by BIG-IP AS3 pointer or BIG-IP pathname).", + "items": { + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to firewall port list declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Firewall_Port_List" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP Firewall Port List", + "description": "Pathname of existing BIG-IP firewall port list", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security firewall port-list" + ] + } + } + }, + "vlans": { + "type": "array", + "description": "A list of VLANs by BIG-IP pathname", + "items": { + "bigip": { + "title": "BIG-IP VLAN", + "description": "Pathname of existing BIG-IP VLAN", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query net vlan" + ] + } + } + }, + "additionalProperties": false + }, + "Firewall_Rule_Destination": { + "title": "Firewall Rule Destination", + "description": "Declares the packet destinations to which the network firewall rule applies.", + "type": "object", + "properties": { + "addressLists": { + "type": "array", + "description": "A list of address lists (each by BIG-IP AS3 pointer or BIG-IP pathname).", + "items": { + "$ref": "#/definitions/Pointer_Firewall_Address_List" + } + }, + "portLists": { + "type": "array", + "description": "A list of port lists (each by BIG-IP AS3 pointer or BIG-IP pathname).", + "items": { + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to firewall port list declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Firewall_Port_List" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP Firewall Port List", + "description": "Pathname of existing BIG-IP firewall port list", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security firewall port-list" + ] + } + } + } + }, + "additionalProperties": false + }, + "Firewall_Policy": { + "title": "Firewall_Policy", + "description": "Configures firewall policy", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm" + ] + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Firewall_Policy" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "rules": { + "description": "A list of firewall policy rules", + "type": "array", + "items": { + "if": { + "oneOf": [ + { + "required": [ + "use" + ] + }, + { + "required": [ + "bigip" + ] + } + ] + }, + "then": { + "$ref": "#/definitions/Pointer_Firewall_Rule_List" + }, + "else": { + "$ref": "#/definitions/Firewall_Rule" + } + } + }, + "routeDomainEnforcement": { + "description": "Specifies Route Domains to enforce this policy on. Rules of this policy will be enforced on the Route Domains. If setting this property, the Firewall_Policy must be defined in /Common/Shared.", + "type": "array", + "items": { + "allOf": [ + { + "$ref": "#/definitions/Pointer_Route_Domain" + } + ] + } + } + }, + "additionalProperties": false, + "required": [ + "class", + "rules" + ] + }, + "NAT_Policy": { + "title": "NAT_Policy", + "description": "Configures network address translation policy", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm" + ] + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "NAT_Policy" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "rules": { + "description": "A list of NAT rules", + "type": "array", + "items": { + "$ref": "#/definitions/NAT_Rule" + } + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "NAT_Rule": { + "description": "Network address translation rule", + "type": "object", + "properties": { + "name": { + "description": "NAT rule name", + "type": "string" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "source": { + "$ref": "#/definitions/NAT_Rule_Source" + }, + "destination": { + "$ref": "#/definitions/NAT_Rule_Destination" + }, + "protocol": { + "description": "Specifies the IP protocol against which the packet will be compared", + "type": "string", + "enum": [ + "any", + "tcp", + "udp" + ], + "default": "any" + }, + "sourceTranslation": { + "allOf": [ + { + "$ref": "#/definitions/Pointer_NAT_Source_Translation" + } + ] + }, + "securityLogProfile": { + "allOf": [ + { + "$ref": "#/definitions/Pointer_Security_Log_Profile" + } + ] + } + }, + "required": [ + "name" + ], + "additionalProperties": false + }, + "NAT_Rule_Destination": { + "description": "Network address translation destination configuration", + "type": "object", + "properties": { + "addressLists": { + "description": "A list of address lists (each by BIG-IP AS3 pointer or BIG-IP pathname)", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Firewall_Address_List" + } + }, + "portLists": { + "description": "A list of port lists (each by BIG-IP AS3 pointer or BIG-IP pathname)", + "type": "array", + "items": { + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to firewall port list declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Firewall_Port_List" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP Firewall Port List", + "description": "Pathname of existing BIG-IP firewall port list", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security firewall port-list" + ] + } + } + } + }, + "required": [], + "additionalProperties": false + }, + "NAT_Rule_Source": { + "description": "Network address translation source configuration", + "type": "object", + "properties": { + "addressLists": { + "description": "A list of address lists (each by BIG-IP AS3 pointer or BIG-IP pathname)", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Firewall_Address_List" + } + }, + "portLists": { + "description": "A list of port lists (each by BIG-IP AS3 pointer or BIG-IP pathname)", + "type": "array", + "items": { + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to firewall port list declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Firewall_Port_List" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP Firewall Port List", + "description": "Pathname of existing BIG-IP firewall port list", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security firewall port-list" + ] + } + } + } + }, + "required": [], + "additionalProperties": false + }, + "NAT_Source_Translation": { + "title": "NAT_Source_Translation", + "description": "Configures a Security network address translation source translation object", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm" + ] + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "NAT_Source_Translation" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "addresses": { + "description": "Specifies addresses on which source translation is performed", + "type": "array", + "items": { + "type": "string" + } + }, + "allowEgressInterfaces": { + "description": "Specifies the egress interfaces (tunnels and VLANs) on which source translation is allowed", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Tunnel" + } + }, + "clientConnectionLimit": { + "description": "Maximum number of simultaneous translated connections a client or subscriber is allowed to have", + "type": "integer", + "minimum": 0, + "maximum": 2147483647 + }, + "disallowEgressInterfaces": { + "description": "Specifies the egress interfaces (tunnels and VLANs) on which source translation is not allowed", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Tunnel" + } + }, + "hairpinModeEnabled": { + "type": "boolean", + "description": "Enables or disables hairpinning for incoming connections to active translation end-points" + }, + "inboundMode": { + "description": "Specifies the persistence settings for NAT translation entries", + "type": "string", + "enum": [ + "endpoint-independent-filtering", + "explicit", + "none" + ] + }, + "mapping": { + "$ref": "#/definitions/NAT_Source_Translation_Mapping" + }, + "patMode": { + "description": "Specifies whether the translation address mapping is performed in Network Address Port Translation mode, Deterministic mode, or in Port Block Allocation mode", + "type": "string", + "enum": [ + "napt", + "deterministic", + "pba" + ] + }, + "portBlockAllocation": { + "$ref": "#/definitions/NAT_Source_Translation_PortBlockAllocation" + }, + "ports": { + "description": "Specifies source ports and port ranges on which source translation is performed", + "type": "array", + "items": { + "type": [ + "integer", + "string" + ], + "minimum": 0, + "maximum": 65535 + } + }, + "routeAdvertisement": { + "type": "boolean", + "description": "Specifies that the traffic is advertised to dynamic routing protocols configured in the route domain", + "default": false + }, + "type": { + "description": "Specifies the type of source translation item", + "type": "string", + "enum": [ + "dynamic-pat", + "static-nat", + "static-pat" + ] + }, + "excludeAddresses": { + "description": "Specifies the set of addresses excluded from translation IP addresses available in the pool. This property is available on BIGIP 14.1 and above.", + "type": "array", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/Pointer_Firewall_Address_List" + } + ] + } + } + }, + "dependencies": { + "clientConnectionLimit": { + "properties": { + "type": { + "const": "dynamic-pat" + } + } + }, + "hairpinModeEnabled": { + "properties": { + "type": { + "const": "dynamic-pat" + } + } + }, + "inboundMode": { + "properties": { + "type": { + "const": "dynamic-pat" + } + } + }, + "mapping": { + "properties": { + "type": { + "const": "dynamic-pat" + } + } + }, + "patMode": { + "properties": { + "type": { + "const": "dynamic-pat" + } + } + }, + "portBlockAllocation": { + "properties": { + "type": { + "const": "dynamic-pat" + }, + "patMode": { + "const": "pba" + } + } + }, + "ports": { + "properties": { + "type": { + "enum": [ + "static-pat", + "dynamic-pat" + ] + } + } + } + }, + "if": { + "properties": { + "allowEgressInterfaces": {} + }, + "required": [ + "allowEgressInterfaces" + ] + }, + "then": { + "not": { + "properties": { + "disallowEgressInterfaces": {} + }, + "required": [ + "disallowEgressInterfaces" + ] + } + }, + "required": [ + "type" + ], + "additionalProperties": false + }, + "NAT_Source_Translation_Mapping": { + "description": "Configure the mapping settings for translation entries. It is the preservation of a public-side IP address for a client from session to session. Only available if type is dynamic-pat.", + "type": "object", + "properties": { + "mode": { + "description": "Specifies the mapping mode for translation entries", + "type": "string", + "enum": [ + "address-pooling-paired", + "endpoint-independent-mapping", + "none" + ], + "default": "address-pooling-paired" + }, + "timeout": { + "description": "Specifies the timeout (in seconds) for address and port mapping", + "type": "integer", + "minimum": 0, + "maximum": 2147483647, + "default": 300 + } + }, + "required": [], + "additionalProperties": false + }, + "NAT_Source_Translation_PortBlockAllocation": { + "description": "Configure the port block allocation", + "type": "object", + "properties": { + "blockIdleTimeout": { + "description": "Specifies the amount of time in seconds that an assigned block of ports remains available when idle before it times out", + "type": "integer", + "minimum": 0, + "maximum": 2147483647, + "default": 3600 + }, + "blockLifetime": { + "description": "Specifies the lifetime in seconds of a block of ports", + "type": "integer", + "minimum": 0, + "maximum": 2147483647, + "default": 0 + }, + "blockSize": { + "description": "Specifies the number of ports per block. Each block is assigned to one client. A client can use all ports in a block multiplied by the number of blocks, up to the connection limit, if one is set", + "type": "integer", + "minimum": 0, + "maximum": 2147483647, + "default": 64 + }, + "clientBlockLimit": { + "description": "Specifies the number of blocks that can be assigned to a client", + "type": "integer", + "minimum": 0, + "maximum": 2147483647, + "default": 1 + }, + "zombieTimeout": { + "description": "Specifies the timeout duration for a zombie port block, which is a timed out port block with one or more active connections", + "type": "integer", + "minimum": 0, + "maximum": 2147483647, + "default": 0 + } + }, + "required": [], + "additionalProperties": false + }, + "Protocol_Inspection_Profile": { + "title": "Protocol_Inspection_Profile", + "description": "Protocol Inspection Profile used for configurable BIG-IP AFM intrusion prevention", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Protocol_Inspection_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "collectAVRStats": { + "description": "If true, AVR will collect data from the intrusion prevention profile", + "type": "boolean", + "default": true + }, + "enableComplianceChecks": { + "description": "Specifies whether the compliance checks will be enabled for this profile", + "type": "boolean", + "default": true + }, + "enableSignatureChecks": { + "description": "Specifies whether the signature checks will be enabled for this profile", + "type": "boolean", + "default": true + }, + "autoAddNewInspections": { + "description": "Specifies whether new inspections delivered via IPS IM package will be automatically added to this profile", + "type": "boolean", + "default": false + }, + "autoPublish": { + "description": "Specifies whether the inspections will be automatically updated to the suggested action after the staging period", + "type": "boolean", + "default": false + }, + "defaultFromProfile": { + "description": "Specifies the parent profile. If specified, the new profile will be cloned from the parent", + "type": "string" + }, + "services": { + "description": "Specifies the services and service checks for this profile", + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "description": "The name of the service type", + "type": "string", + "enum": [ + "boxp", + "coap", + "dhcp", + "diameter", + "dns", + "ftp", + "gtp", + "http", + "imap", + "ipsec", + "irc", + "mqtt", + "mysql", + "netbios_ns", + "netbios_ssn", + "nntp", + "oracle", + "other", + "pfcp", + "pop3", + "radius", + "rdp", + "rmi", + "rsh", + "sip", + "smtp", + "snmp", + "ssh", + "ssl", + "sunrpc", + "telnet", + "tftp", + "thrift", + "wins" + ] + }, + "compliance": { + "description": "A list of compliance checks to attach to the Protocol Inspection Profile", + "type": "array", + "items": { + "$ref": "#/definitions/Protocol_Inspection_Profile_Service_Compliance_Check" + } + }, + "signature": { + "description": "A list of signature checks to attach to the Protocol Inspection Profile", + "type": "array", + "items": { + "$ref": "#/definitions/Protocol_Inspection_Profile_Service_Signature_Check" + } + }, + "ports": { + "description": "List of ports to attach to the service.", + "type": "array", + "items": { + "type": "integer", + "minimum": 0, + "maximum": 65535 + } + } + }, + "allOf": [ + { + "if": { + "properties": { + "type": { + "const": "dhcp" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 67, + 68 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "dns" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 53 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "gtp" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 2123, + 2152, + 3386 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "imap" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 143, + 993 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "mqtt" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 1883 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "netbios_ns" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 137 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "nntp" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 119 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "pop3" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 110 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "sip" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 5060, + 5061 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "snmp" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 161, + 162 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "ssl" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 443 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "telnet" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 23 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "wins" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 42 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "diameter" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 3868 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "ftp" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 20, + 21 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "http" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 80, + 8080 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "irc" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 6663, + 6667, + 6668, + 7000 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "mysql" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 3306 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "netbios_ssn" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 139, + 445 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "radius" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 1645, + 1646, + 1812, + 1813 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "smtp" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 25 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "ssh" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 22 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "sunrpc" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 111 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "tftp" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 69 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "coap" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 5683 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "oracle" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 1521 + ] + } + } + } + }, + { + "if": { + "properties": { + "type": { + "const": "pfcp" + } + } + }, + "then": { + "properties": { + "ports": { + "default": [ + 8805 + ] + } + } + } + } + ], + "required": [ + "type" + ], + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + "Protocol_Inspection_Profile_Service_Compliance_Check": { + "title": "Protocol Inspection Profile Service Compliance Check", + "description": "Defines a compliance check to attach to the Protocol Inspection Profile", + "type": "object", + "properties": { + "check": { + "type": "string", + "description": "The name of the check" + }, + "action": { + "type": "string", + "enum": [ + "accept", + "drop", + "reject" + ], + "description": "Which action to perform on traffic matching the check", + "default": "accept" + }, + "log": { + "type": "boolean", + "description": "Specifies whether to log the check", + "default": true + }, + "value": { + "type": "string", + "description": "Value to use for the check. If a check accepts enumerable values, these should be delimited by spaces." + } + }, + "required": [ + "check" + ], + "additionalProperties": false + }, + "Protocol_Inspection_Profile_Service_Signature_Check": { + "type": "object", + "title": "Protocol Inspection Profile Service Signature Check", + "description": "Defines a signature check to attach to the Protocol Inspection Profile", + "properties": { + "check": { + "type": "string", + "description": "The name of the check" + }, + "action": { + "type": "string", + "enum": [ + "accept", + "drop", + "reject" + ], + "description": "Which action to perform on traffic matching the check", + "default": "accept" + }, + "log": { + "type": "boolean", + "description": "Specifies whether to log the check", + "default": true + } + }, + "required": [ + "check" + ], + "additionalProperties": false + }, + "SSH_Proxy_Profile": { + "title": "SSH_Proxy_Profile", + "description": "SSH Profile used for SSH security", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "SSH_Proxy_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "sshProfileAuthInfo": { + "description": "Specifies the authentication info of public and private keys for this profile", + "type": "array", + "items": { + "$ref": "#/definitions/SSH_Proxy_Profile_Auth_Info_Collection" + } + }, + "sshProfileDefaultActions": { + "description": "Specifies the default action values", + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Default_Action_Collection" + } + ], + "default": {} + }, + "sshProfileRuleSet": { + "description": "The profile's collection of rules, each rule holds a set of actions", + "type": "array", + "items": { + "$ref": "#/definitions/SSH_Proxy_Profile_Rule_Collection" + } + }, + "timeout": { + "description": "User defined timeout value", + "type": "integer", + "default": 0 + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "SSH_Proxy_Profile_Auth_Info_Collection": { + "description": "A collection of authentication info of public and private keys", + "type": "object", + "properties": { + "name": { + "description": "The name of this set of Authorized Info", + "type": "string" + }, + "proxyServerAuth": { + "$ref": "#/definitions/SSH_Proxy_Profile_Proxy_Auth_Info" + }, + "proxyClientAuth": { + "$ref": "#/definitions/SSH_Proxy_Profile_Proxy_Auth_Info" + }, + "realServerAuth": { + "$ref": "#/definitions/SSH_Proxy_Profile_Real_Server_Auth_Info" + } + }, + "additionalProperties": false + }, + "SSH_Proxy_Profile_Proxy_Auth_Info": { + "description": "The keys used to authenticate ssh connections between the big-ip and external sources", + "type": "object", + "properties": { + "privateKey": { + "description": "The private key of the authentication algorithm (rsa, dss, etc...)", + "type": "object", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "allOf": [ + { + "$ref": "#/definitions/Secret" + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "object" + } + }, + { + "f5PostProcess": { + "tag": "secret" + } + } + ] + }, + "publicKey": { + "description": "The public key of the authentication algorithm (rsa, dss, etc...)", + "type": "string" + } + }, + "additionalProperties": false + }, + "SSH_Proxy_Profile_Real_Server_Auth_Info": { + "description": "Public key that can be used to authenticate real host server to the proxy", + "type": "object", + "properties": { + "publicKey": { + "description": "The public key of the authentication algorithm (rsa, dss, etc...)", + "type": "string" + } + }, + "additionalProperties": false + }, + "SSH_Proxy_Profile_Default_Action_Collection": { + "description": "A collection of actions for the SSH Profile", + "type": "object", + "properties": { + "name": { + "description": "The name of this set of actions", + "type": "string" + }, + "agentAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Default_Action" + } + ], + "default": {} + }, + "localForwardAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Default_Action" + } + ], + "default": {} + }, + "otherAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Default_Action" + } + ], + "default": {} + }, + "remoteForwardAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Default_Action" + } + ], + "default": {} + }, + "rexecAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Default_Action" + } + ], + "default": {} + }, + "scpUpAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Default_Action" + } + ], + "default": {} + }, + "scpDownAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Default_Action" + } + ], + "default": {} + }, + "sftpUpAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Default_Action" + } + ], + "default": {} + }, + "sftpDownAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Default_Action" + } + ], + "default": {} + }, + "shellAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Default_Action" + } + ], + "default": {} + }, + "subSystemAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Default_Action" + } + ], + "default": {} + }, + "x11ForwardAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Default_Action" + } + ], + "default": {} + } + }, + "additionalProperties": false + }, + "SSH_Proxy_Profile_Default_Action": { + "description": "The action an SSH Profile will take. The default value is 'allow'.", + "type": "object", + "properties": { + "control": { + "description": "Indicates the specific action to take", + "type": "string", + "enum": [ + "allow", + "disallow", + "terminate", + "unspecified" + ], + "default": "allow" + }, + "log": { + "description": "Indicates if a log will be created when the action is taken. The default value is false.", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "SSH_Proxy_Profile_Rule_Collection": { + "description": "User defined rule", + "type": "object", + "properties": { + "name": { + "description": "The name of this set of rules", + "type": "string" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "sshProfileIdUsers": { + "description": "Specifies the rule users identity", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "sshProfileIdGroups": { + "description": "Specifies the rule groups identity", + "type": "array", + "items": { + "type": "string" + } + }, + "sshProfileRuleActions": { + "description": "The sets of actions in the rule", + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Rule_Action_Collection" + } + ], + "default": {} + } + }, + "anyOf": [ + { + "required": [ + "sshProfileIdUsers" + ] + }, + { + "required": [ + "sshProfileIdGroups" + ] + } + ], + "required": [ + "name" + ], + "additionalProperties": false + }, + "SSH_Proxy_Profile_Rule_Action_Collection": { + "description": "A collection of actions for the SSH Profile", + "type": "object", + "properties": { + "name": { + "description": "The name of this set of actions", + "type": "string" + }, + "agentAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Rule_Action" + } + ], + "default": {} + }, + "localForwardAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Rule_Action" + } + ], + "default": {} + }, + "otherAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Rule_Action" + } + ], + "default": {} + }, + "remoteForwardAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Rule_Action" + } + ], + "default": {} + }, + "rexecAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Rule_Action" + } + ], + "default": {} + }, + "scpUpAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Rule_Action" + } + ], + "default": {} + }, + "scpDownAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Rule_Action" + } + ], + "default": {} + }, + "sftpUpAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Rule_Action" + } + ], + "default": {} + }, + "sftpDownAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Rule_Action" + } + ], + "default": {} + }, + "shellAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Rule_Action" + } + ], + "default": {} + }, + "subSystemAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Rule_Action" + } + ], + "default": {} + }, + "x11ForwardAction": { + "allOf": [ + { + "$ref": "#/definitions/SSH_Proxy_Profile_Rule_Action" + } + ], + "default": {} + } + }, + "additionalProperties": false + }, + "SSH_Proxy_Profile_Rule_Action": { + "description": "The action an SSH Profile Rule will take. The default value is 'unspecified'.", + "type": "object", + "properties": { + "control": { + "description": "Indicates the specific action to take", + "type": "string", + "enum": [ + "allow", + "disallow", + "terminate", + "unspecified" + ], + "default": "unspecified" + }, + "log": { + "description": "Indicates if a log will be created when the action is taken. The default value is false.", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "Data_Group": { + "title": "Data_Group", + "description": "Configures a data group object which contains list of data", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Data_Group" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "storageType": { + "title": "Storage Type", + "description": "Toggles whether the data group is internal or external", + "type": "string", + "enum": [ + "internal", + "external" + ], + "default": "internal" + }, + "keyDataType": { + "title": "Data Type", + "description": "Specifies the type of record keys the data group contains. If string, the value will be escaped by default", + "type": "string", + "enum": [ + "integer", + "ip", + "string" + ] + } + }, + "if": { + "properties": { + "storageType": { + "const": "internal" + } + } + }, + "then": { + "allOf": [ + { + "if": { + "properties": { + "keyDataType": { + "const": "string" + } + } + }, + "then": { + "$ref": "#/definitions/Data_Group_Records_String" + } + }, + { + "if": { + "properties": { + "keyDataType": { + "const": "integer" + } + } + }, + "then": { + "$ref": "#/definitions/Data_Group_Records_Integer" + } + }, + { + "if": { + "properties": { + "keyDataType": { + "const": "ip" + } + } + }, + "then": { + "$ref": "#/definitions/Data_Group_Records_IP" + } + } + ], + "required": [ + "class", + "keyDataType", + "records" + ] + }, + "else": { + "properties": { + "externalFilePath": { + "title": "External File Path", + "description": "Specifies the location (URI) from where the records will be copied", + "allOf": [ + { + "$ref": "#/definitions/Resource_URL" + }, + { + "f5PostProcess": { + "tag": "checkResource" + } + } + ] + }, + "separator": { + "title": "Record Key Value Separator", + "description": "Specifies the character(s) that separate the record key and value", + "type": "string", + "default": ":=" + }, + "ignoreChanges": { + "title": "Ignore changes", + "description": "If false (default), the system updates data group in every BIG-IP AS3 declaration deployment. If true, BIG-IP AS3 creates the data group on first deployment, and leaves it untouched afterwards", + "type": "boolean", + "default": false + }, + "dataGroupFile": { + "$ref": "#/definitions/Pointer_Data_Group_File" + } + }, + "oneOf": [ + { + "required": [ + "class", + "keyDataType", + "externalFilePath" + ] + }, + { + "required": [ + "class", + "keyDataType", + "dataGroupFile" + ] + } + ], + "not": { + "required": [ + "externalFilePath", + "dataGroupFile" + ] + } + } + }, + "Data_Group_Records_Base": { + "title": "Data Group - Records", + "description": "Configures data group records to store", + "type": "object", + "properties": { + "records": { + "title": "Records", + "description": "List of records", + "type": "array", + "items": { + "type": "object", + "description": "A record object to store", + "properties": { + "value": { + "title": "Record value", + "description": "Value to store", + "type": "string" + } + } + } + } + } + }, + "Data_Group_Records_String": { + "description": "A specialization of Data_Group_Records_Base where all items in the records property must be strings.", + "allOf": [ + { + "$ref": "#/definitions/Data_Group_Records_Base" + }, + { + "properties": { + "records": { + "type": "array", + "items": { + "type": "object", + "properties": { + "key": { + "title": "Record Key", + "description": "Record Identifier", + "type": "string" + } + }, + "required": [ + "key" + ] + } + } + } + } + ] + }, + "Data_Group_Records_Integer": { + "description": "A specialization of Data_Group_Records_Base where all items in the records property must be integers.", + "allOf": [ + { + "$ref": "#/definitions/Data_Group_Records_Base" + }, + { + "properties": { + "records": { + "type": "array", + "items": { + "type": "object", + "properties": { + "key": { + "title": "Record Key", + "description": "Record Identifier", + "type": "integer" + } + }, + "required": [ + "key" + ] + } + } + } + } + ] + }, + "Data_Group_Records_IP": { + "description": "A specialization of Data_Group_Records_Base where all items in the records property must be IP addresses.", + "allOf": [ + { + "$ref": "#/definitions/Data_Group_Records_Base" + }, + { + "properties": { + "records": { + "type": "array", + "items": { + "type": "object", + "properties": { + "key": { + "title": "Record Key", + "description": "Record Identifier - string can be ip address or ip address with netmask (if not provided, default is /32)", + "type": "string", + "format": "f5ip" + } + }, + "required": [ + "key" + ] + } + } + } + } + ] + }, + "DNS_Cache": { + "title": "DNS_Cache", + "description": "Configures a DNS cache", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "DNS_Cache" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "type": { + "description": "Type of DNS cache", + "type": "string", + "enum": [ + "transparent", + "resolver", + "validating-resolver" + ] + } + }, + "allOf": [ + { + "if": { + "properties": { + "type": { + "const": "transparent" + } + } + }, + "then": { + "$ref": "#/definitions/DNS_Cache_Transparent" + } + }, + { + "if": { + "properties": { + "type": { + "const": "resolver" + } + } + }, + "then": { + "$ref": "#/definitions/DNS_Cache_Resolver" + } + }, + { + "if": { + "properties": { + "type": { + "const": "validating-resolver" + } + } + }, + "then": { + "$ref": "#/definitions/DNS_Cache_Validating_Resolver" + } + } + ], + "required": [ + "class", + "type" + ] + }, + "DNS_Cache_Transparent": { + "description": "Properties for a DNS transparent cache", + "type": "object", + "properties": { + "answerDefaultZones": { + "description": "Specifies whether the system answers DNS queries for the default zones localhost, reverse 127.0.0.1 and ::1, and AS112", + "type": "boolean", + "default": false + }, + "localZones": { + "description": "Configures resource records that a DNS cache uses to resolve matching DNS queries with authoritative DNS responses", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/DNS_Zone_Local" + } + }, + "messageCacheSize": { + "description": "Specifies the maximum size of the message cache in bytes", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 1048576 + }, + "recordCacheSize": { + "description": "Specifies the maximum size of the resource record (RR) cache in bytes", + "type": "integer", + "minimum": 1, + "maximum": 4294967295, + "default": 10485760 + }, + "recordRotationMethod": { + "description": "Specifies the resource record rotation method used within cached responses", + "type": "string", + "enum": [ + "none", + "query-id" + ], + "default": "none" + } + } + }, + "DNS_Profile": { + "title": "DNS_Profile", + "description": "Configures a Domain Name System (DNS) profile", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "DNS_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "parentProfile": { + "description": "Specifies the name of the object to inherit the settings from", + "allOf": [ + { + "$ref": "#/definitions/Pointer_DNS_Profile" + } + ], + "default": { + "bigip": "/Common/dns" + } + }, + "rapidResponseEnabled": { + "description": "When enabled, if the query name matches a GTM wide IP name and GTM is enabled on this profile, the DNS query will bypass Rapid Response. Note: This setting is supported only on physical BIG-IP hardware because it needs a High-Speed Bridge (HSB) to work. When using BIG-IP Virtual Edition, however, the system does not prevent you from selecting an action, even though the setting is ignored.", + "type": "boolean", + "default": false + }, + "rapidResponseLastAction": { + "description": "Specifies what action the system takes when Rapid Response Mode is enabled and the incoming DNS query does not match a DNS Express Zone", + "type": "string", + "enum": [ + "allow", + "drop", + "noerror", + "nxdomain", + "refuse", + "truncate" + ], + "default": "drop" + }, + "hardwareQueryValidationEnabled": { + "description": "On supported platforms, indicates whether the hardware will accelerate query validation", + "type": "boolean", + "default": false + }, + "hardwareResponseCacheEnabled": { + "description": "On supported platforms, indicates whether the hardware will cache responses", + "type": "boolean", + "default": false + }, + "dnssecEnabled": { + "description": "Specifies whether the system signs responses with DNSSEC keys and replies to DNSSEC specific queries (e.g., DNSKEY query type)", + "type": "boolean", + "default": true + }, + "globalServerLoadBalancingEnabled": { + "description": "Specifies whether the system uses Global Traffic Manager to manage the response", + "type": "boolean", + "default": true + }, + "dnsExpressEnabled": { + "description": "Specifies whether the DNS Express engine is enabled. The DNS Express engine receives zone transfers from the authoritative DNS server for the zone. If the Zone Transfer setting is also enabled on this profile, the DNS Express engine also responds to zone transfer requests made by the nameservers configured as zone transfer clients for the DNS Express zone. ", + "type": "boolean", + "default": true + }, + "cacheEnabled": { + "description": "Specifies whether the system caches DNS responses", + "type": "boolean", + "default": false + }, + "cache": { + "$ref": "#/definitions/Pointer_DNS_Cache" + }, + "dns64Mode": { + "description": "Specifies handling of AAAA and A DNS queries and responses", + "type": "string", + "enum": [ + "disabled", + "secondary", + "immediate", + "v4-only" + ], + "default": "disabled" + }, + "dns64Prefix": { + "description": "Specifies the prefix to use for the IPv6-formatted IP addresses that the system converts to IPv4-formatted IP addresses", + "type": "string", + "default": "0:0:0:0:0:0:0:0" + }, + "dns64AdditionalSectionRewrite": { + "description": "Select an option to allow improved network efficiency for both Unicast and Multicast DNS-SD responses", + "type": "string", + "enum": [ + "disabled", + "v6-only", + "v4-only", + "any" + ], + "default": "disabled" + }, + "unhandledQueryAction": { + "description": "Specifies whether the system uses the local BIND server on the BIG-IP system", + "type": "string", + "enum": [ + "allow", + "drop", + "hint", + "noerror", + "reject" + ], + "default": "allow" + }, + "localBindServerEnabled": { + "description": "Specifies whether the system forwards non-wide IP queries to the local BIND server on the BIG-IP system. For best performance, disable this setting when using a DNS cache.", + "type": "boolean", + "default": true + }, + "zoneTransferEnabled": { + "description": "Specifies whether the system answers zone transfer requests for a DNS zone created on the system. The DNS Express and Zone Transfer settings on a DNS profile affect how the system responds to zone transfer requests. ", + "type": "boolean", + "default": false + }, + "recursionDesiredEnabled": { + "description": "Specifies whether to process client-side DNS packets with Recursion Desired set in the header. If set to Disabled, processing of the packet is subject to the unhandled-query-action option.", + "type": "boolean", + "default": true + }, + "securityEnabled": { + "description": "Specifies whether DNS firewall capability is enabled.", + "type": "boolean", + "default": true + }, + "securityProfile": { + "$ref": "#/definitions/Pointer_DNS_Security_Profile" + }, + "loggingEnabled": { + "description": "Specifies whether to process client-side DNS packets with Recursion Desired set in the header. If set to Disabled, processing of the packet is subject to the unhandled-query-action option.", + "type": "boolean", + "default": true + }, + "loggingProfile": { + "$ref": "#/definitions/Pointer_DNS_Logging_Profile" + }, + "statisticsSampleRate": { + "description": "Sets AVR DNS statistics sampling rate. A value of 0 (zero) means that no query will be sent to the analytics database. A value of 1 means that every query will be sent. A value of n means that every nth query will be sent, and that the analytics database will count that query n times. When sampling rate is greater than one, the statistics will be inaccurate if the traffic volume is low. However, when the traffic volume is high, the system performance will benefit from sampling and the inaccuracy will be negligible. DNS statistics contain query name, query type, virtual server IP and client IP. ", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 0 + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "DNS_TSIG_Key": { + "title": "DNS_TSIG_Key", + "description": "Configures a TSIG key", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "DNS_TSIG_Key" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "algorithm": { + "description": "Specifies the algorithm the system uses to authenticate AXFR zone transfer requests as coming from an approved DNS nameserver, or to authenticate AXFR zone transfers as coming from an approved back-end DNS authoritative server. The algorithm involves a cryptographic hash function in combination with a secret, which is specified in the Secret field. The default is HMAC MD5 (the Hash-based Message Authentication Code MD5).", + "type": "string", + "enum": [ + "hmacmd5", + "hmacsha1", + "hmacsha256" + ], + "default": "hmacmd5" + }, + "secret": { + "description": "Specifies the secret used with the algorithm in the verification process. The secret must be generated by a third-party tool such as BIND's keygen utility; the BIG-IP system does not generate the TSIG key secret.", + "type": "object", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "allOf": [ + { + "$ref": "#/definitions/Secret" + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "object" + } + }, + { + "f5PostProcess": { + "tag": "secret" + } + } + ] + } + }, + "required": [ + "class", + "secret" + ], + "additionalProperties": false + }, + "DNS_Zone": { + "title": "DNS_Zone", + "description": "Configures a DNS zone", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "DNS_Zone" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "dnsExpress": { + "$ref": "#/definitions/DNS_Zone_DNS_Express" + }, + "responsePolicyEnabled": { + "description": "Specifies if this is a response policy zone. If this is set to yes, this zone may be assigned as an RPZ to a DNS Cache", + "type": "boolean", + "default": false + }, + "serverTsigKey": { + "$ref": "#/definitions/Pointer_DNS_TSIG_Key" + }, + "transferClients": { + "description": "Specifies the DNS nameservers to which the system sends NOTIFY messages. The system allows only the DNS nameservers in the Active column to initiate AXFR zone transfers for this DNS zone.", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_DNS_Nameserver" + } + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "DNS_Zone_DNS_Express": { + "description": "Configure zone DNS Express settings", + "type": "object", + "properties": { + "enabled": { + "description": "Specifies whether DNS Express is enabled to process queries for this zone", + "type": "boolean", + "default": true + }, + "nameserver": { + "description": "Specifies the back-end authoritative DNS server from which the BIG-IP system receives AXFR zone transfers for the DNS Express zone. The options are None and user-defined nameservers.", + "allOf": [ + { + "$ref": "#/definitions/Pointer_DNS_Nameserver" + } + ] + }, + "notifyAction": { + "description": "Specifies the action the system takes when a NOTIFY message is received for this DNS Express zone. NOTIFY responses are assumed to be sent by the authoritative nameserver for the zone, except when the action is Consume, and then DNS Express generates the response. Note: If a TSIG key is configured for the zone, the signature is only validated for Consume and Repeat actions.", + "type": "string", + "enum": [ + "consume", + "bypass", + "repeat" + ], + "default": "consume" + }, + "allowNotifyFrom": { + "description": "Specifies the IP addresses from which the system accepts NOTIFY messages for this DNS Express zone", + "type": "array", + "items": { + "type": "string", + "format": "f5ip" + } + }, + "verifyNotifyTsig": { + "description": "Specifies whether the system verifies the identity of the authoritative nameserver that sends updated information for this DNS Express zone", + "type": "boolean", + "default": true + } + }, + "required": [ + "nameserver" + ], + "additionalProperties": false + }, + "DNS_Zone_Local": { + "description": "Configures resource records that a DNS cache uses to resolve matching DNS queries with authoritative DNS responses", + "type": "object", + "properties": { + "type": { + "description": "Describes how the cache handles a non-matching query for the local zone", + "type": "string", + "enum": [ + "deny", + "redirect", + "refuse", + "static", + "transparent", + "type-transparent" + ], + "default": "transparent" + }, + "records": { + "description": "A or AAAA record entry", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "DNS_Zone_Forward": { + "description": "Manage the set of Forward Zones used by DNS Cache", + "type": "object", + "properties": { + "nameservers": { + "description": "An array of nameservers and ports", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "DNS_Nameserver": { + "title": "DNS_Nameserver", + "description": "Configures a DNS nameserver", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "DNS_Nameserver" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "address": { + "description": "Specifies the IP address on which the DNS nameserver (client) or back-end DNS authoritative server (DNS Express server) listens for DNS messages", + "type": "string", + "default": "127.0.0.1", + "format": "f5ip" + }, + "port": { + "description": "Specifies the service port on which the DNS nameserver (client) or back-end DNS authoritative server (DNS Express server) listens for DNS messages", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 53 + }, + "routeDomain": { + "allOf": [ + { + "$ref": "#/definitions/Pointer_Route_Domain" + } + ], + "default": { + "bigip": "/Common/0" + } + }, + "tsigKey": { + "$ref": "#/definitions/Pointer_DNS_TSIG_Key" + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "DNS_Cache_Resolver": { + "description": "DNS Cache with recursive resolver", + "type": "object", + "properties": { + "allowedQueryTime": { + "description": "The time allowed for a query to stay in the queue before replaced by a new query when the number of concurrent distinct queries exceeds the limit. The default value is 200 milliseconds.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 200 + }, + "answerDefaultZones": { + "description": "Specifies whether the system answers DNS queries for the default zones localhost, reverse 127.0.0.1 and ::1, and AS112", + "type": "boolean", + "default": false + }, + "localZones": { + "description": "Configures resource records that a DNS cache uses to resolve matching DNS queries with authoritative DNS responses", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/DNS_Zone_Local" + } + }, + "maxConcurrentQueries": { + "description": "Maximum number of concurrent queries used by the resolver. The default value is 1024", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 1024 + }, + "maxConcurrentTcp": { + "description": "Maximum number of concurrent TCP flows used by the resolver. The default value is 20", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 20 + }, + "maxConcurrentUdp": { + "description": "Maximum number of concurrent UDP flows used by the resolver. The default value is 8192", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 8192 + }, + "msgCacheSize": { + "description": "Number of bytes allocated for the message cache. The default value is 1m", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 1048576 + }, + "nameserverCacheCount": { + "description": "Number of DNS nameservers to cache. The default value is 16k", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 16536 + }, + "randomizeQueryNameCase": { + "description": "Enables resolver to randomize the case of query names. The default value is yes", + "type": "boolean", + "default": true + }, + "forwardZones": { + "description": "Manage the set of Forward Zones used by this DNS Cache", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/DNS_Zone_Forward" + } + }, + "rootHints": { + "description": "List of IP addresses to use for root name servers. Defaults are known Internet root servers.", + "type": "array", + "items": { + "type": "string" + } + }, + "routeDomain": { + "allOf": [ + { + "$ref": "#/definitions/Pointer_Route_Domain" + } + ], + "default": { + "bigip": "/Common/0" + } + }, + "recordCacheSize": { + "description": "Number of bytes allocated for the resource record set cache. The default value is 10m", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 10485760 + }, + "recordRotationMethod": { + "description": "Select which resource record set rotation method should be used on cache responses", + "type": "string", + "enum": [ + "none", + "query-id" + ], + "default": "none" + }, + "unwantedQueryReplyThreshold": { + "description": "The threshold count of unsolicited query replies which triggers an alert (potential DOS attack underway). The default value is 0 (or off)", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 0 + }, + "useIpv4": { + "description": "Enables resolver to issue IPv4 queries. The default value is yes", + "type": "boolean", + "default": true + }, + "useIpv6": { + "description": "Enables resolver to issue IPv6 queries. The default value is yes", + "type": "boolean", + "default": true + }, + "useTcp": { + "description": "Enables resolver to issue tcp queries. The default value is yes", + "type": "boolean", + "default": true + }, + "useUdp": { + "description": "Enables resolver to issue udp queries. The default value is yes", + "type": "boolean", + "default": true + } + } + }, + "DNS_Cache_Validating_Resolver": { + "description": "DNS Cache with recursive resolver and DNSSEC validation", + "type": "object", + "properties": { + "allowedQueryTime": { + "description": "The time allowed for a query to stay in the queue before replaced by a new query when the number of concurrent distinct queries exceeds the limit. The default value is 200 milliseconds.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 200 + }, + "answerDefaultZones": { + "description": "Specifies whether the system answers DNS queries for the default zones localhost, reverse 127.0.0.1 and ::1, and AS112", + "type": "boolean", + "default": false + }, + "ignoreCd": { + "description": "Ignore client queries setting of checking-disabled. Perform validation anyway and only return secure answers. The default value is no", + "type": "boolean", + "default": false + }, + "keyCacheSize": { + "description": "Number of bytes allocated for the DNSKEY cache. The default value is 1m", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 1048576 + }, + "localZones": { + "description": "Configures resource records that a DNS cache uses to resolve matching DNS queries with authoritative DNS responses", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/DNS_Zone_Local" + } + }, + "maxConcurrentQueries": { + "description": "Maximum number of concurrent queries used by the resolver. The default value is 1024", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 1024 + }, + "maxConcurrentTcp": { + "description": "Maximum number of concurrent TCP flows used by the resolver. The default value is 20", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 20 + }, + "maxConcurrentUdp": { + "description": "Maximum number of concurrent UDP flows used by the resolver. The default value is 8192", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 8192 + }, + "msgCacheSize": { + "description": "Number of bytes allocated for the message cache. The default value is 1m", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 1048576 + }, + "nameserverCacheCount": { + "description": "Number of DNS nameservers to cache. The default value is 16k", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 16536 + }, + "prefetchKey": { + "description": "Fetch DNSKEY early in validation process. The default value is yes", + "type": "boolean", + "default": true + }, + "randomizeQueryNameCase": { + "description": "Enables resolver to randomize the case of query names. The default value is yes", + "type": "boolean", + "default": true + }, + "forwardZones": { + "description": "Manage the set of Forward Zones used by this DNS Cache", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/DNS_Zone_Forward" + } + }, + "rootHints": { + "description": "List of IP addresses to use for root name servers. Defaults are known Internet root servers.", + "type": "array", + "items": { + "type": "string" + } + }, + "routeDomain": { + "allOf": [ + { + "$ref": "#/definitions/Pointer_Route_Domain" + } + ], + "default": { + "bigip": "/Common/0" + } + }, + "recordCacheSize": { + "description": "Number of bytes allocated for the resource record set cache. The default value is 10m", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 10485760 + }, + "recordRotationMethod": { + "description": "Select which resource record set rotation method should be used on cache responses", + "type": "string", + "enum": [ + "none", + "query-id" + ], + "default": "none" + }, + "trustAnchors": { + "description": "List of DNSKEY or DS resource records used to establish DNSSEC validator trust. Specified in string form (e.g. dig or drill format). The default is none", + "type": "array", + "items": { + "type": "string" + } + }, + "unwantedQueryReplyThreshold": { + "description": "The threshold count of unsolicited query replies which triggers an alert (potential DOS attack underway). The default value is 0 (or off)", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 0 + }, + "useIpv4": { + "description": "Enables resolver to issue IPv4 queries. The default value is yes", + "type": "boolean", + "default": true + }, + "useIpv6": { + "description": "Enables resolver to issue IPv6 queries. The default value is yes", + "type": "boolean", + "default": true + }, + "useTcp": { + "description": "Enables resolver to issue tcp queries. The default value is yes", + "type": "boolean", + "default": true + }, + "useUdp": { + "description": "Enables resolver to issue udp queries. The default value is yes", + "type": "boolean", + "default": true + } + } + }, + "DOS_Profile": { + "title": "DOS_Profile", + "description": "Configures a Denial of Service (DOS) profile", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "DOS_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "application": { + "description": "Application security sub-profile", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "asm" + ] + } + }, + { + "$ref": "#/definitions/DOS_Profile_Application" + } + ] + }, + "network": { + "description": "Network security sub-profile", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm" + ] + } + }, + { + "$ref": "#/definitions/DOS_Profile_Network" + } + ] + }, + "protocolDNS": { + "description": "DNS protocol security sub-profile", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm" + ] + } + }, + { + "$ref": "#/definitions/DOS_Profile_Protocol_DNS" + } + ] + }, + "protocolSIP": { + "description": "SIP protocol security sub-profile", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm" + ] + } + }, + { + "$ref": "#/definitions/DOS_Profile_Protocol_SIP" + } + ] + }, + "allowlist": { + "description": "Specifies the default allowlist address list for the system to use to determine which IP addresses are legitimate. The system does not examine traffic from the IP addresses in the list when performing DoS prevention. This property is available on BIGIP 14.1 and above.", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Address_List" + } + ] + }, + "whitelist": { + "description": "Deprecated. Replaced with functionally equivalent allowlist. Specifies the default allowlist address list for the system to use to determine which IP addresses are legitimate. The system does not examine traffic from the IP addresses in the list when performing DoS prevention. This property is available on BIGIP 14.1 and above.", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Address_List" + } + ] + }, + "applicationAllowlist": { + "description": "Specifies the IP addresses and subnets allowlist configuration for Application Security (Overrides the global allowlist)", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "asm" + ] + } + }, + { + "$ref": "#/definitions/Pointer_Address_List" + } + ] + }, + "applicationWhitelist": { + "description": "Deprecated. Replaced with functionally equivalent applicationAllowlist. Specifies the IP addresses and subnets allowlist configuration for Application Security (Overrides the global allowlist)", + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "asm" + ] + } + }, + { + "$ref": "#/definitions/Pointer_Address_List" + } + ] + } + }, + "additionalProperties": false, + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm", + "asm" + ] + } + }, + { + "f5PostProcess": { + "tag": "aliases", + "data": { + "allowlist": "whitelist", + "applicationAllowlist": "applicationWhitelist" + } + } + } + ] + }, + "DOS_Auto_Denylist_Settings": { + "description": "Adds the source IP address to the denylist category assigned to the Denial-of-Service (DoS) vector", + "type": "object", + "properties": { + "enabled": { + "description": "Specifies if automatic denylist management should be used", + "type": "boolean", + "default": false + }, + "category": { + "description": "Specifies the denylist category assigned to the DoS vector. The settings for this category determine IP Intelligence actions, logging settings, and denylist publisher settings.", + "default": { + "bigip": "/Common/denial_of_service" + }, + "allOf": [ + { + "$ref": "#/definitions/Pointer_Denylist_Category" + } + ] + }, + "attackDetectionTime": { + "description": "Specifies the time in seconds before a vector is denylisted", + "type": "integer", + "minimum": 1, + "maximum": 4294967295, + "default": 60 + }, + "categoryDuration": { + "description": "Specifies the time in seconds before the denylist entry is removed", + "type": "integer", + "minimum": 60, + "maximum": 4294967295, + "default": 14400 + }, + "externalAdvertisementEnabled": { + "description": "Specifies that addresses that are identified for denylisting are advertised to BGP routers, as configured per denylist category in Blacklist Publisher", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "DOS_Bad_Actor_Detection_Settings": { + "description": "Bad actor detection allows automatic detection, logging, and rate limiting of specific IP addresses that appear to be the source of an attack, based on criteria you configure.", + "type": "object", + "properties": { + "enabled": { + "description": "Specifies that Bad Actor detection is enabled", + "type": "boolean", + "default": false + }, + "sourceDetectionThreshold": { + "description": "Specifies the number of packets per second to identify an IP address as a bad actor", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 4294967295 + }, + "sourceMitigationThreshold": { + "description": "Specifies the rate limit applied to a source IP that is identified as a bad actor", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 4294967295 + } + }, + "additionalProperties": false + }, + "DOS_Profile_Application_Heavy_URL": { + "description": "Heavy URLs are a small number of site URLs that might consume considerable server resources per request. Heavy URLs respond with low latency most of the time, but may easily reach high latency under specific conditions. Heavy URLs are not necessarily heavy all the time, but are potentially heavy, especially during DoS attacks. It only takes a low rate of requests to heavy URLs in order to cause DoS attacks. When an attack is suspected, the system protects the heavy URLs using the by URL methods that you enabled in TPS-based Detection and Behavioral & Stress-based Detection. If no URL-based methods are enabled there, the system only reports attacks.", + "type": "object", + "properties": { + "automaticDetectionEnabled": { + "description": "Mark a URL as heavy if its portion of transactions with latency above the specified threshold is higher than usual for this site", + "type": "boolean", + "default": true + }, + "detectionThreshold": { + "description": "Specifies the latency threshold for automatic heavy URL detection (in milliseconds)", + "type": "integer", + "minimum": 16, + "maximum": 4294967295, + "default": 1000 + }, + "excludeList": { + "description": "URLs the system should not consider heavy even if the system automatically detects them as being heavy. This list may contain prefix wildcards.", + "type": "array", + "items": { + "type": "string" + } + }, + "protectList": { + "description": "URLs you expect to be heavy even if the system does not automatically detect them as being heavy", + "type": "array", + "items": { + "type": "object", + "properties": { + "url": { + "description": "URL to protect", + "type": "string" + }, + "threshold": { + "description": "Threshold for detection in requests per second", + "type": "integer", + "minimum": 0, + "maximum": 4294967295 + } + }, + "additionalProperties": false, + "required": [ + "url", + "threshold" + ] + } + } + }, + "additionalProperties": false + }, + "DOS_Profile_Application_Captcha": { + "description": "Specifies the text the system sends, during a suspected DoS event, to users after it challenges users with the first CAPTCHA response, and the text the system sends to users after they fail a CAPTCHA response.", + "type": "object", + "properties": { + "first": { + "description": "Specifies the content that the system displays to a user the first time the user is asked to respond to a CAPTCHA", + "type": "string", + "maxLength": 65520 + }, + "failure": { + "description": "Specifies the content the system displays to a user after the user fails to correctly answer a CAPTCHA", + "type": "string", + "maxLength": 65520 + } + }, + "additionalProperties": false + }, + "DOS_Profile_Application_Bot_Defense": { + "description": "BIG-IP AS3 provides defense against bot attacks by detecting and stopping them before the attacks start to grow, by performing the following:\n\n* The system sends a client-side JavaScript challenge to the browser.\n* If the challenge is met, the system adds a cookie to the second request. This cookie is active until the session ends, and the system does not add any more cookies to further requests during that session.\n* The system drops requests sent by browsers that do not answer the system’s initial JavaScript challenge, assuming they are bots that do not support JavaScript.\n\nNote: This feature requires browsers to allow JavaScript.\n\nImportant: The proactive bot defense feature works also in Transparent mode. This means that the system will replace responses with client side JavaScript also in Transparent mode, and if the client cannot run JavaScript, it will not be able to receive the server responses.\n\nImportant: If you enable Proactive Bot Defense and your web site uses CORS (Cross-Origin Resource Sharing), we recommend that you add the CORS URLs to the proactive bot URL allowlist.\n\nThis method is intended to complement, not replace, the other mitigation methods.", + "type": "object", + "properties": { + "mode": { + "description": "Specifies the conditions under which bots are detected and blocked", + "type": "string", + "enum": [ + "off", + "during-attacks", + "always" + ], + "default": "off" + }, + "blockSuspiscousBrowsers": { + "$comment": "maps to application.bot-defense.browser-legit-enabled", + "description": "Detect and block requests from highly suspicious browsers", + "type": "boolean", + "default": true + }, + "issueCaptchaChallenge": { + "$comment": "maps to application.bot-defense.browser-legit-captcha", + "description": "Issue CAPTCHA challenges to moderately suspicious browsers", + "type": "boolean", + "default": true + }, + "gracePeriod": { + "description": "The length of time (in seconds) before the system blocks suspected bots. The grace period allows web application pages with both HTML and non-HTML (like images, JS, and CSS) to load completely without being blocked. The grace period starts after client validation, a configuration change, or when proactive bot defense is activated as a result of a detected attack or high latency. This property is available on BIGIP 14.1 and above.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 300 + }, + "crossDomainRequests": { + "description": "Specifies how the system responds when receiving a request for non-HTML resources (images, CSS, XML, JavaScript, and Flash) without a valid cookie, and has a Referer header with a different domain than the host domain. This property is available on BIGIP 14.1 and above.", + "type": "string", + "enum": [ + "allow-all", + "validate-bulk", + "validate-upon-request" + ], + "default": "allow-all" + }, + "siteDomains": { + "description": "Specifies how the system responds when receiving a request for non-HTML resources (images, CSS, XML, JavaScript, and Flash) without a valid cookie, and has a Referer header with a different domain than the host domain. This property is available on BIGIP 14.1 and above.", + "type": "array", + "items": { + "type": "string" + } + }, + "externalDomains": { + "description": "Specifies the external referring domains (that are not part of your website) that are allowed to link to resources in your website. These domains are not protected with proactive bot defense, but the system allows them if they pass the system's redirect-cookie challenge. This property is available on BIGIP 14.1 and above.", + "type": "array", + "items": { + "type": "string" + } + }, + "urlAllowlist": { + "description": "Specifies excluded URLs. Requests to these URLs will not be blocked by Proactive Bot Defense, although they may still be blocked by the TPS-based / Stress-based attack mitigation", + "type": "array", + "items": { + "type": "string" + } + }, + "urlWhitelist": { + "description": "Deprecated. Replaced with functionally equivalent urlAllowlist. Specifies excluded URLs. Requests to these URLs will not be blocked by Proactive Bot Defense, although they may still be blocked by the TPS-based / Stress-based attack mitigation", + "type": "array", + "items": { + "type": "string" + } + } + }, + "f5PostProcess": { + "tag": "aliases", + "data": { + "urlAllowlist": "urlWhitelist" + } + }, + "dependencies": { + "issueCaptchaChallenge": { + "if": { + "properties": { + "issueCaptchaChallenge": { + "const": true + } + } + }, + "then": { + "properties": { + "blockSuspiscousBrowsers": { + "const": true + } + } + } + }, + "siteDomains": { + "properties": { + "crossDomainRequests": { + "enum": [ + "validate-bulk", + "validate-upon-request" + ] + } + } + }, + "externalDomains": { + "properties": { + "crossDomainRequests": { + "enum": [ + "validate-bulk", + "validate-upon-request" + ] + } + } + } + }, + "additionalProperties": false + }, + "DOS_Profile_Application_Bot_Signatures": { + "description": "This feature automatically detects well known bots according to their HTTP characteristics. Malicious bots can be configured to be blocked, while benign bots can be configured to pass through the anti-bot defense mechanisms.", + "type": "object", + "properties": { + "checkingEnabled": { + "description": "Specifies the system uses signatures to check whether a bot is benign or malicious", + "type": "boolean", + "default": false + }, + "blockedCategories": { + "description": "The system blocks and reports requests that match signatures in this list of categories", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Bot_Signature_Category" + } + }, + "reportedCategories": { + "description": "The system logs requests that match signatures in this list of categories and counts them in the DoS reports", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Bot_Signature_Category" + } + }, + "disabledSignatures": { + "description": "A list of signatures the system ignores when it matches requests with configured bot signatures", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Bot_Signature" + } + } + }, + "additionalProperties": false + }, + "DOS_Profile_Application_Mobile_Defense": { + "description": "When enabled, requests from mobile applications built with the Anti-Bot Mobile SDK will be detected and handled according to the setting configured here. When disabled, these requests will be handled like any other request, meaning that they may let attacks in or cause false positives. Mobile application traffic will be treated differently than other clients, e.g. browsers, in security policies. For this reason, even when DoS protection is not required in a security policy, you still must set a DoS profile with mobile application protection enabled.", + "type": "object", + "properties": { + "enabled": { + "description": "When enabled, requests from mobile applications built with Anti-Bot Mobile SDK will be detected and handled according to the settings below. When disabled, these requests will be handled like any other request which may let attacks in, or cause false positives.", + "type": "boolean", + "default": false + }, + "allowAndroidPublishers": { + "description": "Publisher certificates to allow. All others are blocked. An empty list allows all publishers.", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_SSL_Certificate" + } + }, + "allowAndroidRootedDevice": { + "description": "Select to allow traffic from rooted Android devices", + "type": "boolean", + "default": false + }, + "allowIosPackageNames": { + "description": "Package names to allow. All others are blocked. An empty list allows all package names.", + "type": "array", + "items": { + "type": "string" + } + }, + "allowJailbrokenDevices": { + "description": "Select to allow traffic from jailbroken iOS devices", + "type": "boolean", + "default": false + }, + "allowEmulators": { + "description": "Select to allow traffic from applications run on emulators", + "type": "boolean", + "default": false + }, + "clientSideChallengeMode": { + "description": "Specifies the action to take when a CAPTCHA or Client Side Integrity challenge needs to be presented", + "type": "string", + "enum": [ + "pass", + "challenge" + ], + "default": "pass" + } + }, + "additionalProperties": false + }, + "DOS_Profile_Application_Detection_IP": { + "description": "Specifies the criteria that determines when the system treats a source IP address as an attacker", + "type": "object", + "properties": { + "minimumTps": { + "description": "The minimum number of transactions per second before a source can be considered an attacking entity. This condition and the increase rate condition must be met for a source to be considered an attacking entity.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 40 + }, + "tpsIncreaseRate": { + "description": "The transactions per second increase (as a percentage) that must occur before a source can be considered an attacking entity. This condition and the minimum TPS condition must be met for a source to be considered an attacking entity.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 500 + }, + "maximumTps": { + "description": "The maximum number of transactions per second before a source is always considered an attacking entity", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 200 + }, + "minimumAutoTps": { + "description": "Minimum number of transactions per second of an auto-calculated threshold before a source is considered an attacking entity", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 5 + }, + "maximumAutoTps": { + "description": "Maximum number of transactions per second of an auto-calculated threshold before a source is considered an attacking entity", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 5000 + }, + "clientSideDefenseEnabled": { + "description": "Specifies, when enabled, that if traffic meets the detection conditions, the system issues a client-side integrity challenge that will consume computation resources from the client and slow its attack rate. The system issues a client-side integrity challenge to determine whether the client is a legal browser or an illegal script by sending a JavaScript challenge and waiting for a response. (Legal browsers are able to respond, while illegal scripts cannot.)", + "type": "boolean", + "default": false + }, + "captchaChallengeEnabled": { + "description": "Specifies, when enabled, that if traffic meets the detection conditions, the system issues a CAPTCHA challenge to determine whether the client is a legal browser with a human user behind it, or an illegal script. (Legal browsers with human users behind them are able to respond, while illegal scripts cannot.)", + "type": "boolean", + "default": false + }, + "rateLimitingEnabled": { + "description": "Specifies, when enabled, that if traffic meets the detection conditions, the system applies rate limiting to the traffic", + "type": "boolean", + "default": true + }, + "rateLimitingMode": { + "description": "Specifies if rate limiting should block all traffic ('block-all') or apply normal rate limiting ('rate-limit').", + "type": "string", + "enum": [ + "rate-limit", + "block-all" + ], + "default": "rate-limit" + } + }, + "additionalProperties": false + }, + "DOS_Profile_Application_Detection_Device": { + "description": "Specifies the criteria that determines when the system treats a device as an attacker", + "type": "object", + "properties": { + "minimumTps": { + "description": "The minimum number of transactions per second before a source can be considered an attacking entity. This condition and the increase rate condition must be met for a source to be considered an attacking entity.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 40 + }, + "tpsIncreaseRate": { + "description": "The transactions per second increase (as a percentage) that must occur before a source can be considered an attacking entity. This condition and the minimum TPS condition must be met for a source to be considered an attacking entity.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 500 + }, + "maximumTps": { + "description": "The maximum number of transactions per second before a source is always considered an attacking entity", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 200 + }, + "minimumAutoTps": { + "description": "Minimum number of transactions per second of an auto-calculated threshold before a source is considered an attacking entity", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 5 + }, + "maximumAutoTps": { + "description": "Maximum number of transactions per second of an auto-calculated threshold before a source is considered an attacking entity", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 5000 + }, + "clientSideDefenseEnabled": { + "description": "Specifies, when enabled, that if traffic meets the detection conditions, the system issues a client-side integrity challenge that will consume computation resources from the client and slow its attack rate. The system issues a client-side integrity challenge to determine whether the client is a legal browser or an illegal script by sending a JavaScript challenge and waiting for a response. (Legal browsers are able to respond, while illegal scripts cannot.)", + "type": "boolean", + "default": false + }, + "captchaChallengeEnabled": { + "description": "Specifies, when enabled, that if traffic meets the detection conditions, the system issues a CAPTCHA challenge to determine whether the client is a legal browser with a human user behind it, or an illegal script. (Legal browsers with human users behind them are able to respond, while illegal scripts cannot.)", + "type": "boolean", + "default": false + }, + "rateLimitingEnabled": { + "description": "Specifies, when enabled, that if traffic meets the detection conditions, the system applies rate limiting to the traffic", + "type": "boolean", + "default": false + }, + "rateLimitingMode": { + "description": "Specifies if rate limiting should block all traffic ('block-all') or apply normal rate limiting ('rate-limit').", + "type": "string", + "enum": [ + "rate-limit", + "block-all" + ], + "default": "rate-limit" + } + }, + "additionalProperties": false + }, + "DOS_Profile_Application_Detection_Geolocation": { + "description": "Specifies the criteria that determines when the system treats a geolocation as an attacker", + "type": "object", + "properties": { + "minimumShare": { + "description": "The minimum share of traffic (as a percentage) before a source can be considered an attacking entity. This condition and the share increase rate condition must be met for a source to be considered an attacking entity.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 10 + }, + "shareIncreaseRate": { + "description": "The share increase (as a percentage) that must occur before a source can be considered an attacking entity. This condition and the minimum share condition must be met for a source to be considered an attacking entity.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 500 + }, + "minimumAutoTps": { + "description": "Minimum number of transactions per second of an auto-calculated threshold before a source is considered an attacking entity", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 50 + }, + "maximumAutoTps": { + "description": "Maximum number of transactions per second of an auto-calculated threshold before a source is considered an attacking entity", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 20000 + }, + "clientSideDefenseEnabled": { + "description": "Specifies, when enabled, that if traffic meets the detection conditions, the system issues a client-side integrity challenge that will consume computation resources from the client and slow its attack rate. The system issues a client-side integrity challenge to determine whether the client is a legal browser or an illegal script by sending a JavaScript challenge and waiting for a response. (Legal browsers are able to respond, while illegal scripts cannot.)", + "type": "boolean", + "default": false + }, + "captchaChallengeEnabled": { + "description": "Specifies, when enabled, that if traffic meets the detection conditions, the system issues a CAPTCHA challenge to determine whether the client is a legal browser with a human user behind it, or an illegal script. (Legal browsers with human users behind them are able to respond, while illegal scripts cannot.)", + "type": "boolean", + "default": false + }, + "rateLimitingEnabled": { + "description": "Specifies, when enabled, that if traffic meets the detection conditions, the system applies rate limiting to the traffic", + "type": "boolean", + "default": false + }, + "rateLimitingMode": { + "description": "Specifies if rate limiting should block all traffic ('block-all') or apply normal rate limiting ('rate-limit').", + "type": "string", + "enum": [ + "rate-limit", + "block-all" + ], + "default": "rate-limit" + } + }, + "additionalProperties": false + }, + "DOS_Profile_Application_Detection_URL": { + "description": "Specifies the criteria that determines when the system treats a URL as an attacker", + "type": "object", + "properties": { + "minimumTps": { + "description": "The minimum number of transactions per second before a source can be considered an attacking entity. This condition and the increase rate condition must be met for a source to be considered an attacking entity.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 200 + }, + "tpsIncreaseRate": { + "description": "The transactions per second increase (as a percentage) that must occur before a source can be considered an attacking entity. This condition and the minimum TPS condition must be met for a source to be considered an attacking entity.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 500 + }, + "maximumTps": { + "description": "The maximum number of transactions per second before a source is always considered an attacking entity", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 1000 + }, + "minimumAutoTps": { + "description": "Minimum number of transactions per second of an auto-calculated threshold before a source is considered an attacking entity", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 5 + }, + "maximumAutoTps": { + "description": "Maximum number of transactions per second of an auto-calculated threshold before a source is considered an attacking entity", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 5000 + }, + "heavyURLProtectionEnabled": { + "description": "Specifies, when enabled, that heavy URL protection should be enabled", + "type": "boolean", + "default": true + }, + "clientSideDefenseEnabled": { + "description": "Specifies, when enabled, that if traffic meets the detection conditions, the system issues a client-side integrity challenge that will consume computation resources from the client and slow its attack rate. The system issues a client-side integrity challenge to determine whether the client is a legal browser or an illegal script by sending a JavaScript challenge and waiting for a response. (Legal browsers are able to respond, while illegal scripts cannot.)", + "type": "boolean", + "default": false + }, + "captchaChallengeEnabled": { + "description": "Specifies, when enabled, that if traffic meets the detection conditions, the system issues a CAPTCHA challenge to determine whether the client is a legal browser with a human user behind it, or an illegal script. (Legal browsers with human users behind them are able to respond, while illegal scripts cannot.)", + "type": "boolean", + "default": false + }, + "rateLimitingEnabled": { + "description": "Specifies, when enabled, that if traffic meets the detection conditions, the system applies rate limiting to the traffic", + "type": "boolean", + "default": true + } + }, + "additionalProperties": false + }, + "DOS_Profile_Application_Detection_Site": { + "description": "Specifies the criteria that determines when the system treats a site as an attacker", + "type": "object", + "properties": { + "minimumTps": { + "description": "The minimum number of transactions per second before a source can be considered an attacking entity. This condition and the increase rate condition must be met for a source to be considered an attacking entity.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 2000 + }, + "tpsIncreaseRate": { + "description": "The transactions per second increase (as a percentage) that must occur before a source can be considered an attacking entity. This condition and the minimum TPS condition must be met for a source to be considered an attacking entity.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 500 + }, + "maximumTps": { + "description": "The maximum number of transactions per second before a source is always considered an attacking entity", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 10000 + }, + "minimumAutoTps": { + "description": "Minimum number of transactions per second of an auto-calculated threshold before a source is considered an attacking entity", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 5 + }, + "maximumAutoTps": { + "description": "Maximum number of transactions per second of an auto-calculated threshold before a source is considered an attacking entity", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 20000 + }, + "clientSideDefenseEnabled": { + "description": "Specifies, when enabled, that if traffic meets the detection conditions, the system issues a client-side integrity challenge that will consume computation resources from the client and slow its attack rate. The system issues a client-side integrity challenge to determine whether the client is a legal browser or an illegal script by sending a JavaScript challenge and waiting for a response. (Legal browsers are able to respond, while illegal scripts cannot.)", + "type": "boolean", + "default": false + }, + "captchaChallengeEnabled": { + "description": "Specifies, when enabled, that if traffic meets the detection conditions, the system issues a CAPTCHA challenge to determine whether the client is a legal browser with a human user behind it, or an illegal script. (Legal browsers with human users behind them are able to respond, while illegal scripts cannot.)", + "type": "boolean", + "default": false + }, + "rateLimitingEnabled": { + "description": "Specifies, when enabled, that if traffic meets the detection conditions, the system applies rate limiting to the traffic", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "DOS_Profile_Application_Rate_Based_Detection": { + "description": "Configure the system to prevent DoS attacks based on the client side transactions per second (TPS-based detection mode). The system considers traffic to be a DoS attack based on the following calculations:\n\n* Transaction rate detection interval: The average number of requests per second sent. This is the TPS value that triggered the attack. This number is calculated by the system, by default, every ten seconds.\n* Transaction rate history interval: The average number of requests per second sent. This number is the average number of transactions for the past hour, and it is updated every 10 seconds.\n\nIn TPS-based detection mode, if the ratio of the transaction rate detection interval to the transaction rate history interval is greater than the specific percentage configured, the system detects the URL/site to be under attack, or the IP address/geolocation to be attacking. In order to stop the attack, the system blocks some, or all, requests from the detected IP address/geolocation and/to the attacked URL/site, depending on the configuration of the DoS profile.", + "type": "object", + "properties": { + "operationMode": { + "description": "Specifies how the system reacts when it detects an attack", + "type": "string", + "enum": [ + "off", + "transparent", + "blocking" + ], + "default": "off" + }, + "thresholdsMode": { + "description": "Specifies what type of thresholds to use", + "type": "string", + "enum": [ + "manual", + "automatic" + ], + "default": "manual" + }, + "escalationPeriod": { + "description": "Specifies the minimum time spent in each mitigation step before the system moves to the next mitigation step when preventing a DoS attack. After the system detects a DoS attack, it performs attack prevention for the amount of time specified here for every method that is enabled. If after this period the attack has not been fully stopped, the system escalates to the next enabled prevention step.", + "type": "integer", + "minimum": 1, + "maximum": 3600, + "default": 120 + }, + "deEscalationPeriod": { + "description": "When preventing a DoS attack, specifies the time spent since the mitigation started until retrying the steps from the beginning of the enabled methods. If the value is 0, no de-escalation occurs.", + "type": "integer", + "minimum": 0, + "maximum": 86400, + "default": 7200 + }, + "sourceIP": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Detection_IP" + } + ], + "default": {} + }, + "deviceID": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Detection_Device" + } + ], + "default": {} + }, + "geolocation": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Detection_Geolocation" + } + ], + "default": {} + }, + "url": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Detection_URL" + } + ], + "default": {} + }, + "site": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Detection_Site" + } + ], + "default": {} + } + }, + "additionalProperties": false + }, + "DOS_Profile_Application_Stress_Based_Detection_Bad_Actor": { + "description": "Specifies properties of Behavioral Detection in Stress-based anomaly.\n\nThe following mitigation options are available:\n\n* Conservative protection: If detectionEnabled is true, slows down and rate limits requests from anomalous IP addresses based on its anomaly detection confidence and the server's health. If signatureDetectionEnabled is true, blocks requests that match the attack signatures.\n* Standard protection: If detectionEnabled is true, slows down requests from anomalous IP addresses based on its anomaly detection confidence and the server's health. Rate limits requests from anomalous IP addresses and, if necessary, rate limits all requests based on the server's health. Limits the number of concurrent connections from anomalous IP addresses and, if necessary, limits the number of all concurrent connections based on the server's health. If signatureDetectionEnabled is true, blocks requests that match the attack signatures.\n* Aggressive protection: If detectionEnabled is true, slows down requests from anomalous IP addresses based on its anomaly detection confidence and the server's health. Rate limits requests from anomalous IP addresses and, if necessary, rate limits all requests based on the server's health. Limits the number of concurrent connections from anomalous IP addresses and, if necessary, limits the number of all concurrent connections based on the server's health. Proactively performs all protection actions (even before an attack). Increases the impact of the protection techniques. If signatureDetectionEnabled is true, blocks requests that match the attack signatures. Increases the impact of blocked requests.", + "type": "object", + "properties": { + "detectionEnabled": { + "description": "Enables traffic behavior, server's capacity learning, and anomaly detection", + "type": "boolean", + "default": false + }, + "signatureDetectionEnabled": { + "description": "Enables request signature detection", + "type": "boolean", + "default": false + }, + "useApprovedSignaturesOnly": { + "description": "Limits request signature detection to approved signatures only", + "type": "boolean", + "default": false + }, + "mitigationMode": { + "description": "Specifies mitigation impact on suspicious bad actors/requests", + "type": "string", + "enum": [ + "none", + "conservative", + "standard", + "aggressive" + ], + "default": "none" + }, + "acceleratedSignaturesEnabled": { + "description": "Enables signature detection before the connection establishment", + "type": "boolean", + "default": false + }, + "tlsSignaturesEnabled": { + "description": "Enables tls signature detection before the connection establishment. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "DOS_Profile_Application_Stress_Based_Detection": { + "description": "Configure the system to prevent DoS attacks based on the server’s health condition. An attack is detected if the system finds the server to be under stress and either of the TPS thresholds are crossed.", + "type": "object", + "properties": { + "operationMode": { + "description": "Specifies how the system reacts when it detects an attack", + "type": "string", + "enum": [ + "off", + "transparent", + "blocking" + ], + "default": "off" + }, + "thresholdsMode": { + "description": "Specifies what type of thresholds to use", + "type": "string", + "enum": [ + "manual", + "automatic" + ], + "default": "manual" + }, + "escalationPeriod": { + "description": "Specifies the minimum time spent in each mitigation step before the system moves to the next mitigation step when preventing a DoS attack. After the system detects a DoS attack, it performs attack prevention for the amount of time specified here for every method that is enabled. If after this period the attack has not been fully stopped, the system escalates to the next enabled prevention step.", + "type": "integer", + "minimum": 1, + "maximum": 3600, + "default": 120 + }, + "deEscalationPeriod": { + "description": "When preventing a DoS attack, specifies the time spent since the mitigation started until retrying the steps from the beginning of the enabled methods. If the value is 0, no de-escalation occurs.", + "type": "integer", + "minimum": 0, + "maximum": 86400, + "default": 7200 + }, + "sourceIP": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Detection_IP" + } + ], + "default": {} + }, + "deviceID": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Detection_Device" + } + ], + "default": {} + }, + "geolocation": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Detection_Geolocation" + } + ], + "default": {} + }, + "url": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Detection_URL" + } + ], + "default": {} + }, + "site": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Detection_Site" + } + ], + "default": {} + }, + "badActor": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Stress_Based_Detection_Bad_Actor" + } + ], + "default": {} + } + }, + "additionalProperties": false + }, + "DOS_Profile_Application_TCP_Dump": { + "description": "Configure settings to record traffic (perform a TCP dump) when a DoS attack is underway, in order to diagnose the attack vectors and attackers, observe whether and how it was mitigated, and draw conclusions for changing the DoS profile configuration.", + "type": "object", + "properties": { + "recordTrafficEnabled": { + "description": "Enables the recording of traffic during attacks", + "type": "boolean", + "default": false + }, + "maximumDuration": { + "description": "Configures the maximum time for each TCP dump recording cycle", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 30 + }, + "maximumSize": { + "description": "Configures the maximum size (in MB) for each TCP dump recording cycle", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 10 + }, + "repetitionInterval": { + "description": "Allow multiple TCP dumps to be recorded during a single DoS attack", + "oneOf": [ + { + "type": "string", + "const": "once-per-attack" + }, + { + "type": "integer", + "minimum": 0, + "maximum": 4294967295 + } + ], + "default": 120 + } + }, + "additionalProperties": false + }, + "DOS_Profile_Application": { + "description": "Specifies the conditions for determining that your application is under a DoS attack, and how the system reacts to a suspected attack.", + "type": "object", + "properties": { + "heavyURLProtection": { + "description": "Configure Heavy URL include list, automatic detection, and exclude list", + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Heavy_URL" + } + ], + "default": {} + }, + "denylistedGeolocations": { + "description": "Override the DoS profile’s geolocation rate based threshold settings by selecting countries from which to block traffic during a DoS attack", + "type": "array", + "items": { + "type": "string" + } + }, + "blacklistedGeolocations": { + "description": "Deprecated. Replaced with functionally equivalent denylistedGeolocations. Override the DoS profile’s geolocation rate based threshold settings by selecting countries from which to block traffic during a DoS attack", + "type": "array", + "items": { + "type": "string" + } + }, + "allowlistedGeolocations": { + "description": "Override the DoS profile’s geolocation rate based threshold settings by selecting countries from which to allow traffic during a DoS attack", + "type": "array", + "items": { + "type": "string" + } + }, + "whitelistedGeolocations": { + "description": "Deprecated. Replaced with functionally equivalent allowlistedGeolocations. Override the DoS profile’s geolocation rate based threshold settings by selecting countries from which to allow traffic during a DoS attack", + "type": "array", + "items": { + "type": "string" + } + }, + "captchaResponse": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Captcha" + } + ], + "default": {} + }, + "triggerIRule": { + "description": "Specifies that the system activates an Application DoS iRule event", + "type": "boolean", + "default": false + }, + "singlePageApplicationEnabled": { + "description": "Specifies that your website is a Single Page Application, meaning a web application that loads new content without triggering a full page-reload. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": false + }, + "scrubbingDuration": { + "description": "Specifies the BGP route advertisement duration in seconds for Traffic Scrubbing during attacks. This requires configuration of the Scrubber Profile, and will function even when the Operation Mode is set to Transparent. A value of 0 disables Traffic Scrubbing. Requires the AFM module and if this property is unspecified it will be disabled.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm" + ] + } + }, + "remoteTriggeredBlackHoleDuration": { + "description": "Specifies the BGP route advertisement duration in seconds for Remote Triggered Black Hole of attacking IPs. This requires configuration of the Blacklist Publisher, and will function even when the Operation Mode is set to Transparent. A value of 0 disables Remote Triggered Black Hole. Requires the AFM module and if this property is unspecified it will be disabled.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm" + ] + } + }, + "profileAcceleration": { + "description": "Select a TCP fastL4 profile to be used as a fast-path for acceleration", + "allOf": [ + { + "$ref": "#/definitions/Pointer_L4_Profile" + } + ] + }, + "botDefense": { + "description": "This feature proactively detects bots and scripts, and prevents them from accessing the site. It may be used to prevent DDoS, Web Scraping, and Brute Force attacks. Enabling this feature requires JavaScript support from the browsers.", + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Bot_Defense" + } + ], + "default": {} + }, + "botSignatures": { + "description": "This feature automatically detects well known bots according to their HTTP characteristics. Malicious bots can be configured to be blocked, while benign bots can be configured to pass through the anti-bot defense mechanisms", + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Bot_Signatures" + } + ], + "default": {} + }, + "mobileDefense": { + "description": "This feature detects mobile applications built with the Anti-Bot Mobile SDK and defines how requests from these mobile application clients are handled", + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Mobile_Defense" + } + ], + "default": {} + }, + "rateBasedDetection": { + "description": "Configures the detection of DoS attacks based on high volume of incoming traffic", + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Rate_Based_Detection" + } + ], + "default": {} + }, + "stressBasedDetection": { + "description": "Configures the detection of DoS attacks based on server stress. The system automatically detects an increase in server stress and mitigates DoS attacks causing it. ", + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_Stress_Based_Detection" + } + ], + "default": {} + }, + "recordTraffic": { + "description": "This feature allows automatic recording of traffic during DoS attacks, and storing the recordings as TCP Dump files. The files are placed in the system file path /shared/dosl7/tcpdumps.", + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Application_TCP_Dump" + } + ], + "default": {} + } + }, + "additionalProperties": false, + "f5PostProcess": { + "tag": "aliases", + "data": { + "allowlistedGeolocations": "whitelistedGeolocations", + "denylistedGeolocations": "blacklistedGeolocations" + } + } + }, + "DOS_Profile_Network_Dynamic_Signatures": { + "description": "", + "type": "object", + "properties": { + "detectionMode": { + "description": "Select the enforcement state for dynamic signatures. To enable enforcement of dynamic DoS vectors, select enabled. When enforcement is enabled, all thresholds and threshold actions are applied. Select disabled to apply no action or thresholds to dynamic Vectors. Select learn-only to track dynamic vector statistics, without enforcing any thresholds or limits.", + "type": "string", + "enum": [ + "disabled", + "learn-only", + "enabled" + ], + "default": "disabled" + }, + "mitigationMode": { + "description": "Specify the mitigation sensitivity for dynamic signatures", + "type": "string", + "enum": [ + "none", + "low", + "medium", + "high" + ], + "default": "none" + }, + "scrubbingEnabled": { + "description": "Specify whether to enable redirection and scrubbing of IP addresses identified by dynamic vectors. This enables handling of the dynamic vector hits by an IP intelligence category.", + "type": "boolean", + "default": false + }, + "scrubbingCategory": { + "description": "Specifies the IP intelligence denylist category to which scrubbed IPs are sent", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Denylist_Category" + } + ] + }, + "scrubbingDuration": { + "description": "Specify the duration in seconds for which an IP address is added to the denylist category", + "type": "integer", + "minimum": 60, + "maximum": 4294967295, + "default": 500 + } + }, + "additionalProperties": false + }, + "DOS_Profile_Network": { + "description": "", + "type": "object", + "properties": { + "dynamicSignatures": { + "default": {}, + "allOf": [ + { + "$ref": "#/definitions/DOS_Profile_Network_Dynamic_Signatures" + } + ] + }, + "vectors": { + "description": "A list of configured network DoS vectors", + "type": "array", + "items": { + "$ref": "#/definitions/DOS_Network_Vector" + } + } + }, + "additionalProperties": false + }, + "DOS_Network_Vector": { + "description": "Network Denial-of-Service (DoS) vector", + "type": "object", + "properties": { + "type": { + "description": "Specifies the name of the DoS attack vector whose thresholds you are configuring", + "type": "string", + "enum": [ + "ext-hdr-too-large", + "hop-cnt-low", + "host-unreachable", + "icmpv4-flood", + "icmpv6-flood", + "icmp-frag", + "ip-frag-flood", + "ip-low-ttl", + "ip-opt-frames", + "ipv6-ext-hdr-frames", + "ipv6-frag-flood", + "non-tcp-connection", + "opt-present-with-illegal-len", + "sweep", + "tcp-half-open", + "tcp-opt-overruns-tcp-hdr", + "tcp-psh-flood", + "tcp-rst-flood", + "tcp-syn-flood", + "tcp-synack-flood", + "tcp-syn-oversize", + "tcp-bad-urg", + "tcp-window-size", + "tidcmp", + "too-many-ext-hdrs", + "udp-flood", + "unk-tcp-opt-type" + ] + }, + "state": { + "description": "Specifies how to enforce protection for that attack type: mitigate (watch, learn, alert, and mitigate), detect-only (watch, learn, and alert), learn-only (collect stats, no mitigation), or Disabled (no stat collection, no mitigation).", + "type": "string", + "enum": [ + "disabled", + "learn-only", + "detect-only", + "mitigate" + ], + "default": "mitigate" + }, + "thresholdMode": { + "description": "Specifies how thresholds are set for this vector", + "type": "string", + "enum": [ + "manual", + "stress-based-mitigation", + "fully-automatic" + ], + "default": "manual" + }, + "badActorSettings": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Bad_Actor_Detection_Settings" + } + ], + "default": {} + }, + "autoDenylistSettings": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Auto_Denylist_Settings" + } + ] + }, + "autoBlacklistSettings": { + "description": "Deprecated. Replaced with functionally equivalent autoDenylistSettings.", + "allOf": [ + { + "$ref": "#/definitions/DOS_Auto_Denylist_Settings" + } + ], + "default": {} + }, + "autoAttackFloor": { + "description": "Specifies packets per second to identify an attack. These settings provide an absolute minimum of packets to allow before the attack is identified. As the automatic detection thresholds adjust to traffic and CPU usage on the system over time, this attack floor becomes less relevant.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 100 + }, + "autoAttackCeiling": { + "description": "Specifies the absolute maximum allowable for packets of this type. This setting rate limits packets to the packets per second setting, when specified. To set no hard limit and allow automatic thresholds to manage all rate limiting, set this to 4294967295.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 4294967295 + }, + "rateThreshold": { + "description": "Specify how many packets per second the system must discover in traffic in order to detect this attack", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 4294967295 + }, + "rateIncreaseThreshold": { + "description": "Specify percent of rate increase the system must discover in traffic in order to detect this attack", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 500 + }, + "rateLimit": { + "description": "Specify the maximum number of this type of packet per second the system allows for a vector. The system drops packets once the traffic level exceeds the rate limit.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 4294967295 + }, + "simulateAutoThresholdEnabled": { + "description": "Specifies that results of the current automatic thresholds are logged, though manual thresholds are enforced, and no action is taken on automatic thresholds", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false, + "f5PostProcess": { + "tag": "aliases", + "data": { + "autoDenylistSettings": "autoBlacklistSettings" + } + } + }, + "DOS_Profile_Protocol_DNS": { + "description": "", + "type": "object", + "properties": { + "vectors": { + "description": "A list of configured DNS DoS vectors", + "type": "array", + "items": { + "$ref": "#/definitions/DOS_DNS_Vector" + } + } + }, + "additionalProperties": false + }, + "DOS_DNS_Vector": { + "description": "Protocol DNS Denial-of-Service (DoS) vector", + "type": "object", + "properties": { + "type": { + "description": "Specifies the name of the DoS attack vector whose thresholds you are configuring", + "type": "string", + "enum": [ + "a", + "aaaa", + "any", + "axfr", + "cname", + "ixfr", + "mx", + "ns", + "nxdomain", + "other", + "ptr", + "qdcount", + "soa", + "srv", + "txt", + "malformed" + ] + }, + "state": { + "description": "Specifies how to enforce protection for that attack type: mitigate (watch, learn, alert, and mitigate), detect-only (watch, learn, and alert), learn-only (collect stats, no mitigation), or Disabled (no stat collection, no mitigation).", + "type": "string", + "enum": [ + "disabled", + "learn-only", + "detect-only", + "mitigate" + ], + "default": "mitigate" + }, + "thresholdMode": { + "description": "Specifies how thresholds are set for this vector", + "type": "string", + "enum": [ + "manual", + "stress-based-mitigation", + "fully-automatic" + ], + "default": "manual" + }, + "badActorSettings": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Bad_Actor_Detection_Settings" + } + ], + "default": {} + }, + "autoDenylistSettings": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Auto_Denylist_Settings" + } + ] + }, + "autoBlacklistSettings": { + "description": "Deprecated. Replaced with functionally equivalent autoDenylistSettings.", + "allOf": [ + { + "$ref": "#/definitions/DOS_Auto_Denylist_Settings" + } + ], + "default": {} + }, + "autoAttackFloor": { + "description": "Specifies packets per second to identify an attack. These settings provide an absolute minimum of packets to allow before the attack is identified. As the automatic detection thresholds adjust to traffic and CPU usage on the system over time, this attack floor becomes less relevant.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 100 + }, + "autoAttackCeiling": { + "description": "Specifies the absolute maximum allowable for packets of this type. This setting rate limits packets to the packets per second setting, when specified. To set no hard limit and allow automatic thresholds to manage all rate limiting, set this to 4294967295.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 4294967295 + }, + "rateThreshold": { + "description": "Specify how many packets per second the system must discover in traffic in order to detect this attack", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 4294967295 + }, + "rateIncreaseThreshold": { + "description": "Specify percent of rate increase the system must discover in traffic in order to detect this attack", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 500 + }, + "rateLimit": { + "description": "Specify the maximum number of this type of packet per second the system allows for a vector. The system drops packets once the traffic level exceeds the rate limit.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 4294967295 + }, + "simulateAutoThresholdEnabled": { + "description": "Specifies that results of the current automatic thresholds are logged, though manual thresholds are enforced, and no action is taken on automatic thresholds", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false, + "required": [ + "type" + ], + "f5PostProcess": { + "tag": "aliases", + "data": { + "autoDenylistSettings": "autoBlacklistSettings" + } + } + }, + "DOS_Profile_Protocol_SIP": { + "description": "", + "type": "object", + "properties": { + "vectors": { + "description": "A list of configured SIP DoS vectors", + "type": "array", + "items": { + "$ref": "#/definitions/DOS_SIP_Vector" + } + } + }, + "additionalProperties": false + }, + "DOS_SIP_Vector": { + "description": "Protocol SIP Denial-of-Service (DoS) vector", + "type": "object", + "properties": { + "type": { + "description": "Specifies the name of the DoS attack vector whose thresholds you are configuring", + "type": "string", + "enum": [ + "ack", + "cancel", + "message", + "options", + "prack", + "register", + "bye", + "invite", + "notify", + "other", + "publish", + "subscribe", + "uri-limit", + "malformed" + ] + }, + "state": { + "description": "Specifies how to enforce protection for that attack type: mitigate (watch, learn, alert, and mitigate), detect-only (watch, learn, and alert), learn-only (collect stats, no mitigation), or Disabled (no stat collection, no mitigation).", + "type": "string", + "enum": [ + "disabled", + "learn-only", + "detect-only", + "mitigate" + ], + "default": "mitigate" + }, + "thresholdMode": { + "description": "Specifies how thresholds are set for this vector", + "type": "string", + "enum": [ + "manual", + "stress-based-mitigation", + "fully-automatic" + ], + "default": "manual" + }, + "badActorSettings": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Bad_Actor_Detection_Settings" + } + ], + "default": {} + }, + "autoDenylistSettings": { + "allOf": [ + { + "$ref": "#/definitions/DOS_Auto_Denylist_Settings" + } + ] + }, + "autoBlacklistSettings": { + "description": "Deprecated. Replaced with functionally equivalent autoDenylistSettings.", + "allOf": [ + { + "$ref": "#/definitions/DOS_Auto_Denylist_Settings" + } + ], + "default": {} + }, + "autoAttackFloor": { + "description": "Specifies packets per second to identify an attack. These settings provide an absolute minimum of packets to allow before the attack is identified. As the automatic detection thresholds adjust to traffic and CPU usage on the system over time, this attack floor becomes less relevant.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 100 + }, + "autoAttackCeiling": { + "description": "Specifies the absolute maximum allowable for packets of this type. This setting rate limits packets to the packets per second setting, when specified. To set no hard limit and allow automatic thresholds to manage all rate limiting, set this to 4294967295.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 4294967295 + }, + "rateThreshold": { + "description": "Specify how many packets per second the system must discover in traffic in order to detect this attack", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 4294967295 + }, + "rateIncreaseThreshold": { + "description": "Specify percent of rate increase the system must discover in traffic in order to detect this attack", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 500 + }, + "rateLimit": { + "description": "Specify the maximum number of this type of packet per second the system allows for a vector. The system drops packets once the traffic level exceeds the rate limit.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 4294967295 + }, + "simulateAutoThresholdEnabled": { + "description": "Specifies that results of the current automatic thresholds are logged, though manual thresholds are enforced, and no action is taken on automatic thresholds", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false, + "required": [ + "type" + ], + "f5PostProcess": { + "tag": "aliases", + "data": { + "autoDenylistSettings": "autoBlacklistSettings" + } + } + }, + "Enum_ISP": { + "description": "Enum values for Internet Service Providers (ISP)", + "type": "string", + "enum": [ + "AOL", + "BeijingCNC", + "ChinaEducationNetwork", + "ChinaMobilNetwork", + "ChinaRailwayTelcom", + "ChinaTelecom", + "ChinaUnicom", + "CNC", + "Comcast", + "Earthlink", + "ShanghaiCNC", + "ShanghaiTelecom" + ] + }, + "Enum_Continent_Code_Alpha_2": { + "description": "Enum values for Alpha-2 continent codes based on ISO 3166. Use two dashes (--) if Unknown", + "type": "string", + "enum": [ + "--", + "AF", + "AN", + "AS", + "EU", + "NA", + "OC", + "SA" + ] + }, + "Enum_Country_Code_Alpha_2": { + "description": "Enum values for Alpha-2 country codes based on ISO 3166. Use two dashes (--) if Unknown", + "type": "string", + "enum": [ + "--", + "A1", + "A2", + "AD", + "AE", + "AF", + "AG", + "AI", + "AL", + "AM", + "AN", + "AO", + "AP", + "AQ", + "AR", + "AS", + "AT", + "AU", + "AW", + "AX", + "AZ", + "BA", + "BB", + "BD", + "BE", + "BF", + "BG", + "BH", + "BI", + "BJ", + "BL", + "BM", + "BN", + "BO", + "BQ", + "BR", + "BS", + "BT", + "BV", + "BW", + "BY", + "BZ", + "CA", + "CC", + "CD", + "CF", + "CG", + "CH", + "CI", + "CK", + "CL", + "CM", + "CN", + "CO", + "CR", + "CU", + "CV", + "CX", + "CY", + "CZ", + "DE", + "DJ", + "DK", + "DM", + "DO", + "DZ", + "EC", + "EE", + "EG", + "EH", + "ER", + "ES", + "ET", + "EU", + "FI", + "FJ", + "FK", + "FM", + "FO", + "FR", + "FX", + "GA", + "GB", + "GD", + "GE", + "GF", + "GG", + "GH", + "GI", + "GL", + "GM", + "GN", + "GP", + "GQ", + "GR", + "GS", + "GT", + "GU", + "GW", + "GY", + "HK", + "HM", + "HN", + "HR", + "HT", + "HU", + "ID", + "IE", + "IL", + "IM", + "IN", + "IO", + "IQ", + "IR", + "IS", + "IT", + "JE", + "JM", + "JO", + "JP", + "KE", + "KG", + "KH", + "KI", + "KM", + "KN", + "KP", + "KR", + "KW", + "KY", + "KZ", + "LA", + "LB", + "LC", + "LI", + "LK", + "LR", + "LS", + "LT", + "LU", + "LV", + "LY", + "MA", + "MC", + "MD", + "ME", + "MF", + "MG", + "MH", + "MK", + "ML", + "MM", + "MN", + "MO", + "MP", + "MQ", + "MR", + "MS", + "MT", + "MU", + "MV", + "MW", + "MX", + "MY", + "MZ", + "NA", + "NC", + "NE", + "NF", + "NG", + "NI", + "NL", + "NO", + "NP", + "NR", + "NU", + "NZ", + "O1", + "OM", + "PA", + "PE", + "PF", + "PG", + "PH", + "PK", + "PL", + "PM", + "PN", + "PR", + "PS", + "PT", + "PW", + "PY", + "QA", + "RE", + "RO", + "RS", + "RU", + "RW", + "SA", + "SB", + "SC", + "SD", + "SE", + "SG", + "SH", + "SI", + "SJ", + "SK", + "SL", + "SM", + "SN", + "SO", + "SR", + "ST", + "SV", + "SY", + "SZ", + "TC", + "TD", + "TF", + "TG", + "TH", + "TJ", + "TK", + "TL", + "TM", + "TN", + "TO", + "TR", + "TT", + "TV", + "TW", + "TZ", + "UA", + "UG", + "UM", + "US", + "UY", + "UZ", + "VA", + "VC", + "VE", + "VG", + "VI", + "VN", + "VU", + "WF", + "WS", + "YE", + "YT", + "ZA", + "ZM", + "ZW" + ] + }, + "Enum_Protocols_Idle_Timeout_Policy": { + "description": "Enum values for Idle_Timeout_Policy protocols", + "type": "string", + "enum": [ + "3pc", + "a/n", + "ah", + "all-other", + "argus", + "aris", + "ax.25", + "bbn-rcc", + "bna", + "br-sat-mon", + "cbt", + "cftp", + "chaos", + "compaq-peer", + "cphb", + "cpnx", + "crdup", + "crtp", + "dccp", + "dcn", + "ddp", + "ddx", + "dgp", + "dsr", + "egp", + "eigrp", + "emcon", + "encap", + "esp", + "etherip", + "fc", + "fire", + "ggp", + "gmtp", + "gre", + "hip", + "hmp", + "hopopt", + "i-nlsp", + "iatp", + "icmp", + "idpr", + "idpr-cmtp", + "idrp", + "ifmp", + "igmp", + "igp", + "il", + "ip", + "ipcomp", + "ipcv", + "ipencap", + "ipip", + "iplt", + "ippc", + "ipv4", + "ipv6", + "ipv6-auth", + "ipv6-crypt", + "ipv6-frag", + "ipv6-icmp", + "ipv6-nonxt", + "ipv6-opts", + "ipv6-route", + "ipx-in-ip", + "irtp", + "isis", + "iso-ip", + "iso-tp4", + "kryptolan", + "l2tp", + "larp", + "leaf-1", + "leaf-2", + "manet", + "merit-inp", + "mfe-nsp", + "micp", + "mobile", + "mobility-header", + "mpls-in-ip", + "mtp", + "mux", + "narp", + "netblt", + "nsfnet-igp", + "nvp", + "ospf", + "pgm", + "pim", + "pipe", + "pnni", + "prm", + "ptp", + "pup", + "pvp", + "qnx", + "rdp", + "rohc", + "rsvp", + "rspv-e2e-ignore", + "rvd", + "sat-expak", + "sat-mon", + "scc-sp", + "scps", + "sctp", + "sdrp", + "secure-vmtp", + "shim6", + "skip", + "sm", + "smp", + "snp", + "sprite-rpc", + "sps", + "srp", + "sscopmce", + "st", + "stp", + "sun-nd", + "swipe", + "tcf", + "tcp", + "tlsp", + "tp++", + "trunk-1", + "trunk-2", + "ttp", + "udp", + "udplite", + "uti", + "vines", + "visa", + "vmtp", + "vrrp", + "wb-expak", + "wb-mon", + "wesp", + "wsn", + "xnet", + "xns-idp", + "xtp" + ] + }, + "GSLB_Domain": { + "title": "GSLB_Domain", + "description": "Configures GSLB (Global Server Load Balancing) settings for a domain.", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "GSLB_Domain" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "domainName": { + "title": "Domain Name", + "description": "The name of the domain for the site content you are load balancing. If you have many domains, you can use two different wildcard characters, * and ?, to represent one or more characters in the domain alias, which reduces the number of aliases you have to add to the configuration", + "type": "string", + "minLength": 3 + }, + "aliases": { + "title": "Aliases", + "description": "List of alternate domain names. Each may include wildcard characters.", + "type": "array", + "items": { + "title": "GSLB domain name", + "type": "string", + "minLength": 3 + } + }, + "enabled": { + "title": "Enabled", + "description": "When true (default), the system can use the domain and its resources for load balancing requests", + "type": "boolean", + "default": true + }, + "failureRcode": { + "title": "Failure RCODE", + "description": "Specifies the DNS RCODE used when failure-rcode-response is enabled", + "type": "string", + "enum": [ + "formerr", + "noerror", + "notimpl", + "nxdomain", + "refused", + "servfail" + ], + "default": "noerror" + }, + "failureRcodeResponse": { + "title": "Return Code On Failure", + "description": "Specifies whether RCODE responses are enabled", + "type": "boolean", + "default": false + }, + "failureRcodeTtl": { + "title": "Return Code On Failure's TTL", + "description": "Specifies the negative caching TTL of the SOA for the RCODE response", + "type": "integer", + "minimum": 0, + "default": 0 + }, + "resourceRecordType": { + "title": "Resource Record (RR) Type", + "description": "Specifies the type of resource records for this domain", + "type": "string", + "enum": [ + "A", + "AAAA", + "CNAME", + "MX", + "NAPTR" + ] + }, + "pools": { + "title": "Pools", + "description": "Specifies the pools that this domain uses for load balancing. The system evaluates the pools in the order in which they are listed, until it finds a matching pool", + "type": "array", + "items": { + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to GSLB Pool declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "GSLB_Pool" + } + }, + "required": [ + "class" + ] + } + } + }, + "ratio": { + "title": "Ratio weight", + "description": "Ratio weight assigned to GSLB pool", + "type": "integer", + "default": 1 + } + }, + "additionalProperties": false, + "dependencies": { + "ratio": { + "minProperties": 2, + "maxProperties": 2 + }, + "use": { + "minProperties": 1, + "maxProperties": 2 + } + } + } + }, + "poolsCname": { + "title": "Pools Cname", + "description": "Specifies the cname pools this domain uses for load balancing. The system evaluates the pools in the order in which they are listed, until it finds a matching pool", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_GSLB_Pool" + } + }, + "poolLbMode": { + "title": "Pool Load Balancing Mode", + "description": "Specifies the load balancing method used to select a pool in this domain", + "type": "string", + "enum": [ + "global-availability", + "ratio", + "round-robin", + "topology" + ], + "default": "round-robin" + }, + "lastResortPool": { + "title": "Last Resort Pool", + "description": "Specifies the pools this domain uses for load balancing. The system evaluates the pools in the order in which they are listed, until it finds a matching pool", + "$ref": "#/definitions/Pointer_GSLB_Pool" + }, + "lastResortPoolType": { + "title": "Last Resort Pool type", + "description": "This is used to specify the type of pool being used for the lastResortPool", + "type": "string", + "enum": [ + "A", + "AAAA", + "CNAME", + "MX", + "NAPTR" + ] + }, + "loadBalancingDecisionLogVerbosity": { + "title": "Load Balancing Decision Log Verbosity", + "description": "Specifies the amount of detail logged when making load balancing decisions. This is used for debugging purposes only. Performance will be affected if any value is set. Please reset after debugging is finished.", + "type": "array", + "items": { + "title": "Verbosity Selection", + "type": "string", + "enum": [ + "pool-selection", + "pool-traversal", + "pool-member-selection", + "pool-member-traversal" + ] + }, + "uniqueItems": true + }, + "iRules": { + "title": "iRules", + "description": "List of GSLB iRules for this GSLB Domain (order is significant)", + "type": "array", + "items": { + "title": "iRule", + "description": "BIG-IP AS3 pointer to GSLB_iRule (declared separately)", + "if": { + "type": "string" + }, + "then": { + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "GSLB_iRule" + } + }, + "required": [ + "class" + ] + } + } + }, + "else": { + "type": "object", + "properties": { + "bigip": { + "title": "BIG-IP GTM iRule", + "description": "Pathname of existing BIG-IP GTM iRule", + "type": "string", + "format": "f5bigip" + }, + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to GSLB_iRule (declared separately)", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "GSLB_iRule" + } + }, + "required": [ + "class" + ] + } + } + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query gtm rule" + ] + } + } + }, + "$comment": "uniqueItems: true" + }, + "persistenceEnabled": { + "title": "Persistence", + "description": "Specifies that when a local DNS server makes repetitive requests on behalf of a client, the system reconnects the client to the same resource as previous requests. Set to true to enable.", + "type": "boolean", + "default": false + }, + "persistCidrIpv4": { + "title": "PersistCidrIpv4", + "description": "Specifies a mask used to group IPv4 LDNS addresses.", + "type": "integer", + "minimum": 0, + "maximum": 32, + "default": 32 + }, + "persistCidrIpv6": { + "title": "PersistCidrIpv6", + "description": "Specifies a mask used to group IPv6 LDNS addresses.", + "type": "integer", + "minimum": 0, + "maximum": 128, + "default": 128 + }, + "ttlPersistence": { + "title": "TTL Persistence", + "description": "Specifies, in seconds, the length of time for which a persistence entry is valid.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 3600 + }, + "clientSubnetPreferred": { + "title": "Client Subnet Preferred", + "description": "Specifies that this domain should use the edns0 client subnet option when using topology load balancing. If the query does not contain a client subnet option, the system will fall back to the default option of using the source address.", + "type": "boolean", + "default": false, + "f5PostProcess": { + "tag": "minVersion", + "data": "14.1" + } + } + }, + "if": { + "properties": { + "pools": {} + }, + "required": [ + "pools" + ] + }, + "then": { + "not": { + "properties": { + "poolsCname": {} + }, + "required": [ + "poolsCname" + ] + } + }, + "required": [ + "resourceRecordType", + "domainName" + ] + }, + "GSLB_Domain_A": { + "description": "Configures GSLB (Global Server Load Balancing) settings for A domain.", + "allOf": [ + { + "$ref": "#/definitions/GSLB_Domain" + } + ] + }, + "GSLB_Domain_AAAA": { + "description": "Configures GSLB (Global Server Load Balancing) settings for AAAA domain.", + "allOf": [ + { + "$ref": "#/definitions/GSLB_Domain" + } + ] + }, + "GSLB_Domain_CNAME": { + "description": "Configures GSLB (Global Server Load Balancing) settings for CNAME domain.", + "allOf": [ + { + "$ref": "#/definitions/GSLB_Domain" + } + ] + }, + "GSLB_Domain_MX": { + "description": "Configures GSLB (Global Server Load Balancing) settings for MX domain.", + "allOf": [ + { + "$ref": "#/definitions/GSLB_Domain" + } + ] + }, + "GSLB_Domain_NAPTR": { + "description": "Configures GSLB (Global Server Load Balancing) settings for NAPTR domain.", + "allOf": [ + { + "$ref": "#/definitions/GSLB_Domain" + } + ] + }, + "GSLB_iRule": { + "title": "GSLB_iRule", + "description": "Specifies or configures an iRule for use in GSLB Domains", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "GSLB_iRule" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "expand": { + "title": "Expand", + "description": "If true (default), expand backquoted variables in iRule", + "type": "boolean", + "default": true + }, + "iRule": { + "$ref": "#/definitions/IRule_Core" + } + }, + "additionalProperties": false, + "required": [ + "class", + "iRule" + ] + }, + "GSLB_Monitor": { + "title": "GSLB_Monitor", + "description": "Declares a monitor that verifies the availability and/or performance status of a particular protocol, service, or application", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "GSLB_Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string", + "enum": [ + "http", + "https", + "gateway-icmp", + "tcp", + "udp", + "external" + ] + }, + "target": { + "title": "Target (Address:Port)", + "description": "Specifies the IP address and service port of the resource that is the destination of this monitor. Format is ip:port", + "type": "string", + "default": "*:*" + }, + "interval": { + "title": "Interval", + "description": "Specifies, in seconds, the frequency at which the system issues the monitor check when either the resource is down or the status of the resource is unknown", + "type": "integer", + "minimum": 0, + "maximum": 86399, + "default": 30 + }, + "timeout": { + "title": "Timeout", + "description": "Specifies the number of seconds the target has in which to respond to the monitor request", + "type": "integer", + "minimum": 0, + "maximum": 86400, + "default": 120 + }, + "probeTimeout": { + "title": "Probe Timeout", + "description": "Specifies the number of seconds after which the system times out the probe request to the system", + "type": "integer", + "minimum": 0, + "default": 5 + }, + "ignoreDownResponseEnabled": { + "title": "Ignore Down Response", + "description": "Specifies whether the monitor immediately marks an object down when it receives a down response. If enabled, the monitor ignores the down response for the duration of timeout. The default is false (disabled)", + "type": "boolean", + "default": false + } + }, + "allOf": [ + { + "f5PostProcess": { + "tag": "modules", + "data": [ + "gtm" + ] + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "http" + } + } + }, + "then": { + "$ref": "#/definitions/GSLB_Monitor_HTTP" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "https" + } + } + }, + "then": { + "$ref": "#/definitions/GSLB_Monitor_HTTPS" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "gateway-icmp" + } + } + }, + "then": { + "$ref": "#/definitions/GSLB_Monitor_ICMP" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "udp" + } + } + }, + "then": { + "$ref": "#/definitions/GSLB_Monitor_UDP" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "tcp" + } + } + }, + "then": { + "$ref": "#/definitions/GSLB_Monitor_TCP" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "external" + } + } + }, + "then": { + "$ref": "#/definitions/GSLB_Monitor_External" + } + } + ], + "required": [ + "class", + "monitorType" + ] + }, + "GSLB_Monitor_External": { + "description": "Additional Monitor class properties available when monitorType = external", + "type": "object", + "properties": { + "pathname": { + "title": "pathname", + "description": "Tmsh object path name of an imported existing external monitor (e.g. /Common/arg_example)", + "type": "string", + "minLength": 2, + "f5PostProcess": { + "tag": "expand" + } + }, + "expand": { + "title": "Expand", + "description": "If true (default), expand backquoted variables in script", + "type": "boolean", + "default": true + }, + "script": { + "title": "External monitor script", + "description": "Bash(1) script which implements external monitor", + "allOf": [ + { + "$ref": "#/definitions/F5string" + }, + { + "f5PostProcess": { + "tag": "expand", + "data": { + "when": "1/expand" + } + } + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "string" + } + } + ] + }, + "arguments": { + "title": "Arguments", + "description": "Arguments to specified external monitor (will be backquote-expanded)", + "type": "string", + "default": "", + "f5PostProcess": { + "tag": "expand" + } + }, + "environmentVariables": { + "description": "Specifies user defined command line parameters that the external program requires.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "default": {} + } + }, + "oneOf": [ + { + "required": [ + "pathname" + ] + }, + { + "required": [ + "script" + ] + } + ] + }, + "GSLB_Monitor_HTTP": { + "description": "Additional Monitor class properties available when monitorType = http", + "type": "object", + "properties": { + "reverseEnabled": { + "title": "Reverse Enabled", + "description": "When enabled, a successful check marks the monitored object down instead of up. You can use the Reverse mode only if you configure both the send and receive options", + "type": "boolean", + "default": false + }, + "send": { + "title": "Send String", + "description": "Specifies the text string that the monitor sends to the target object. If you do not specify a value for both the send and receive options, the monitor performs a simple service check and connect only", + "type": "string", + "default": "HEAD / HTTP/1.0\\r\\n\\r\\n", + "f5PostProcess": { + "tag": "expand" + } + }, + "receive": { + "title": "Receive String", + "description": "Specifies the text string that the monitor looks for in the returned resource. If you do not specify a value for both the send and receive options, the monitor performs a simple service check and connect only", + "type": "string", + "default": "HTTP/1.", + "f5PostProcess": { + "tag": "expand" + } + }, + "receiveStatusCodes": { + "title": "Receive Status Codes", + "description": "Specifies the status codes that the monitor looks for in the returned resource", + "type": "array", + "items": { + "title": "Receive Status Code", + "type": "integer" + }, + "uniqueItems": true, + "f5PostProcess": { + "tag": "minVersion", + "data": "15.1" + } + }, + "transparent": { + "title": "Transparent", + "description": "Enables monitoring of pool members through firewalls. The default value is false (disabled)", + "type": "boolean", + "default": false + } + } + }, + "GSLB_Monitor_HTTPS": { + "description": "Additional Monitor class properties available when monitorType = https", + "type": "object", + "allOf": [ + { + "properties": { + "ciphers": { + "title": "Ciphers", + "description": "Ciphersuite selection string", + "type": "string", + "default": "DEFAULT" + }, + "clientCertificate": { + "title": "Client certificate", + "description": "BIG-IP AS3 pointer to client Certificate declaration, for TLS authentication (optional)", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Certificate" + } + }, + "required": [ + "class" + ] + } + } + }, + "sniServerName": { + "title": "SNI Server Name", + "description": "Server Name Indication (SNI) property for HTTPS monitor", + "type": "string", + "f5PostProcess": { + "tag": "minVersion", + "data": "16.1" + } + } + } + }, + { + "$ref": "#/definitions/GSLB_Monitor_HTTP" + } + ] + }, + "GSLB_Monitor_ICMP": { + "description": "Additional Monitor class properties available when monitorType = gateway-icmp", + "type": "object", + "properties": { + "probeInterval": { + "title": "Probe Interval", + "description": "Specifies the frequency at which the BIG-IP system probes the host server", + "type": "integer", + "minimum": 0, + "default": 1 + }, + "probeAttempts": { + "title": "Probe Attempts", + "description": "Specifies the number of times the BIG-IP system attempts to probe the host server, after which the BIG-IP system considers the host server down or unavailable", + "type": "integer", + "minimum": 0, + "default": 3 + }, + "transparent": { + "title": "Transparent", + "description": "Enables monitoring of pool members through firewalls. The default value is false (disabled)", + "type": "boolean", + "default": false + } + } + }, + "GSLB_Monitor_TCP": { + "description": "Additional Monitor class properties available when monitorType = tcp", + "type": "object", + "properties": { + "reverseEnabled": { + "title": "Reverse Enabled", + "description": "When enabled, a successful check marks the monitored object down instead of up. You can use the Reverse mode only if you configure both the send and receive options", + "type": "boolean", + "default": false + }, + "send": { + "title": "Send String", + "description": "Specifies the text string that the monitor sends to the target object. If you do not specify a value for both the send and receive options, the monitor performs a simple service check and connect only", + "type": "string", + "default": "" + }, + "receive": { + "title": "Receive String", + "description": "Specifies the text string that the monitor looks for in the returned resource. If you do not specify a value for both the send and receive options, the monitor performs a simple service check and connect only", + "type": "string", + "default": "" + }, + "transparent": { + "title": "Transparent", + "description": "Enables monitoring of pool members through firewalls. The default value is false (disabled)", + "type": "boolean", + "default": false + } + } + }, + "GSLB_Monitor_UDP": { + "description": "Additional Monitor class properties available when monitorType = udp", + "type": "object", + "properties": { + "debugEnabled": { + "title": "Debug Enabled", + "description": "When enabled, the monitor sends error messages and additional information to a log file created and labeled specifically for this monitor. The default is false (disabled)", + "type": "boolean", + "default": false + }, + "probeAttempts": { + "title": "Probe Attempts", + "description": "Specifies the number of times the BIG-IP system attempts to probe the host server, after which the BIG-IP system considers the host server down or unavailable", + "type": "integer", + "minimum": 0, + "default": 3 + }, + "probeInterval": { + "title": "Probe Interval", + "description": "Specifies the frequency at which the BIG-IP system probes the host server", + "type": "integer", + "minimum": 0, + "default": 1 + }, + "reverseEnabled": { + "title": "Reverse Enabled", + "description": "When enabled, a successful check marks the monitored object down instead of up. You can use the Reverse mode only if you configure both the send and receive options", + "type": "boolean", + "default": false + }, + "send": { + "title": "Send String", + "description": "Specifies the text string that the monitor sends to the target object. If you do not specify a value for both the send and receive options, the monitor performs a simple service check and connect only", + "type": "string", + "default": "default send string" + }, + "receive": { + "title": "Receive String", + "description": "Specifies the text string that the monitor looks for in the returned resource. If you do not specify a value for both the send and receive options, the monitor performs a simple service check and connect only", + "type": "string", + "default": "" + }, + "transparent": { + "title": "Transparent", + "description": "Enables monitoring of pool members through firewalls. The default value is false (disabled)", + "type": "boolean", + "default": false + } + } + }, + "GSLB_Pool": { + "title": "GSLB_Pool", + "description": "Declares a pool to use for load balancing", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "GSLB_Pool" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "resourceRecordType": { + "title": "Resource Record (RR) Type", + "description": "Specifies the type of resource records for this domain", + "type": "string", + "enum": [ + "A", + "AAAA", + "CNAME", + "MX", + "NAPTR" + ] + }, + "dynamicRatioEnabled": { + "title": "Dynamic Ratio Enabled", + "description": "Specifies whether the system applies a dynamic ratio to the load balancing algorithms for this pool. When enabled, the system treats QOS scores as ratios, and it uses each server or virtual server in proportion to the ratio determined by the QOS calculation.", + "type": "boolean", + "default": false + }, + "enabled": { + "title": "Enabled", + "description": "Specifies whether the pool and its resources are available for load balancing", + "type": "boolean", + "default": true + }, + "lbModePreferred": { + "title": "Preferred LB Mode", + "description": "Preferred Load Balancing mode", + "type": "string", + "enum": [ + "completion-rate", + "cpu", + "drop-packet", + "fallback-ip", + "fewest-hops", + "global-availability", + "kilobytes-per-second", + "least-connections", + "lowest-round-trip-time", + "packet-rate", + "quality-of-service", + "ratio", + "return-to-dns", + "round-robin", + "static-persistence", + "topology", + "virtual-server-capacity", + "virtual-server-score" + ], + "default": "round-robin" + }, + "lbModeAlternate": { + "title": "Alternate LB Mode", + "description": "Alternate Load Balancing mode", + "type": "string", + "enum": [ + "drop-packet", + "fallback-ip", + "global-availability", + "packet-rate", + "ratio", + "return-to-dns", + "round-robin", + "static-persistence", + "topology", + "virtual-server-capacity", + "virtual-server-score", + "none" + ], + "default": "round-robin" + }, + "lbModeFallback": { + "title": "Fallback LB mode", + "description": "Fallback Load Balancing mode", + "type": "string", + "enum": [ + "completion-rate", + "cpu", + "drop-packet", + "fallback-ip", + "fewest-hops", + "global-availability", + "kilobytes-per-second", + "least-connections", + "lowest-round-trip-time", + "packet-rate", + "quality-of-service", + "ratio", + "return-to-dns", + "round-robin", + "static-persistence", + "topology", + "virtual-server-capacity", + "virtual-server-score", + "none" + ], + "default": "return-to-dns" + }, + "manualResumeEnabled": { + "title": "Manual Resume Enabled", + "description": "Specifies whether you must manually restart a pool member that goes down", + "type": "boolean", + "default": false + }, + "ttl": { + "title": "Time-to-Live (TTL)", + "description": "Specifies the number of seconds the IP address, once found, is valid. Once the time-to-live (TTL) expires, the client has to request the IP address resolution again ", + "type": "integer", + "default": 30, + "minimum": 0, + "maximum": 4294967295 + }, + "verifyMemberEnabled": { + "title": "Verify Member Availability Enabled", + "description": "Specifies the system verifies the availability of the pool members before sending a connection to those resources", + "type": "boolean", + "default": true + } + }, + "allOf": [ + { + "if": { + "anyOf": [ + { + "properties": { + "resourceRecordType": { + "const": "A" + } + } + }, + { + "properties": { + "resourceRecordType": { + "const": "AAAA" + } + } + }, + { + "properties": { + "resourceRecordType": { + "const": "MX" + } + } + }, + { + "properties": { + "resourceRecordType": { + "const": "NAPTR" + } + } + } + ] + }, + "then": { + "properties": { + "maxAnswersReturned": { + "title": "Maximum Number of Answers Returned", + "description": "Specifies the maximum number of available virtual servers that the system lists in a response", + "type": "integer", + "minimum": 1, + "default": 1, + "maximum": 500 + } + } + } + }, + { + "if": { + "anyOf": [ + { + "properties": { + "resourceRecordType": { + "const": "A" + } + } + }, + { + "properties": { + "resourceRecordType": { + "const": "AAAA" + } + } + }, + { + "properties": { + "resourceRecordType": { + "const": "MX" + } + } + } + ] + }, + "then": { + "properties": { + "fallbackIP": { + "title": "Fallback IP", + "description": "Specifies the IP address of the server to which the system directs requests when it cannot use one of its pools to do so. Note that the system uses the fallback IP only if you select a fallback load balancing method", + "type": "string", + "format": "f5ip" + } + } + } + }, + { + "if": { + "properties": { + "resourceRecordType": { + "const": "MX" + } + } + }, + "then": { + "properties": { + "members": { + "title": "Members", + "description": "Specifies the members of this pool", + "type": "array", + "items": { + "$ref": "#/definitions/GSLB_Pool_Member_MX" + } + } + } + } + }, + { + "if": { + "properties": { + "resourceRecordType": { + "const": "NAPTR" + } + } + }, + "then": { + "properties": { + "members": { + "title": "Members", + "description": "Specifies the members of this pool", + "type": "array", + "items": { + "$ref": "#/definitions/GSLB_Pool_Member_NAPTR" + } + } + } + } + }, + { + "if": { + "properties": { + "resourceRecordType": { + "const": "CNAME" + } + } + }, + "then": { + "allOf": [ + { + "properties": { + "members": { + "title": "Members", + "description": "Specifies the members of this pool", + "type": "array", + "items": { + "$ref": "#/definitions/GSLB_Pool_Member_CNAME" + } + } + } + }, + { + "not": { + "required": [ + "maxAnswersReturned", + "monitors" + ] + } + } + ] + } + }, + { + "if": { + "properties": { + "resourceRecordType": { + "const": "A" + } + } + }, + "then": { + "properties": { + "members": { + "title": "Members", + "description": "Specifies the members of this pool", + "type": "array", + "items": { + "$ref": "#/definitions/GSLB_Pool_Member_A" + } + } + } + } + }, + { + "if": { + "properties": { + "resourceRecordType": { + "const": "AAAA" + } + } + }, + "then": { + "properties": { + "members": { + "title": "Members", + "description": "Specifies the members of this pool", + "type": "array", + "items": { + "$ref": "#/definitions/GSLB_Pool_Member_AAAA" + } + } + } + } + }, + { + "if": { + "anyOf": [ + { + "properties": { + "resourceRecordType": { + "const": "A" + } + } + }, + { + "properties": { + "resourceRecordType": { + "const": "AAAA" + } + } + } + ] + }, + "then": { + "properties": { + "monitors": { + "title": "Monitors", + "description": "Specifies the health monitors the system uses to determine whether it can use this pool for load balancing", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_GSLB_Monitor" + } + }, + "bpsLimit": { + "title": "Maximum Bits Per Second", + "description": "The maximum allowable data throughput rate, in bits per second, for the virtual servers in the pool. If the network traffic volume exceeds this value, the system marks the pool as unavailable", + "type": "integer", + "default": 0, + "minimum": 0 + }, + "bpsLimitEnabled": { + "title": "Maximum Bits Per Second - Limit Enabled", + "description": "Enables or disables the maximum Bits Per Second (BPS) option for this pool. The default value is false (disabled)", + "type": "boolean", + "default": false + }, + "ppsLimit": { + "title": "Maximum Packets Per Second", + "description": "The maximum allowable data transfer rate, in packets per second, for the virtual servers in the pool. If the network traffic volume exceeds this value, the system marks the pool as unavailable", + "type": "integer", + "default": 0, + "minimum": 0 + }, + "ppsLimitEnabled": { + "title": "Maximum Packets Per Second - Limit Enabled", + "description": "Enables or disables the maximum Packets Per Second (PPS) option for this pool. The default value is false (disabled)", + "type": "boolean", + "default": false + }, + "connectionsLimit": { + "title": "Maximum Current Connections Per Second", + "description": "The number of current connections allowed for the virtual servers in the pool. If the current connections exceed this value, the system marks the pool as unavailable", + "type": "integer", + "default": 0, + "minimum": 0 + }, + "connectionsLimitEnabled": { + "title": "Maximum Current Connections Per Second - Limit Enabled", + "description": "Enables or disables the maximum current connections option for this pool. The default value is false (disabled)", + "type": "boolean", + "default": false + } + } + } + }, + { + "if": { + "anyOf": [ + { + "properties": { + "lbModePreferred": { + "const": "quality-of-service" + } + } + }, + { + "properties": { + "lbModeFallback": { + "const": "quality-of-service" + } + } + } + ] + }, + "then": { + "properties": { + "qosHitRatio": { + "title": "Quality of Service (QOS) Hit Ratio", + "description": "Assigns a weight to the Hit Ratio performance factor for the Quality of Service dynamic load balancing mode", + "type": "integer", + "minimum": 0, + "default": 5 + }, + "qosHops": { + "title": "Quality of Service (QOS) Hops", + "description": "Assigns a weight to the Hops performance factor for the Quality of Service dynamic load balancing mode", + "type": "integer", + "minimum": 0, + "default": 0 + }, + "qosKbps": { + "title": "Quality of Service (QOS) Kilobytes per Second (Kbps)", + "description": "Assigns a weight to the Kilobytes per Second performance factor for the Quality of Service dynamic load balancing mode", + "type": "integer", + "minimum": 0, + "default": 3 + }, + "qosLinkCapacity": { + "title": "Quality of Service (QOS) Link Capacity", + "description": "Assigns a weight to the Link Capacity performance factor for the Quality of Service dynamic load balancing mode", + "type": "integer", + "minimum": 0, + "default": 30 + }, + "qosPacketRate": { + "title": "Quality of Service (QOS) Packet Rate", + "description": "Assigns a weight to the Packet Rate performance factor for the Quality of Service dynamic load balancing mode", + "type": "integer", + "minimum": 0, + "default": 1 + }, + "qosRoundTripTime": { + "title": "Quality of Service (QOS) Round Trip Time", + "description": "Assigns a weight to the Round Trip Time performance factor for the Quality of Service dynamic load balancing mode", + "type": "integer", + "minimum": 0, + "default": 50 + }, + "qosTopology": { + "title": "Quality of Service (QOS) Topology", + "description": "Assigns a weight to the Topology performance factor for the Quality of Service dynamic load balancing mode", + "type": "integer", + "minimum": 0, + "default": 0 + }, + "qosVirtualServerCapacity": { + "title": "Quality of Service (QOS) Virtual Server Capacity", + "description": "Assigns a weight to the Virtual Server performance factor for the Quality of Service dynamic load balancing mode", + "type": "integer", + "minimum": 0, + "default": 0 + }, + "qosVirtualServerScore": { + "title": "Quality of Service (QOS) Virtual Server Score", + "description": "Assigns a weight to the Virtual Server Score performance factor for the Quality of Service dynamic load balancing mode", + "type": "integer", + "minimum": 0, + "default": 0 + } + } + } + } + ], + "required": [ + "class", + "resourceRecordType" + ] + }, + "GSLB_Pool_Member_A": { + "title": "GSLB Resource Record Type A Pool Member", + "description": "Declares member of the GSLB pool", + "type": "object", + "properties": { + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "server": { + "$ref": "#/definitions/Pointer_GSLB_Server" + }, + "virtualServer": { + "description": "Specifies that the Global Traffic Manager assigns connection requests to virtual servers based on a user-defined ranking system.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/Pointer_Service" + } + ] + }, + "ratio": { + "title": "Ratio", + "description": "Specifies the ratio weight assigned to the pool member. This weight determines the frequency at which the pool member is selected for load balancing.", + "type": "integer", + "default": 1, + "minimum": 0, + "maximum": 65535 + }, + "enabled": { + "title": "Enabled", + "description": "When true (default), the system can use the pool member and its resources for load balancing requests", + "type": "boolean", + "default": true + }, + "dependsOn": { + "description": "Specifies the name of the virtual server on which this pool member depends.", + "type": [ + "string", + "array" + ], + "oneOf": [ + { + "type": "string", + "const": "none" + }, + { + "type": "array", + "items": { + "type": "string", + "pattern": "^/Common/Shared/.*:.*" + } + } + ] + } + }, + "additionalProperties": false, + "required": [ + "server", + "virtualServer" + ] + }, + "GSLB_Pool_Member_AAAA": { + "title": "GSLB Resource Record Type AAAA Pool Member", + "description": "Declares member of the GSLB pool", + "type": "object", + "properties": { + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "server": { + "$ref": "#/definitions/Pointer_GSLB_Server" + }, + "virtualServer": { + "description": "Specifies that the Global Traffic Manager assigns connection requests to virtual servers based on a user-defined ranking system.", + "oneOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/Pointer_Service" + } + ] + }, + "ratio": { + "title": "Ratio", + "description": "Specifies the ratio weight assigned to the pool member. This weight determines the frequency at which the pool member is selected for load balancing", + "type": "integer", + "default": 1, + "minimum": 0, + "maximum": 65535 + }, + "enabled": { + "title": "Enabled", + "description": "When true (default), the system can use the pool member and its resources for load balancing requests", + "type": "boolean", + "default": true + }, + "dependsOn": { + "description": "Specifies the name of the virtual server on which this pool member depends.", + "type": [ + "string", + "array" + ], + "oneOf": [ + { + "type": "string", + "const": "none" + }, + { + "type": "array", + "items": { + "type": "string", + "pattern": "^/Common/Shared/.*:.*" + } + } + ] + } + }, + "additionalProperties": false, + "required": [ + "server", + "virtualServer" + ] + }, + "GSLB_Pool_Member_CNAME": { + "title": "GSLB Resource Record Type CNAME Pool Member", + "description": "Declares member of the GSLB pool", + "type": "object", + "properties": { + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "ratio": { + "title": "Ratio", + "description": "Specifies the ratio weight assigned to the pool member. This weight determines the frequency at which the pool member is selected for load balancing", + "type": "integer", + "default": 1, + "minimum": 0, + "maximum": 65535 + }, + "enabled": { + "title": "Enabled", + "description": "When true (default), the system can use the pool member and its resources for load balancing requests", + "type": "boolean", + "default": true + }, + "domainName": { + "title": "Domain Name", + "description": "Specifies the domain name for this pool member", + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/Pointer_GSLB_Domain_A" + }, + { + "$ref": "#/definitions/Pointer_GSLB_Domain_AAAA" + }, + { + "$ref": "#/definitions/Pointer_GSLB_Domain_CNAME" + }, + { + "$ref": "#/definitions/Pointer_GSLB_Domain_MX" + }, + { + "$ref": "#/definitions/Pointer_GSLB_Domain_NAPTR" + } + ] + }, + "isDomainNameStatic": { + "title": "Static DomainName/ Static Target", + "description": "Specifies that the member's name specifies a static domain name rather than a name linked to a domain defined on the system. This might be required if the target domainName is not owned by the organization or configured on the BIG-IP. One side-effect of using a static target is that the member is always considered available for load balancing. The default is (false) disabled", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false, + "required": [ + "domainName" + ] + }, + "GSLB_Pool_Member_MX": { + "title": "GSLB Resource Record Type MX Pool Member", + "description": "Declares member of the GSLB pool", + "type": "object", + "properties": { + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "enabled": { + "title": "Enabled", + "description": "When true (default), the system can use the pool member and its resources for load balancing requests", + "type": "boolean", + "default": true + }, + "domainName": { + "title": "Domain Name", + "description": "Specifies the domain name for this pool member", + "anyOf": [ + { + "$ref": "#/definitions/Pointer_GSLB_Domain_A" + }, + { + "$ref": "#/definitions/Pointer_GSLB_Domain_AAAA" + } + ] + }, + "priority": { + "title": "Priority", + "description": "Specifies the MX resource record priority", + "type": "integer", + "default": 10, + "minimum": 0, + "maximum": 65535 + }, + "ratio": { + "title": "Ratio", + "description": "Specifies the ratio weight assigned to the pool member. This weight determines the frequency at which the pool member is selected for load balancing", + "type": "integer", + "default": 1, + "minimum": 0, + "maximum": 65535 + } + }, + "additionalProperties": false, + "required": [ + "domainName" + ] + }, + "GSLB_Pool_Member_NAPTR": { + "title": "GSLB Resource Record Type MX Pool Member", + "description": "Declares member of the GSLB pool", + "type": "object", + "properties": { + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "domainName": { + "title": "Domain Name", + "description": "Specifies the domain name for this pool member", + "anyOf": [ + { + "$ref": "#/definitions/Pointer_GSLB_Domain_A" + }, + { + "$ref": "#/definitions/Pointer_GSLB_Domain_AAAA" + } + ] + }, + "enabled": { + "title": "Enabled", + "description": "When true (default), the system can use the pool member and its resources for load balancing requests", + "type": "boolean", + "default": true + }, + "order": { + "title": "Order", + "description": "Specifies the response resource record's order RDATA field value when this member is picked.", + "type": "integer", + "default": 10, + "minimum": 0, + "maximum": 65535 + }, + "preference": { + "title": "Preference", + "description": "Specifies the response resource record's preference RDATA field value when this member is picked.", + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 65535 + }, + "ratio": { + "title": "Ratio", + "description": "Specifies the ratio weight assigned to the pool member. This weight determines the frequency at which the pool member is selected for load balancing", + "type": "integer", + "default": 1, + "minimum": 0, + "maximum": 65535 + }, + "service": { + "title": "Service", + "description": "Specifies the response resource record's service RDATA field value when this member is picked.", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "domainName", + "service" + ] + }, + "GSLB_Server": { + "title": "GSLB_Server", + "description": "Declares a GSLB server object which contains configuration for a load balancer or a host server", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "GSLB_Server" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "enabled": { + "title": "Enabled", + "description": "Specifies whether the server is enabled or disabled", + "type": "boolean", + "default": true + }, + "serverType": { + "title": "Server Type", + "description": "Specifies the server type. The server type determines the metrics that the system can collect from the server", + "type": "string", + "enum": [ + "bigip", + "generic-host" + ], + "default": "bigip" + }, + "proberPreferred": { + "title": "Prober Preferred", + "description": "Specifies the type of prober to use to monitor servers defined in this data center. The default value is inside-data-center. Note: Prober pools are not used by the bigip monitor", + "type": "string", + "enum": [ + "inherit", + "inside-datacenter", + "outside-datacenter", + "pool" + ], + "default": "inherit" + }, + "proberFallback": { + "title": "Prober Fallback", + "description": "Specifies the type of prober to use to monitor servers defined in this data center when the preferred type is not available. The default value is any-available", + "type": "string", + "enum": [ + "inherit", + "any-available", + "inside-datacenter", + "none", + "outside-datacenter", + "pool" + ], + "default": "inherit" + }, + "dataCenter": { + "$ref": "#/definitions/Pointer_GSLB_Data_Center" + }, + "devices": { + "title": "Device List", + "description": "Specifies the actual device(s) that are represented by this server object", + "type": "array", + "items": { + "$ref": "#/definitions/GSLB_Server_Device" + }, + "minItems": 1 + }, + "virtualServers": { + "title": "Virtual Server List", + "description": "Specifies the virtual server(s) that are resources on this server object", + "type": "array", + "items": { + "$ref": "#/definitions/GSLB_Virtual_Server" + } + }, + "virtualServerDiscoveryMode": { + "title": "Virtual Server Auto Discovery Mode", + "description": "Specifies virtual server auto-discovery settings. Use 'enabled' (add, modify, delete), 'enabled-no-delete' (add, modify) or the default 'disabled' (manual configuration)", + "type": "string", + "enum": [ + "disabled", + "enabled", + "enabled-no-delete" + ], + "default": "disabled" + }, + "exposeRouteDomainsEnabled": { + "title": "Expose Route Domains Enabled", + "description": "Allows virtual servers from all route domains to be auto-discovered. The default setting is false", + "type": "boolean", + "default": false + }, + "monitors": { + "title": "Monitor List", + "description": "Specifies the health monitors the system uses to determine whether it can use this server for load balancing", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_GSLB_Monitor" + }, + "default": [ + { + "bigip": "/Common/bigip" + } + ] + }, + "bpsLimit": { + "title": "Maximum Bits Per Second", + "description": "Specifies the maximum allowable data throughput rate, in bits per second, for the virtual servers on the server. If the network traffic volume exceeds this limit, the system marks the server as unavailable", + "type": "integer", + "default": 0, + "minimum": 0 + }, + "bpsLimitEnabled": { + "title": "Maximum Bits Per Second - Limit Enabled", + "description": "Enables or disables the maximum Bits Per Second (BPS) option for the virtual servers on the server. The default value is false (disabled)", + "type": "boolean", + "default": false + }, + "ppsLimit": { + "title": "Maximum Packets Per Second", + "description": "The maximum allowable data transfer rate, in packets per second, for the virtual servers on the server. If the network traffic volume exceeds this value, the system marks the server as unavailable", + "type": "integer", + "default": 0, + "minimum": 0 + }, + "ppsLimitEnabled": { + "title": "Maximum Packets Per Second - Limit Enabled", + "description": "Enables or disables the maximum Packets Per Second (PPS) option for the virtual servers on the server. The default value is false (disabled)", + "type": "boolean", + "default": false + }, + "connectionsLimit": { + "title": "Maximum Current Connections Per Second", + "description": "The number of current connections allowed for the virtual servers on the server. If the current connections exceed this value, the system marks the server as unavailable", + "type": "integer", + "default": 0, + "minimum": 0 + }, + "connectionsLimitEnabled": { + "title": "Maximum Current Connections Per Second - Limit Enabled", + "description": "Enables or disables the maximum current connections option for the virtual servers on the server. The default value is false (disabled)", + "type": "boolean", + "default": false + }, + "cpuUsageLimit": { + "title": "Maximum CPU Percent Usage", + "description": "Specifies the percent of CPU usage. If percent of CPU usage goes above the limit, the system marks the server as unavailable", + "type": "integer", + "minimum": 0 + }, + "cpuUsageLimitEnabled": { + "title": "Maximum CPU Percent Usage - Limit Enabled", + "description": "Enables or disables the CPU Usage limit option for this pool. The default value is false (disabled)", + "type": "boolean" + }, + "memoryLimit": { + "title": "Memory Available (KB)", + "description": "Specifies the available memory in kilobytes required by the virtual servers on the server. If available memory falls below this limit, the system marks the server as unavailable", + "type": "integer", + "minimum": 0 + }, + "memoryLimitEnabled": { + "title": "Memory Available - Limit Enabled", + "description": "Enables or disables the maximum Bits Per Second (BPS) option for this pool. The default value is false (disabled)", + "type": "boolean" + }, + "serviceCheckProbeEnabled": { + "title": "Path Probe - Enabled", + "description": "Specifies whether this BIG-IP device will be used to conduct a service check probe before traffic will be delegated to it. The default value is (true) enabled ", + "type": "boolean" + }, + "pathProbeEnabled": { + "title": "Service Check Probe - Enabled", + "description": "Specifies whether this BIG-IP device will be used to conduct a path probe before traffic will be delegated to it. The default value is (true) enabled ", + "type": "boolean" + }, + "snmpProbeEnabled": { + "title": "SNMP Probe - Enabled", + "description": "Specifies whether this BIG-IP device will be used to conduct a SNMP probe before traffic will be delegated to it. The default value is (true) enabled ", + "type": "boolean" + }, + "proberPool": { + "$ref": "#/definitions/Pointer_GSLB_Prober_Pool" + } + }, + "dependencies": { + "cpuUsageLimit": { + "properties": { + "serverType": { + "const": "generic-host" + } + } + }, + "cpuUsageLimitEnabled": { + "properties": { + "serverType": { + "const": "generic-host" + } + } + }, + "memoryLimit": { + "properties": { + "serverType": { + "const": "generic-host" + } + } + }, + "memoryLimitEnabled": { + "properties": { + "serverType": { + "const": "generic-host" + } + } + }, + "serviceCheckProbeEnabled": { + "properties": { + "serverType": { + "const": "bigip" + } + } + }, + "pathProbeEnabled": { + "properties": { + "serverType": { + "const": "bigip" + } + } + }, + "snmpProbeEnabled": { + "properties": { + "serverType": { + "const": "bigip" + } + } + }, + "proberPreferred": { + "if": { + "properties": { + "proberPreferred": { + "const": "pool" + } + } + }, + "then": { + "required": [ + "proberPool" + ] + } + }, + "proberFallback": { + "if": { + "properties": { + "proberFallback": { + "const": "pool" + } + } + }, + "then": { + "required": [ + "proberPool" + ] + } + } + }, + "allOf": [ + { + "if": { + "required": [ + "serverType" + ], + "properties": { + "serverType": { + "const": "generic-host" + } + } + }, + "then": { + "properties": { + "devices": { + "maxItems": 1 + }, + "cpuUsageLimit": { + "default": 0 + }, + "cpuUsageLimitEnabled": { + "default": false + }, + "memoryLimit": { + "default": 0 + }, + "memoryLimitEnabled": { + "default": false + } + } + } + }, + { + "if": { + "required": [ + "serverType" + ], + "properties": { + "serverType": { + "const": "bigip" + } + } + }, + "then": { + "properties": { + "serviceCheckProbeEnabled": { + "default": true + }, + "pathProbeEnabled": { + "default": true + }, + "snmpProbeEnabled": { + "default": true + } + } + } + } + ], + "required": [ + "class", + "dataCenter", + "devices" + ], + "additionalProperties": false + }, + "GSLB_Server_Device": { + "description": "Configures a device for the GSLB Server", + "type": "object", + "properties": { + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "address": { + "title": "Address", + "type": "string", + "description": " Specifies an external (public) address for the device. If BIG-IP DNS configuration synchronization is enabled and all existing addresses for a device are being replaced, new addresses should be added and synchronized before old addresses are removed, otherwise the changes may fail to synchronize. Alternatively, the address configuration changes can be performed on each BIG-IP DNS system", + "format": "f5ip" + }, + "addressTranslation": { + "title": "Address Translation", + "type": "string", + "description": "Specifies the internal (private) address that corresponds to the external address", + "format": "f5ip" + } + }, + "required": [ + "address" + ] + }, + "GSLB_Data_Center": { + "title": "GSLB_Data_Center", + "description": "Declares a GSLB Data Center configuration", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "GSLB_Data_Center" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "enabled": { + "title": "Enabled", + "description": "Specifies whether the data center is enabled or disabled", + "type": "boolean", + "default": true + }, + "location": { + "title": "Location", + "description": "Specifies the location of the data center", + "type": "string" + }, + "contact": { + "title": "Contact", + "description": "Specifies the name of the administrator or the name of the department that manages the data center", + "type": "string" + }, + "proberPreferred": { + "title": "Prober Preferred", + "description": "Specifies the type of prober to use to monitor servers defined in this data center. The default value is inside-data-center. Note: Prober pools are not used by the bigip monitor", + "type": "string", + "enum": [ + "inside-datacenter", + "outside-datacenter", + "pool" + ], + "default": "inside-datacenter" + }, + "proberFallback": { + "title": "Prober Fallback", + "description": "Specifies the type of prober to use to monitor servers defined in this data center when the preferred type is not available. The default value is any-available", + "type": "string", + "enum": [ + "any-available", + "inside-datacenter", + "none", + "outside-datacenter", + "pool" + ], + "default": "any-available" + }, + "proberPool": { + "$ref": "#/definitions/Pointer_GSLB_Prober_Pool" + } + }, + "dependencies": { + "proberPool": { + "anyOf": [ + { + "properties": { + "proberPreferred": { + "const": "pool" + } + } + }, + { + "properties": { + "proberFallback": { + "const": "pool" + } + } + } + ] + } + }, + "additionalProperties": false, + "required": [ + "class" + ] + }, + "GSLB_Virtual_Server": { + "title": "GSLB virtual server", + "description": "GSLB virtual server", + "type": "object", + "properties": { + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "enabled": { + "title": "Enabled", + "description": "Specifies whether the virtual server is enabled or disabled", + "type": "boolean", + "default": true + }, + "port": { + "title": "Port", + "description": "L4 port for service (like 443 for HTTPS)", + "type": "integer", + "minimum": 0, + "maximum": 65535 + }, + "address": { + "title": "Address", + "description": "Format of address for virtual server (such as IPv4)", + "type": "string", + "format": "f5ip" + }, + "addressTranslation": { + "title": "Address Translation", + "description": "Specifies the public address that this virtual server translates into when the GSLB provider communicates between the network and the Internet. The default value is disabled", + "type": "string", + "format": "f5ip" + }, + "addressTranslationPort": { + "title": "Address Translation Port", + "description": "L4 port for service (like 443 for HTTPS)", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "monitors": { + "title": "Monitors", + "description": "Specifies the health monitors that the system uses to determine whether it can use this linked virtual server for load balancing", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_GSLB_Monitor" + } + }, + "name": { + "title": "Name", + "description": "Specifies the name of the Virtual Server", + "type": "string" + } + }, + "required": [ + "address", + "port" + ], + "additionalProperties": false + }, + "GSLB_Prober_Pool": { + "title": "GSLB_Prober_Pool", + "description": "Declares a pool of BIG-IP devices that will monitor server resources for health and performance. Note: Prober pools are not used by the bigip monitor", + "f5PostProcess": { + "tag": "modules", + "data": [ + "gtm" + ] + }, + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "GSLB_Prober_Pool" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "enabled": { + "title": "Enabled", + "description": "Specifies whether this pool is available for conducting probes", + "type": "boolean", + "default": true + }, + "lbMode": { + "title": "Load Balancing Mode", + "description": "Specifies the load balancing mode the system uses to select the members of this pool", + "type": "string", + "enum": [ + "global-availability", + "round-robin" + ] + }, + "members": { + "title": "Members", + "description": "Specifies the members of the prober pool", + "type": "array", + "items": { + "$ref": "#/definitions/GSLB_Prober_Pool_Member" + } + } + } + }, + "GSLB_Prober_Pool_Member": { + "title": "GSLB Prober Pool Member", + "description": "Declares member of the GSLB prober pool", + "type": "object", + "properties": { + "enabled": { + "title": "Prober Pool Member Enabled", + "description": "Specifies whether the server can be used as a member of a prober pool", + "type": "boolean", + "default": true + }, + "memberOrder": { + "title": "Prober Pool Member Order", + "description": "Specifies the order in which this server appears in the prober pool", + "type": "integer", + "default": 0, + "minimum": 0, + "maximum": 65535 + } + } + }, + "GSLB_Topology_Records": { + "title": "GSLB_Topology_Records", + "description": "Defines GSLB Topology records", + "type": "object", + "properties": { + "label": { + "$ref": "#/definitions/Label" + }, + "class": { + "title": "Class", + "type": "string", + "const": "GSLB_Topology_Records" + }, + "longestMatchEnabled": { + "title": "Longest Match Algorithm Enabled", + "description": "Enables the algorithm that requires the system to evaluate all records in the topology statement and use the record that most completely matches the source IP address of the name resolution request. If true, the order of the records as they appear in the array will not be preserved", + "type": "boolean", + "default": true + }, + "records": { + "title": "Record List", + "description": "Specifies the actual device(s) that are represented by this server object", + "type": "array", + "items": { + "$ref": "#/definitions/GSLB_Topology_Record" + }, + "minItems": 1 + } + }, + "required": [ + "class", + "records" + ] + }, + "GSLB_Topology_Record": { + "type": "object", + "properties": { + "source": { + "title": "Request Source", + "description": "Specifies the origination section of the topology record, the local DNS", + "allOf": [ + { + "$ref": "#/definitions/GSLB_Topology_Condition" + } + ] + }, + "destination": { + "title": "Request Destination", + "description": "Specifies where the system directs the incoming DNS request", + "allOf": [ + { + "$ref": "#/definitions/GSLB_Topology_Condition" + } + ] + }, + "weight": { + "title": "Record Weight", + "description": "Specifies the weight for the topology record. The system load balances to the server object and DNS that matches the record with the highest topology weight", + "type": "integer", + "default": 1, + "minimum": 0, + "maximum": 4294967295 + } + }, + "allOf": [ + { + "not": { + "properties": { + "source": { + "properties": { + "matchType": { + "const": "pool" + } + } + } + } + } + }, + { + "not": { + "properties": { + "source": { + "properties": { + "matchType": { + "const": "datacenter" + } + } + } + } + } + } + ], + "required": [ + "source", + "destination" + ] + }, + "GSLB_Topology_Region": { + "title": "GSLB_Topology_Region", + "description": "Defines a GSLB Topology region", + "type": "object", + "properties": { + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "class": { + "title": "Class", + "type": "string", + "const": "GSLB_Topology_Region" + }, + "members": { + "title": "Region Member List", + "description": "Configures the list of members for this region", + "type": "array", + "items": { + "$ref": "#/definitions/GSLB_Topology_Condition" + } + } + }, + "required": [ + "class" + ] + }, + "GSLB_Topology_Condition": { + "type": "object", + "properties": { + "matchType": { + "title": "Match Type", + "description": "Specifies the type/category of match to perform", + "type": "string", + "enum": [ + "continent", + "country", + "datacenter", + "geoip-isp", + "isp", + "pool", + "region", + "state", + "subnet" + ] + }, + "matchOperator": { + "title": "Match Operator", + "description": "Specifies the operation to perform a match. Default value is equals (matches)", + "type": "string", + "enum": [ + "equals", + "not-equals" + ], + "default": "equals" + }, + "matchValue": { + "title": "Match Value", + "description": "Specifies the value to match", + "type": [ + "string", + "object" + ] + } + }, + "allOf": [ + { + "if": { + "properties": { + "matchType": { + "const": "continent" + } + } + }, + "then": { + "properties": { + "matchValue": { + "$ref": "#/definitions/Enum_Continent_Code_Alpha_2" + } + } + } + }, + { + "if": { + "properties": { + "matchType": { + "const": "country" + } + } + }, + "then": { + "properties": { + "matchValue": { + "$ref": "#/definitions/Enum_Country_Code_Alpha_2" + } + } + } + }, + { + "if": { + "properties": { + "matchType": { + "const": "datacenter" + } + } + }, + "then": { + "properties": { + "matchValue": { + "$ref": "#/definitions/Pointer_GSLB_Data_Center" + } + } + } + }, + { + "if": { + "properties": { + "matchType": { + "const": "geoip-isp" + } + } + }, + "then": { + "properties": { + "matchValue": { + "type": "string" + } + } + } + }, + { + "if": { + "properties": { + "matchType": { + "const": "isp" + } + } + }, + "then": { + "properties": { + "matchValue": { + "$ref": "#/definitions/Enum_ISP" + } + } + } + }, + { + "if": { + "properties": { + "matchType": { + "const": "pool" + } + } + }, + "then": { + "properties": { + "matchValue": { + "$ref": "#/definitions/Pointer_GSLB_Pool" + } + } + } + }, + { + "if": { + "properties": { + "matchType": { + "const": "region" + } + } + }, + "then": { + "properties": { + "matchValue": { + "$ref": "#/definitions/Pointer_GSLB_Topology_Region" + } + } + } + }, + { + "if": { + "properties": { + "matchType": { + "const": "state" + } + } + }, + "then": { + "properties": { + "matchValue": { + "description": "State value in the format /, for example: US/Washington", + "type": "string", + "minLength": 4 + } + } + } + }, + { + "if": { + "properties": { + "matchType": { + "const": "subnet" + } + } + }, + "then": { + "properties": { + "matchValue": { + "type": "string", + "format": "f5ip" + } + } + } + } + ], + "required": [ + "matchType", + "matchValue" + ] + }, + "GSLB_Pool_A": { + "description": "Pointer to a Pool A object", + "allOf": [ + { + "$ref": "#/definitions/GSLB_Pool" + } + ] + }, + "GSLB_Pool_AAAA": { + "description": "Pointer to a Pool AAAA object", + "allOf": [ + { + "$ref": "#/definitions/GSLB_Pool" + } + ] + }, + "GSLB_Pool_CNAME": { + "description": "Pointer to a Pool CNAME object", + "allOf": [ + { + "$ref": "#/definitions/GSLB_Pool" + } + ] + }, + "GSLB_Pool_MX": { + "description": "Pointer to a Pool MX object", + "allOf": [ + { + "$ref": "#/definitions/GSLB_Pool" + } + ] + }, + "ALG_Log_Profile": { + "type": "object", + "title": "ALG_Log_Profile", + "description": "Configures an application layer gateway log profle", + "f5PostProcess": { + "tag": "modules", + "data": [ + "cgnat" + ] + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "ALG_Log_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "csvFormat": { + "description": "Generate entries in comma-separated-values (csv) format", + "type": "boolean", + "default": false + }, + "startControlChannel": { + "description": "Event for start of control channel connection", + "type": "object", + "properties": { + "action": { + "description": "Specify the logging action to be taken when a particular event is encountered. If 'enabled' logging is enabled for the event, regardless of how the flow is created. If 'disabled' logging is disabled for the event. If 'backup-allocation-only' logging is enabled for the event when the ALG is proxy with a LSN, and translation is taken from the backup pool member only.", + "type": "string", + "enum": [ + "enabled", + "disabled", + "backup-allocation-only" + ], + "default": "disabled" + }, + "includeDestination": { + "description": "Include destination address/port in the log message", + "type": "boolean", + "default": false + } + }, + "default": { + "action": "disabled", + "includeDestination": false + }, + "additionalProperties": false + }, + "endControlChannel": { + "description": "Event for end of control channel connection", + "type": "object", + "properties": { + "action": { + "description": "Specify the logging action to be taken when a particular event is encountered. If 'enabled' logging is enabled for the event, regardless of how the flow is created. If 'disabled' logging is disabled for the event. If 'backup-allocation-only' logging is enabled for the event when the ALG is proxy with a LSN, and translation is taken from the backup pool member only.", + "type": "string", + "enum": [ + "enabled", + "disabled", + "backup-allocation-only" + ], + "default": "enabled" + }, + "includeDestination": { + "description": "Include destination address/port in the log message", + "type": "boolean", + "default": false + } + }, + "default": { + "action": "enabled", + "includeDestination": false + }, + "additionalProperties": false + }, + "startDataChannel": { + "description": "Event for start of data channel connection", + "type": "object", + "properties": { + "action": { + "description": "Specify the logging action to be taken when a particular event is encountered. If 'enabled' logging is enabled for the event, regardless of how the flow is created. If 'disabled' logging is disabled for the event. If 'backup-allocation-only' logging is enabled for the event when the ALG is proxy with a LSN, and translation is taken from the backup pool member only.", + "type": "string", + "enum": [ + "enabled", + "disabled", + "backup-allocation-only" + ], + "default": "disabled" + }, + "includeDestination": { + "description": "Include destination address/port in the log message", + "type": "boolean", + "default": false + } + }, + "default": { + "action": "disabled", + "includeDestination": false + }, + "additionalProperties": false + }, + "endDataChannel": { + "description": "Event for end of data channel connection", + "type": "object", + "properties": { + "action": { + "description": "Specify the logging action to be taken when a particular event is encountered. If 'enabled' logging is enabled for the event, regardless of how the flow is created. If 'disabled' logging is disabled for the event. If 'backup-allocation-only' logging is enabled for the event when the ALG is proxy with a LSN, and translation is taken from the backup pool member only.", + "type": "string", + "enum": [ + "enabled", + "disabled", + "backup-allocation-only" + ], + "default": "enabled" + }, + "includeDestination": { + "description": "Include destination address/port in the log message", + "type": "boolean", + "default": false + } + }, + "default": { + "action": "enabled", + "includeDestination": false + }, + "additionalProperties": false + }, + "inboundTransaction": { + "description": "Generates event log entries of SIP messages. Triggered by inbound connection to the BIG-IP system", + "type": "object", + "properties": { + "action": { + "description": "Specify the logging action to be taken when a particular event is encountered. If 'enabled' logging is enabled for the event, regardless of how the flow is created. If 'disabled' logging is disabled for the event. Inbound transaction log entry could contain both incoming and outgoing messages.", + "type": "string", + "enum": [ + "enabled", + "disabled" + ], + "default": "disabled" + } + }, + "default": { + "action": "disabled" + } + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "Security_Log_Profile": { + "type": "object", + "title": "Security_Log_Profile", + "description": "Configures a Security log profile", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm", + "asm" + ] + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Security_Log_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "application": { + "$ref": "#/definitions/Security_Log_Profile_Application" + }, + "botDefense": { + "$ref": "#/definitions/Security_Log_Profile_Bot_Defense" + }, + "classification": { + "$ref": "#/definitions/Security_Log_Profile_Classification" + }, + "dosApplication": { + "$ref": "#/definitions/Security_Log_Profile_Dos_Application" + }, + "dosNetwork": { + "$ref": "#/definitions/Security_Log_Profile_Dos_Network" + }, + "ipIntelligence": { + "$ref": "#/definitions/Security_Log_Profile_Ip_Intelligence" + }, + "nat": { + "$ref": "#/definitions/Security_Log_Profile_Nat" + }, + "network": { + "$ref": "#/definitions/Security_Log_Profile_Network" + }, + "protocolDns": { + "$ref": "#/definitions/Security_Log_Profile_Protocol_Dns" + }, + "protocolDnsDos": { + "$ref": "#/definitions/Security_Log_Profile_Protocol_Dns_Dos" + }, + "protocolInspection": { + "$ref": "#/definitions/Security_Log_Profile_Protocol_Inspection" + }, + "protocolSip": { + "$ref": "#/definitions/Security_Log_Profile_Protocol_Sip" + }, + "protocolSipDos": { + "$ref": "#/definitions/Security_Log_Profile_Protocol_Sip_Dos" + }, + "protocolTransfer": { + "$ref": "#/definitions/Security_Log_Profile_Protocol_Transfer" + }, + "sshProxy": { + "$ref": "#/definitions/Security_Log_Profile_Ssh_Proxy" + } + }, + "required": [ + "class" + ], + "dependencies": { + "application": { + "not": { + "oneOf": [ + { + "required": [ + "protocolDns" + ] + }, + { + "required": [ + "protocolSip" + ] + }, + { + "required": [ + "sshProxy" + ] + } + ] + } + }, + "protocolDns": { + "not": { + "required": [ + "application" + ] + } + }, + "protocolSip": { + "not": { + "required": [ + "application" + ] + } + }, + "sshProxy": { + "not": { + "required": [ + "application" + ] + } + } + } + }, + "Security_Log_Profile_Application": { + "description": "When enabled, specifies the system logs events from applications.", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "asm" + ] + }, + "properties": { + "facility": { + "description": "Specifies the facility category of the logged traffic", + "type": "string", + "enum": [ + "local0", + "local1", + "local2", + "local3", + "local4", + "local5", + "local6", + "local7" + ], + "default": "local0" + }, + "storageFilter": { + "description": "Adds, deletes, or replaces a set of request filters", + "type": "object", + "properties": { + "logicalOperation": { + "description": "Specifies the logical operation on associated filters", + "type": "string", + "enum": [ + "and", + "or" + ], + "default": "or" + }, + "requestType": { + "description": "Specifies which kind of requests the system or server will log", + "type": "string", + "enum": [ + "all", + "illegal", + "illegal-including-staged-signatures" + ], + "default": "illegal" + }, + "protocols": { + "description": "Specifies if request logging is dependent on the protocols", + "type": "array", + "items": { + "type": "string", + "enum": [ + "http", + "https", + "ws", + "wss" + ] + } + }, + "responseCodes": { + "description": "Specifies whether request logging is dependent on the response status codes", + "type": "array", + "items": { + "type": "string", + "enum": [ + "100", + "101", + "102", + "200", + "201", + "202", + "203", + "204", + "205", + "206", + "207", + "300", + "301", + "302", + "303", + "304", + "305", + "306", + "307", + "400", + "401", + "402", + "403", + "404", + "405", + "406", + "407", + "408", + "409", + "410", + "411", + "412", + "413", + "414", + "415", + "416", + "417", + "422", + "423", + "424", + "500", + "501", + "502", + "503", + "504", + "505", + "507", + "510" + ] + } + }, + "httpMethods": { + "description": "Specifies whether request logging is dependent on the HTTP methods", + "type": "array", + "items": { + "type": "string", + "enum": [ + "ACL", + "BDELETE", + "BMOVE", + "BPROPFIND", + "BPROPPATCH", + "CHECKIN", + "CHECKOUT", + "CONNECT", + "COPY", + "DELETE", + "GET", + "HEAD", + "LINK", + "LOCK", + "MERGE", + "MKCOL", + "MKWORKSPACE", + "MOVE", + "NOTIFY", + "OPTIONS", + "PATCH", + "POLL", + "POST", + "PROPFIND", + "PROPPATCH", + "PUT", + "REPORT", + "RPC_IN_DATA", + "RPC_OUT_DATA", + "SEARCH", + "SUBSCRIBE", + "TRACE", + "TRACK", + "UNLINK", + "UNLOCK", + "UNSUBSCRIBE", + "VERSION_CONTROL", + "X-MS-ENUMATTS" + ] + } + }, + "requestContains": { + "description": "Specifies whether the request logging is dependent on s specific string and where to look for that string", + "type": "object", + "properties": { + "searchIn": { + "description": "Where to look for the specified string", + "type": "string", + "enum": [ + "search-in-headers", + "search-in-post-data", + "search-in-query-string", + "search-in-request", + "search-in-uri" + ] + }, + "value": { + "description": "The specified string to look for", + "type": "string", + "minLength": 1 + } + }, + "required": [ + "searchIn", + "value" + ], + "additionalProperties": false + }, + "loginResults": { + "description": "Specifies whether the request logging is dependent on the login results", + "type": "array", + "items": { + "type": "string", + "enum": [ + "login-result-successful", + "login-result-failed", + "login-result-unknown" + ] + } + } + }, + "default": {}, + "additionalProperties": false + }, + "storageFormat": { + "description": "Specifies a storage format", + "anyOf": [ + { + "description": "Specifies a user string", + "type": "string", + "minLength": 1 + }, + { + "type": "object", + "properties": { + "fields": { + "description": "Replaces a set of fields when predefined storage format. Order is important - the server will display the selected items in the log sequentially according to this", + "type": "array", + "items": { + "type": "string", + "enum": [ + "attack_type", + "avr_id", + "blocking_exception_reason", + "captcha_result", + "client_type", + "date_time", + "dest_ip", + "dest_port", + "device_id", + "fragment", + "geo_location", + "headers", + "http_class_name", + "ip_address_intelligence", + "ip_client", + "ip_with_route_domain", + "is_truncated", + "logic_result", + "management_ip_address", + "management_ip_address_2", + "method", + "mobile_application_name", + "mobile_application_version", + "password", + "policy_apply_date", + "policy_name", + "protocol", + "query_string", + "request", + "request_status", + "response", + "response_code", + "route_domain", + "salt", + "session_id", + "severity", + "sig_ids", + "sig_names", + "sig_set_names", + "slot_number", + "src_port", + "staged_sig_names", + "staged_sig_set_names", + "staged_threat_campaign_names", + "sub_violations", + "support_id", + "threat_campaign_names", + "unit_hostname", + "uri", + "username", + "violation_details", + "violation_rating", + "violations", + "virus_name", + "websocket_direction", + "websocket_message_type", + "x_forwarded_for_header_value" + ] + } + }, + "delimiter": { + "description": "Specifies a delimiter when predefined storage format", + "type": "string", + "default": ",", + "minLength": 1 + } + }, + "required": [ + "fields" + ], + "additionalProperties": false + } + ] + }, + "guaranteeLoggingEnabled": { + "description": "Indicates whether to guarantee local logging", + "type": "boolean", + "default": false + }, + "guaranteeResponseLoggingEnabled": { + "description": "Indicates whether to guarantee local response logging. guaranteeLoggingEnabled must be true and responseLogging must be illegal or all", + "type": "boolean", + "default": false + }, + "localStorage": { + "description": "Enables or disabled local storage", + "type": "boolean", + "default": true + }, + "maxEntryLength": { + "description": "Specifies the maximum entry length", + "type": "string", + "enum": [ + "1k", + "2k", + "10k", + "64k" + ], + "default": "2k" + }, + "maxHeaderSize": { + "description": "Specifies the maximum headers size", + "type": "integer", + "minimum": 1, + "maximum": 2048 + }, + "maxQuerySize": { + "description": "Specifies the maximum query string size", + "type": "integer", + "minimum": 1, + "maximum": 2048 + }, + "maxRequestSize": { + "description": "Specifies the maximum request size", + "type": "integer", + "minimum": 1, + "maximum": 2048 + }, + "protocol": { + "description": "Specifies the protocol supported by the remote server", + "type": "string", + "enum": [ + "udp", + "tcp", + "tcp-rfc3195" + ], + "default": "tcp" + }, + "remoteStorage": { + "description": "Specifies a remote storage type", + "type": "string", + "enum": [ + "remote", + "splunk", + "arcsight", + "bigiq" + ] + }, + "reportAnomaliesEnabled": { + "description": "Indicates whether to report detected anomalies", + "type": "boolean", + "default": false + }, + "responseLogging": { + "description": "Specifies a response logging type", + "type": "string", + "enum": [ + "none", + "illegal", + "all" + ], + "default": "none" + }, + "servers": { + "description": "Adds, deletes, or replaces a set of remote servers", + "type": "array", + "items": { + "type": "object", + "properties": { + "address": { + "description": "The IP address", + "type": "string" + }, + "port": { + "description": "The service port", + "type": "string" + } + }, + "required": [ + "address", + "port" + ], + "additionalProperties": false + } + } + }, + "additionalProperties": false + }, + "Security_Log_Profile_Bot_Defense": { + "title": "Bot Defense Log Profile", + "description": "Specifies, when enabled, the system logs events from the Proactive Bot Defense mechanism.", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "asm" + ] + }, + "properties": { + "localPublisher": { + "description": "Specifies, when enabled, a Log Publisher to log events to (Note: This publisher should have a single local-database destination)", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Log_Publisher" + } + ] + }, + "remotePublisher": { + "description": "Enables selecting a Log Publisher that has Splunk enabled", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Log_Publisher" + } + ] + }, + "logBotSignatureMatchedRequests": { + "description": "This option enables or disables the logging of reported bot signature requests", + "type": "boolean", + "default": false + }, + "logCaptchaChallengedRequests": { + "description": "This option enables or disables the logging of captcha challenged requests", + "type": "boolean", + "default": false + }, + "logChallengedRequests": { + "description": "This option enables or disables the logging of challenged requests", + "type": "boolean", + "default": false + }, + "logIllegalRequests": { + "description": "This option enables or disables the logging of illegal requests", + "type": "boolean", + "default": true + }, + "logLegalRequests": { + "description": "This option enables or disables the logging of legal requests", + "type": "boolean", + "default": false + }, + "logAlarm": { + "description": "This option enables or disables the logging of requests with alarm mitigation. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": false + }, + "logBlock": { + "description": "This option enables or disables the logging of requests with block mitigation. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": false + }, + "logBrowser": { + "description": "This option enables or disables the logging of requests with browser classification. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": false + }, + "logBrowserVerificationAction": { + "description": "This option enables or disables the logging of requests by browser verification action. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": false + }, + "logCaptcha": { + "description": "This option enables or disables the logging of requests with captcha mitigation. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": false + }, + "logDeviceIdCollectionRequest": { + "description": "This option enables or disables the logging of requests by device ID collection. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": false + }, + "logMaliciousBot": { + "description": "This option enables or disables the logging of requests with malicious bot classification. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": false + }, + "logMobileApplication": { + "description": "This option enables or disables the logging of requests with mobile application classification. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": false + }, + "logNone": { + "description": "This option enables or disables the logging of requests with no mitigation. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": false + }, + "logRateLimit": { + "description": "This option enables or disables the logging of requests with rate limit mitigation. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": false + }, + "logSuspiciousBrowser": { + "description": "This option enables or disables the logging of requests with suspicious browser classification. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": false + }, + "logTcpReset": { + "description": "This option enables or disables the logging of requests with TCP reset mitigation. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": false + }, + "logTrustedBot": { + "description": "This option enables or disables the logging of requests with trusted bot classification. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": false + }, + "logUnknown": { + "description": "This option enables or disables the logging of requests with unknown classification. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": true + }, + "logUntrustedBot": { + "description": "This option enables or disables the logging of requests with untrusted bot classification. This property is available on BIGIP 14.1 and above.", + "type": "boolean", + "default": false + }, + "logHoneyPotPage": { + "description": "This option enables or disables the logging of requests with honey pot page mitigation. This property is available on BIGIP 15.0 and above.", + "type": "boolean", + "default": false + }, + "logRedirectToPool": { + "description": "This option enables or disables the logging of requests with redirect to pool mitigation. This property is available on BIGIP 15.0 and above.", + "type": "boolean", + "default": false + }, + "logChallengeFailureRequest": { + "description": "This option enables or disables the logging of requests by challenge failure. This property is available on BIGIP 15.0 and above.", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "Security_Log_Profile_Classification": { + "title": "Classification Log Profile", + "description": "Specifies, when enabled, that the system logs events from the Classification engine.", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm" + ] + }, + "properties": { + "publisher": { + "description": "Specifies where the system sends log messages", + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to log publisher declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Log_Publisher" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP log publisher", + "description": "Pathname of existing BIG-IP log publisher", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys log-config publisher" + ] + } + }, + "logAllMatches": { + "description": "This option enables or disables the logging of all matches", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "Security_Log_Profile_Dos_Application": { + "title": "DoS Application Log Profile", + "description": "Specifies, when enabled, that the system logs detected application DoS attacks", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "asm" + ] + }, + "properties": { + "localPublisher": { + "description": "Specifies the local log publisher used for Application DoS attacks (Note: This publisher should have a single local-database destination)", + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to log publisher declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Log_Publisher" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP log publisher", + "description": "Pathname of existing BIG-IP log publisher", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys log-config publisher" + ] + } + }, + "remotePublisher": { + "description": "Specifies the remote log publisher used for Application DoS attacks (Note: This publisher should have ArcSight or Splunk destinations)", + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to log publisher declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Log_Publisher" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP log publisher", + "description": "Pathname of existing BIG-IP log publisher", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys log-config publisher" + ] + } + } + }, + "additionalProperties": false + }, + "Security_Log_Profile_Dos_Network": { + "title": "DoS Network Log Profile", + "description": "Specifies, when enabled, that the system logs detected network DoS attacks", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm", + "dos", + "em" + ] + }, + "properties": { + "publisher": { + "description": "Specifies the name of the log publisher used for logging Network DoS events", + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to log publisher declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Log_Publisher" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP log publisher", + "description": "Pathname of existing BIG-IP log publisher", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys log-config publisher" + ] + } + } + }, + "additionalProperties": false + }, + "Security_Log_Profile_Nat": { + "title": "Network Address Translation Log Profile", + "description": "Specifies, when enabled, that the system logs Firewall NAT events", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm" + ] + }, + "properties": { + "publisher": { + "description": "Specifies the name of the log publisher used for logging Network Address Translation events", + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to log publisher declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Log_Publisher" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP log publisher", + "description": "Pathname of existing BIG-IP log publisher", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys log-config publisher" + ] + } + }, + "logErrors": { + "description": "Generates event log entries when a NAT translation errors occur", + "type": "boolean", + "default": false + }, + "logSubscriberId": { + "description": "Logs the subscriber ID associated with a subscriber IP address", + "type": "boolean", + "default": false + }, + "logQuotaExceeded": { + "description": "Generates event log entries when a NAT client exceeds allocated resources", + "type": "boolean", + "default": false + }, + "logStartInboundSession": { + "description": "Generates event log entries at the start of the incoming connection event for a translated endpoint. Triggered when the system creates the inbound session.", + "type": "boolean", + "default": false + }, + "logEndInboundSession": { + "description": "Generates event log entries at the end of the incoming connection event for a translated endpoint. Triggered when the system frees the inbound session.", + "type": "boolean", + "default": false + }, + "logStartOutboundSession": { + "description": "Generates event log entries at start of the translation event for a NAT client. Triggered when the system creates the outbound session.", + "type": "boolean", + "default": false + }, + "logStartOutboundSessionDestination": { + "description": "Include destination address and port with log entry for the start of the translation event for a NAT client. This is applicable only if lsn-legacy-mode is enabled", + "type": "boolean", + "default": false + }, + "logEndOutboundSession": { + "description": "Generates event log entries at end of translation event for a NAT client. Triggered when the system frees the outbound session.", + "type": "boolean", + "default": false + }, + "logEndOutboundSessionDestination": { + "description": "Include destination address and port with log entry for the end of the translation event for a NAT client. This is applicable only if lsn-legacy-mode is enabled", + "type": "boolean", + "default": false + }, + "lsnLegacyMode": { + "description": "This option specifies whether translation events (and other NAT events) are logged in existing CGNAT/LSN formats (for backward compatibility with LSN events).", + "type": "boolean", + "default": false + }, + "rateLimitAggregate": { + "description": " This option sets the aggregate rate for all the Firewall NAT log events that the system can log per second", + "type": "integer", + "default": 4294967295 + }, + "rateLimitErrors": { + "description": "This option rate limits the errors the system logs per second", + "type": "integer", + "default": 4294967295 + }, + "rateLimitQuotaExceeded": { + "description": "This option rate limits the quota exceeded log events per second", + "type": "integer", + "default": 4294967295 + }, + "rateLimitStartInboundSession": { + "description": "This option rate limits the start inbound session log events per second", + "type": "integer", + "default": 4294967295 + }, + "rateLimitEndInboundSession": { + "description": "This option rate limits the end inbound session log events per second", + "type": "integer", + "default": 4294967295 + }, + "rateLimitStartOutboundSession": { + "description": "This option rate limits the start outbound session log events per second", + "type": "integer", + "default": 4294967295 + }, + "rateLimitEndOutboundSession": { + "description": "This option rate limits the end outbound session log events per second", + "type": "integer", + "default": 4294967295 + }, + "formatErrors": { + "$ref": "#/definitions/Security_Log_Profile_Nat_Storage_Format" + }, + "formatQuotaExceeded": { + "$ref": "#/definitions/Security_Log_Profile_Nat_Storage_Format" + }, + "formatStartInboundSession": { + "$ref": "#/definitions/Security_Log_Profile_Nat_Storage_Format" + }, + "formatEndInboundSession": { + "$ref": "#/definitions/Security_Log_Profile_Nat_Storage_Format" + }, + "formatStartOutboundSession": { + "$ref": "#/definitions/Security_Log_Profile_Nat_Storage_Format" + }, + "formatEndOutboundSession": { + "$ref": "#/definitions/Security_Log_Profile_Nat_Storage_Format" + } + }, + "required": [ + "publisher" + ], + "additionalProperties": false, + "dependencies": { + "logStartOutboundSessionDestination": { + "if": { + "properties": { + "logStartOutboundSessionDestination": { + "const": true + } + } + }, + "then": { + "properties": { + "logStartOutboundSession": { + "const": true + } + } + } + }, + "logEndOutboundSessionDestination": { + "if": { + "properties": { + "logEndOutboundSessionDestination": { + "const": true + } + } + }, + "then": { + "properties": { + "logEndOutboundSession": { + "const": true + } + } + } + } + } + }, + "Security_Log_Profile_Nat_Storage_Format": { + "description": "Specifies the format type for log messages", + "anyOf": [ + { + "type": "string", + "minLength": 1 + }, + { + "type": "object", + "properties": { + "fields": { + "description": "Replaces a set of fields in the predefined storage format", + "type": "array", + "items": { + "type": "string", + "enum": [ + "context-name", + "duration", + "route-domain", + "sub-id", + "translated-dest-port", + "translated-src-port", + "dest-ip", + "event-name", + "src-ip", + "timestamp", + "translated-route-domain", + "dest-port", + "protocol", + "src-port", + "translated-dest-ip", + "translated-src-ip" + ] + } + }, + "delimiter": { + "description": "Specifies a field delimiter in the predefined storage format", + "type": "string", + "default": "." + } + }, + "required": [ + "fields" + ], + "additionalProperties": false + } + ] + }, + "Security_Log_Profile_Network": { + "title": "Network Log Profile", + "description": "Specifies, when enabled, that the system logs ACL rule matches, TCP events, and/or TCP/IP errors sent to the network firewall", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm", + "em" + ] + }, + "properties": { + "publisher": { + "description": "Specifies the name of the log publisher used for logging Network events", + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to log publisher declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Log_Publisher" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP log publisher", + "description": "Pathname of existing BIG-IP log publisher", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys log-config publisher" + ] + } + }, + "logRuleMatchAccepts": { + "description": "Specifies, when enabled, that the system logs packets that match ACL rules configured with action = Accept", + "type": "boolean", + "default": false + }, + "logRuleMatchDrops": { + "description": "Specifies, when enabled, that the system logs packets that match ACL rules configured with action = Drop", + "type": "boolean", + "default": false + }, + "logRuleMatchRejects": { + "description": "Specifies, when enabled, that the system logs packets that match ACL rules configured with action = Reject", + "type": "boolean", + "default": false + }, + "logIpErrors": { + "description": "Specifies, when enabled, that the system logs IP error packets", + "type": "boolean", + "default": false + }, + "logTcpErrors": { + "description": "Specifies, when enabled, that the system logs TCP error packets", + "type": "boolean", + "default": false + }, + "logTcpEvents": { + "description": "Specifies, when enabled, that the system logs TCP events (open and close of TCP sessions)", + "type": "boolean", + "default": false + }, + "logTranslationFields": { + "description": "Specifies, when enabled, that the system logs translation values if and when it logs a network firewall event", + "type": "boolean", + "default": false + }, + "alwaysLogRegion": { + "description": "Specifies, when enabled, that when a geolocation event causes a network firewall event, the system logs the associated IP address", + "type": "boolean", + "default": false + }, + "rateLimitRuleMatchAccepts": { + "description": "This option sets rate limits for the logging of packets that match ACL rules configured with action = Accept or action = Accept Decisively", + "type": "integer", + "default": 4294967295 + }, + "rateLimitRuleMatchDrops": { + "description": "This option sets rate limits for the logging of packets that match ACL rules configured with action = Accept or action = Accept Decisively", + "type": "integer", + "default": 4294967295 + }, + "rateLimitRuleMatchRejects": { + "description": "This option sets rate limits for the logging of packets that match ACL rules configured with action = Reject", + "type": "integer", + "default": 4294967295 + }, + "rateLimitIpErrors": { + "description": "This option enables or disables the logging of IP error packets", + "type": "integer", + "default": 4294967295 + }, + "rateLimitTcpErrors": { + "description": "This option sets rate limits for the logging of TCP error packets", + "type": "integer", + "default": 4294967295 + }, + "rateLimitTcpEvents": { + "description": "This option sets rate limits for the logging of TCP events on client side", + "type": "integer", + "default": 4294967295 + }, + "rateLimitAggregate": { + "description": "This option sets the aggregate rate limit that applies to any network logging message", + "type": "integer", + "default": 4294967295 + }, + "storageFormat": { + "description": "Specifies the format type for log messages. If it is a string it is user-defined", + "anyOf": [ + { + "description": "Use this for user-defined storage format", + "type": "string", + "minLength": 1 + }, + { + "type": "object", + "properties": { + "fields": { + "description": "Replaces a set of fields in the predefined storage format", + "type": "array", + "items": { + "type": "string", + "enum": [ + "acl-policy-name", + "acl-policy-type", + "acl-rule-name", + "action", + "bigip-hostname", + "context-name", + "context-type", + "date-time", + "dest-ip", + "dest-port", + "drop-reason", + "management-ip-address", + "protocol", + "route-domain", + "sa-translation-pool", + "sa-translation-type", + "src-ip", + "src-port", + "translated-dest-ip", + "translated-dest-port", + "translated-ip-protocol", + "translated-route-domain", + "translated-src-ip", + "translated-src-port", + "translated-vlan", + "vlan" + ] + } + }, + "delimiter": { + "description": "Specifies a field delimiter in the predefined storage format", + "type": "string", + "default": "." + } + }, + "required": [ + "fields" + ], + "additionalProperties": false + } + ] + } + }, + "additionalProperties": false + }, + "Security_Log_Profile_Ip_Intelligence": { + "title": "IP Intelligence Log Profile", + "description": "Specifies, when enabled, that the system logs IP Intelligence events", + "type": "object", + "properties": { + "publisher": { + "description": "Specifies the name of the log publisher used for logging IP Intelligence events", + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to log publisher declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Log_Publisher" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP log publisher", + "description": "Pathname of existing BIG-IP log publisher", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys log-config publisher" + ] + } + }, + "logTranslationFields": { + "description": "Specifies, when enabled, that the system logs translation values if and when it logs a network firewall event", + "type": "boolean", + "default": false + }, + "rateLimitAggregate": { + "description": "Defines a rate limit for all combined IP intelligence log messages per second", + "type": "integer", + "default": 4294967295 + } + }, + "additionalProperties": false + }, + "Security_Log_Profile_Protocol_Dns": { + "title": "Protocol DNS Log Profile", + "description": "Specifies, when enabled, that the system logs DNS security events", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm", + "em" + ] + }, + "properties": { + "publisher": { + "description": "Specifies the name of the log publisher used for logging DNS security events", + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to log publisher declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Log_Publisher" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP log publisher", + "description": "Pathname of existing BIG-IP log publisher", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys log-config publisher" + ] + } + }, + "logDroppedRequests": { + "description": "Specifies, when enabled, that the system logs dropped DNS requests", + "type": "boolean", + "default": false + }, + "logFilteredDroppedRequests": { + "description": "Specifies, when enabled, that the system logs DNS requests dropped due to DNS query/header-opcode filtering. The system does not log DNS requests dropped due to errors in the way the system processes DNS packets.", + "type": "boolean", + "default": false + }, + "logMalformedRequests": { + "description": "Specifies, when enabled, that the system logs malformed DNS requests", + "type": "boolean", + "default": false + }, + "logRejectedRequests": { + "description": "Specifies, when enabled, that the system logs rejected DNS requests", + "type": "boolean", + "default": false + }, + "logMaliciousRequests": { + "description": "Specifies, when enabled, that the system logs malicious DNS requests", + "type": "boolean", + "default": false + }, + "storageFormat": { + "description": "Specifies the format type for log messages", + "anyOf": [ + { + "type": "string", + "minLength": 1 + }, + { + "type": "object", + "properties": { + "fields": { + "description": "Replaces a set of fields in the predefined storage format", + "type": "array", + "items": { + "type": "string", + "enum": [ + "action", + "attack-type", + "context-name", + "date-time", + "dest-ip", + "dest-port", + "dns-query-name", + "dns-query-type", + "src-ip", + "src-port", + "vlan", + "route-domain" + ] + } + }, + "delimiter": { + "description": "Specifies a field delimiter in the predefined storage format", + "type": "string", + "default": "." + } + }, + "required": [ + "fields" + ], + "additionalProperties": false + } + ] + } + }, + "additionalProperties": false + }, + "Security_Log_Profile_Protocol_Sip_Dos": { + "title": "Protocol SIP DoS Log Profile", + "description": "Specifies, when enabled, that the system logs detected SIP DoS attacks", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm", + "em" + ] + }, + "properties": { + "publisher": { + "description": "Specifies the name of the log publisher used for logging SIP DoS events", + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to log publisher declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Log_Publisher" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP log publisher", + "description": "Pathname of existing BIG-IP log publisher", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys log-config publisher" + ] + } + } + }, + "additionalProperties": false + }, + "Security_Log_Profile_Protocol_Sip": { + "title": "Protocol SIP Log Profile", + "description": "Specifies, when enabled, that the system logs SIP protocol security events", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm", + "em" + ] + }, + "properties": { + "publisher": { + "description": "Specifies the name of the log publisher used for logging SIP protocol security events", + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to log publisher declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Log_Publisher" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP log publisher", + "description": "Pathname of existing BIG-IP log publisher", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys log-config publisher" + ] + } + }, + "logDroppedRequests": { + "description": "Specifies, when enabled, that the system logs dropped requests", + "type": "boolean", + "default": false + }, + "logGlobalFailures": { + "description": "Specifies, when enabled, that the system logs global failures", + "type": "boolean", + "default": false + }, + "logMalformedRequests": { + "description": "Specifies, when enabled, that the system logs malformed requests", + "type": "boolean", + "default": false + }, + "logRedirectedResponses": { + "description": "Specifies, when enabled, that the system logs redirection responses", + "type": "boolean", + "default": false + }, + "logRequestFailures": { + "description": "Specifies, when enabled, that the system logs request failures", + "type": "boolean", + "default": false + }, + "logServerErrors": { + "description": "Specifies, when enabled, that the system logs server errors", + "type": "boolean", + "default": false + }, + "storageFormat": { + "description": "Specifies the format type for log messages", + "anyOf": [ + { + "type": "string", + "minLength": 1 + }, + { + "type": "object", + "properties": { + "fields": { + "description": "Replaces a set of fields in the predefined storage format", + "type": "array", + "items": { + "type": "string", + "enum": [ + "action", + "context-name", + "date-time", + "dest-ip", + "dest-port", + "sip-method-type", + "sip-caller", + "sip-callee", + "src-ip", + "src-port", + "vlan", + "route-domain" + ] + } + }, + "delimiter": { + "description": "Specifies a field delimiter in the predefined storage format", + "type": "string", + "default": "." + } + }, + "required": [ + "fields" + ], + "additionalProperties": false + } + ] + } + }, + "additionalProperties": false + }, + "Security_Log_Profile_Protocol_Dns_Dos": { + "title": "Protocol DNS DoS Log Profile", + "description": "Specifies, when enabled, that the system logs detected DNS DoS attacks", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm", + "em" + ] + }, + "properties": { + "publisher": { + "description": "Specifies the name of the log publisher used for logging DNS DoS events", + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to log publisher declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Log_Publisher" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP log publisher", + "description": "Pathname of existing BIG-IP log publisher", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys log-config publisher" + ] + } + } + }, + "additionalProperties": false + }, + "Security_Log_Profile_Protocol_Inspection": { + "title": "Protocol Inspection Log Profile", + "description": "Specifies, when enabled, that the system logs events from the Protocol Inspection engine", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm", + "em" + ] + }, + "properties": { + "publisher": { + "$ref": "#/definitions/Pointer_Log_Publisher" + }, + "logPacketPayloadEnabled": { + "description": "Enable logging of the packet payload for Protocol Inspection events", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "Security_Log_Profile_Protocol_Transfer": { + "title": "Protocol Transfer Log Profile", + "description": "Specifies, when enabled, that the system logs HTTP, FTP, and SMTP protocol security events", + "type": "object", + "properties": { + "publisher": { + "description": "Specifies where the system sends log messages", + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to log publisher declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Log_Publisher" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP log publisher", + "description": "Pathname of existing BIG-IP log publisher", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys log-config publisher" + ] + } + } + }, + "additionalProperties": false + }, + "Security_Log_Profile_Ssh_Proxy": { + "title": "SSH Proxy Security Log Profile", + "description": "Specifies, when enabled, that the system logs SSH Proxy events", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "afm", + "em" + ] + }, + "properties": { + "publisher": { + "description": "Specifies the name of the log publisher used for logging SSH Proxy events", + "type": "object", + "properties": { + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to log publisher declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Log_Publisher" + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "title": "BIG-IP log publisher", + "description": "Pathname of existing BIG-IP log publisher", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys log-config publisher" + ] + } + }, + "logClientAuthFail": { + "description": "Specifies the name of the log publisher used for logging SSH Proxy events", + "type": "boolean", + "default": false + }, + "logClientAuthSuccess": { + "description": "Specifies, when enabled, that the system logs client auth success events", + "type": "boolean", + "default": false + }, + "logClientAuthPartial": { + "description": "Specifies, when enabled, that the system logs client auth partial events", + "type": "boolean", + "default": false + }, + "logServerAuthFail": { + "description": "Specifies, when enabled, that the system logs server auth failure events", + "type": "boolean", + "default": false + }, + "logServerAuthSuccess": { + "description": "Specifies, when enabled, that the system logs server auth failure events", + "type": "boolean", + "default": false + }, + "logServerAuthPartial": { + "description": "Specifies, when enabled, that the system logs server auth partial events", + "type": "boolean", + "default": false + }, + "logDisallowedChannelAction": { + "description": "Specifies, when enabled, that the system logs disallowed channel actions", + "type": "boolean", + "default": false + }, + "logAllowedChannelAction": { + "description": "Specifies, when enabled, that the system logs allowed channel actions", + "type": "boolean", + "default": false + }, + "logSshTimeout": { + "description": "Specifies, when enabled, that the system logs SSH timeouts", + "type": "boolean", + "default": false + }, + "logNonSshTraffic": { + "description": "Specifies, when enabled, that the system logs non-SSH traffic events", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "Traffic_Log_Profile": { + "title": "Traffic_Log_Profile", + "description": "A traffic log profile", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Traffic_Log_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "parentProfile": { + "description": "Specifies the name of the object to inherit the settings from", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Traffic_Log_Profile" + } + ], + "default": { + "bigip": "/Common/request-log" + } + }, + "requestSettings": { + "description": "The request settings for the profile", + "allOf": [ + { + "$ref": "#/definitions/Traffic_Log_Profile_Request_Settings" + } + ], + "default": {} + }, + "responseSettings": { + "description": "The response settings for the profile", + "allOf": [ + { + "$ref": "#/definitions/Traffic_Log_Profile_Response_Settings" + } + ], + "default": {} + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "Traffic_Log_Profile_Response_Settings": { + "description": "A traffic log profiles response settings", + "type": "object", + "properties": { + "byDefaultEnabled": { + "description": "Default response action and if response logging can be overridden by iRule", + "type": "boolean", + "default": true + }, + "responseErrorLoggingEnabled": { + "description": "Enable secondary logging if insufficient bandwidth for primary. Best used to send an alert to a separate destination", + "type": "boolean", + "default": false + }, + "responseErrorPool": { + "description": "Specifies the name of the pool from which to select log servers", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Pool" + } + ] + }, + "responseErrorProtocol": { + "description": "Specifies the HighSpeedLogging protocol to use when logging", + "type": "string", + "enum": [ + "mds-tcp", + "mds-udp" + ], + "default": "mds-udp" + }, + "responseErrorTemplate": { + "description": "Template to use when generating log messages", + "type": "string" + }, + "responsePool": { + "description": "Specifies the name of the pool from which to select log servers", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Pool" + } + ] + }, + "responseProtocol": { + "description": "Specifies the HighSpeedLogging protocol to use when logging", + "type": "string", + "enum": [ + "mds-tcp", + "mds-udp" + ], + "default": "mds-udp" + }, + "responseTemplate": { + "description": "Template to use when generating log messages", + "type": "string" + }, + "responseEnabled": { + "description": "Enables or disables logging before the response is returned to the client", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "Traffic_Log_Profile_Request_Settings": { + "description": "A traffic log profiles request settings", + "type": "object", + "properties": { + "requestErrorLoggingEnabled": { + "description": "Enable secondary logging if insufficient bandwidth for primary. Best used to send an alert to a separate destination", + "type": "boolean", + "default": false + }, + "proxyCloseOnErrorEnabled": { + "description": "Specifies, if enabled, that the logging profile will close the connection after sending its proxy-response", + "type": "boolean", + "default": false + }, + "proxyRespondOnLoggingErrorEnabled": { + "description": "Specifies that the logging profile respond directly if the logging fails", + "type": "boolean", + "default": false + }, + "proxyResponse": { + "description": "Specifies the response to send on logging errors", + "type": "string" + }, + "requestErrorPool": { + "description": "Specifies the name of the pool from which to select log servers", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Pool" + } + ] + }, + "requestErrorProtocol": { + "description": "Specifies the HighSpeedLogging protocol to use when logging", + "type": "string", + "enum": [ + "mds-tcp", + "mds-udp" + ], + "default": "mds-udp" + }, + "requestErrorTemplate": { + "description": "Template to use when generating log messages", + "type": "string" + }, + "requestPool": { + "description": "Specifies the name of the pool from which to select log servers", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Pool" + } + ] + }, + "requestProtocol": { + "description": "Specifies the HighSpeedLogging protocol to use when logging", + "type": "string", + "enum": [ + "mds-tcp", + "mds-udp" + ], + "default": "mds-udp" + }, + "requestTemplate": { + "description": "Template to use when generating log messages", + "type": "string" + }, + "requestEnabled": { + "description": "Enables or disables logging before the response is returned to the client", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false + }, + "Endpoint_Policy_Rule": { + "title": "Rule", + "description": "A rule for an Endpoint policy that describes actions to perform on traffic matching given conditions", + "type": "object", + "properties": { + "name": { + "title": "Name", + "description": "Name of the endpoint policy rule", + "type": "string", + "pattern": "^[a-zA-Z0-9_\\-.:%]+$", + "maxLength": 64000 + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "conditions": { + "title": "Conditions", + "description": "Specifies the conditions for the rule to apply", + "type": "array", + "items": { + "$ref": "#/definitions/Policy_Condition" + }, + "default": [] + }, + "actions": { + "title": "Actions", + "description": "Specifies the actions for the rule to execute", + "type": "array", + "items": { + "$ref": "#/definitions/Policy_Action" + }, + "default": [] + } + }, + "additionalProperties": false, + "required": [ + "name" + ] + }, + "Endpoint_Policy": { + "title": "Endpoint_Policy", + "description": "Policy to manage connections based on metadata and content", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Endpoint_Policy" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "rules": { + "title": "Rules", + "description": "List of policy rules, order is significant", + "type": "array", + "items": { + "$ref": "#/definitions/Endpoint_Policy_Rule" + } + }, + "strategy": { + "title": "Strategy", + "description": "Rule-matching strategy; value 'custom' means BIG-IP AS3 requires a custom strategy (default is best-match)", + "type": "string", + "enum": [ + "all-match", + "best-match", + "first-match", + "custom" + ], + "default": "best-match" + }, + "customStrategy": { + "title": "Custom strategy", + "description": "BIG-IP AS3 pointer to custom strategy declaration", + "if": { + "type": "string" + }, + "then": { + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Endpoint_Strategy" + } + }, + "required": [ + "class" + ] + } + } + }, + "else": { + "type": "object", + "properties": { + "bigip": { + "title": "BIG-IP LTM strategy", + "description": "Pathname of existing BIG-IP LTM strategy", + "type": "string", + "format": "f5bigip" + } + }, + "required": [ + "bigip" + ], + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm policy-strategy" + ] + } + } + } + }, + "additionalProperties": false, + "dependencies": { + "strategy": { + "if": { + "properties": { + "strategy": { + "const": "custom" + } + } + }, + "then": { + "required": [ + "customStrategy" + ] + } + } + }, + "required": [ + "class" + ] + }, + "Endpoint_Strategy": { + "title": "Endpoint_Strategy", + "description": "Strategy for evaluation of an Endpoint policy", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Endpoint_Strategy" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "matchMethod": { + "title": "Match method", + "description": "Specifies the match method", + "type": "string", + "enum": [ + "all-match", + "best-match", + "first-match" + ] + }, + "operands": { + "title": "Operands", + "description": "Specifies the attribute for the rule to match. Sometimes this represents a specific value (for example, http-method or http-status), but frequently the operand needs a specific Selector to identify an instance (for example, http-header needs a Selectorname parameter).", + "type": "array", + "items": { + "title": "Operand", + "type": "string" + } + } + }, + "additionalProperties": false, + "required": [ + "class", + "matchMethod" + ] + }, + "Policy_Action": { + "type": "object", + "description": "LTM policy action", + "properties": { + "type": { + "description": "Selects the LTM policy action this object describes", + "type": "string", + "enum": [ + "http", + "httpCookie", + "httpHeader", + "httpRedirect", + "httpUri", + "botDefense", + "waf", + "forward", + "drop", + "clientSsl", + "persist", + "tcl", + "log" + ] + } + }, + "allOf": [ + { + "if": { + "properties": { + "type": { + "const": "http" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Action_HTTP" + } + }, + { + "if": { + "properties": { + "type": { + "const": "waf" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Action_WAF" + } + }, + { + "if": { + "properties": { + "type": { + "const": "botDefense" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Action_Bot_Defense" + } + }, + { + "if": { + "properties": { + "type": { + "const": "forward" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Action_Forward" + } + }, + { + "if": { + "properties": { + "type": { + "const": "drop" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Action_Drop" + } + }, + { + "if": { + "properties": { + "type": { + "const": "httpRedirect" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Action_HTTP_Redirect" + } + }, + { + "if": { + "properties": { + "type": { + "const": "httpHeader" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Action_HTTP_Header" + } + }, + { + "if": { + "properties": { + "type": { + "const": "httpUri" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Action_HTTP_URI" + } + }, + { + "if": { + "properties": { + "type": { + "const": "httpCookie" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Action_HTTP_Cookie" + } + }, + { + "if": { + "properties": { + "type": { + "const": "clientSsl" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Action_Client_SSL" + } + }, + { + "if": { + "properties": { + "type": { + "const": "persist" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Action_Persist" + } + }, + { + "if": { + "properties": { + "type": { + "const": "tcl" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Action_TCL" + } + }, + { + "if": { + "properties": { + "type": { + "const": "log" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Action_Log" + } + } + ], + "required": [ + "type" + ] + }, + "Policy_Action_HTTP": { + "type": "object", + "description": "Provides the ability to enable or disable BIG-IP's HTTP filter processing", + "properties": { + "event": { + "type": "string", + "description": "When to run this event in the request-response cycle", + "enum": [ + "client-accepted", + "proxy-request", + "request", + "response", + "server-connected" + ], + "default": "request" + }, + "enabled": { + "description": "Enable BIG-IP's HTTP filter processing", + "type": "boolean", + "default": true + } + }, + "required": [] + }, + "Policy_Action_WAF": { + "type": "object", + "description": "Control web security", + "properties": { + "event": { + "type": "string", + "description": "When to run this event in the request-response cycle", + "enum": [ + "client-accepted", + "proxy-request", + "request" + ], + "default": "request" + }, + "policy": { + "$ref": "#/definitions/Pointer_WAF_Policy" + } + }, + "required": [] + }, + "Policy_Action_Bot_Defense": { + "type": "object", + "description": "Enable or disable Unified Bot Defense processing", + "properties": { + "event": { + "type": "string", + "description": "When to run this event in the request-response cycle", + "enum": [ + "client-accepted", + "proxy-request", + "request" + ], + "default": "request" + }, + "profile": { + "$ref": "#/definitions/Pointer_Bot_Defense_Profile" + } + }, + "required": [] + }, + "Policy_Action_Drop": { + "type": "object", + "description": "Reset connection", + "properties": { + "event": { + "type": "string", + "description": "When to run this event in the request-response cycle", + "enum": [ + "proxy-request", + "request", + "ssl-client-hello" + ], + "default": "ssl-client-hello" + } + } + }, + "Policy_Action_Forward_Select": { + "description": "Select appropriate location for forwarding the connection based on specified parameters", + "type": "object", + "allOf": [ + { + "oneOf": [ + { + "type": "object", + "properties": { + "pool": { + "$ref": "#/definitions/Pointer_Pool" + } + }, + "required": [ + "pool" + ] + }, + { + "type": "object", + "properties": { + "service": { + "$ref": "#/definitions/Pointer_Service" + } + }, + "required": [ + "service" + ] + } + ] + }, + { + "properties": { + "snat": { + "description": "Controls SNAT Automap", + "type": "string", + "enum": [ + "disable", + "automap" + ] + } + } + } + ] + }, + "Policy_Action_Forward": { + "description": "Controls where the system forwards a connection", + "type": "object", + "allOf": [ + { + "properties": { + "event": { + "type": "string", + "description": "When to run this event in the request-response cycle", + "enum": [ + "client-accepted", + "ssl-client-hello", + "request" + ], + "default": "ssl-client-hello" + } + } + }, + { + "oneOf": [ + { + "type": "object", + "properties": { + "select": { + "description": "Select appropriate location for forwarding the connection based on specified parameters", + "allOf": [ + { + "$ref": "#/definitions/Policy_Action_Forward_Select" + } + ] + } + }, + "required": [ + "select" + ] + } + ] + } + ] + }, + "Policy_Action_HTTP_Redirect": { + "type": "object", + "description": "Redirect an HTTP request to a different URL", + "properties": { + "event": { + "type": "string", + "description": "When to run this event in the request-response cycle", + "enum": [ + "proxy-request", + "request", + "response" + ], + "default": "proxy-request" + }, + "location": { + "description": "The new URL for which the system will send a redirect response; you can use a Tcl command substitution for this field", + "type": "string" + }, + "code": { + "description": "HTTP status code for the redirect. Note: code is only supported in TMOS version 14.0+.", + "type": "integer", + "minimum": 300, + "maximum": 399 + } + }, + "required": [ + "location" + ] + }, + "Policy_Action_HTTP_Header": { + "type": "object", + "description": "Modify HTTP header in request or response", + "allOf": [ + { + "type": "object", + "properties": { + "event": { + "type": "string", + "description": "When to run this event in the request-response cycle", + "enum": [ + "request", + "response" + ], + "default": "request" + } + } + }, + { + "oneOf": [ + { + "type": "object", + "properties": { + "replace": { + "type": "object", + "description": "Replace HTTP header in request or response", + "properties": { + "name": { + "type": "string", + "description": "Name of HTTP header" + }, + "value": { + "type": "string", + "description": "New value for HTTP header; you can use a Tcl command substitution for this field" + } + }, + "required": [ + "name", + "value" + ], + "additionalProperties": false + } + }, + "required": [ + "replace" + ] + }, + { + "type": "object", + "properties": { + "insert": { + "type": "object", + "description": "Insert HTTP header into request or response", + "properties": { + "name": { + "type": "string", + "description": "Name of HTTP header" + }, + "value": { + "type": "string", + "description": "New value for HTTP header; you can use a Tcl command substitution for this field" + } + }, + "required": [ + "name", + "value" + ], + "additionalProperties": false + } + }, + "required": [ + "insert" + ] + }, + { + "type": "object", + "properties": { + "remove": { + "type": "object", + "description": "Remove HTTP header from request or response", + "properties": { + "name": { + "type": "string", + "description": "Name of HTTP header" + } + }, + "required": [ + "name" + ], + "additionalProperties": false + } + }, + "required": [ + "remove" + ] + } + ] + } + ] + }, + "Policy_Action_HTTP_URI": { + "type": "object", + "description": "Modify the request's URI, path, or query string", + "properties": { + "event": { + "type": "string", + "description": "When to run this event in the request-response cycle", + "enum": [ + "request" + ], + "default": "request" + }, + "replace": { + "type": "object", + "description": "Replace URI, path, or query string in request", + "oneOf": [ + { + "type": "object", + "properties": { + "value": { + "type": "string", + "description": "New value for URI; you can use a Tcl command substitution for this field" + } + }, + "required": [ + "value" + ], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "path": { + "type": "string", + "description": "New value for path; you can use a Tcl command substitution for this field" + } + }, + "required": [ + "path" + ], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "queryString": { + "type": "string", + "description": "New value for query string; you can use a Tcl command substitution for this field" + } + }, + "required": [ + "queryString" + ], + "additionalProperties": false + } + ] + } + }, + "required": [ + "replace" + ] + }, + "Policy_Action_HTTP_Cookie": { + "type": "object", + "description": "Modify the request's \"Cookie:\" header", + "allOf": [ + { + "type": "object", + "properties": { + "event": { + "type": "string", + "description": "When to run this event in the request-response cycle", + "enum": [ + "request" + ], + "default": "request" + } + } + }, + { + "oneOf": [ + { + "type": "object", + "properties": { + "insert": { + "type": "object", + "description": "Insert HTTP \"Cookie:\" header into request", + "properties": { + "name": { + "type": "string", + "description": "Name of HTTP cookie" + }, + "value": { + "type": "string", + "description": "New value for HTTP cookie; you can use a Tcl command substitution for this field" + } + }, + "required": [ + "name", + "value" + ], + "additionalProperties": false + } + }, + "required": [ + "insert" + ] + }, + { + "type": "object", + "properties": { + "remove": { + "type": "object", + "description": "Remove HTTP \"Cookie:\" header from request", + "properties": { + "name": { + "type": "string", + "description": "Name of HTTP cookie" + } + }, + "required": [ + "name" + ], + "additionalProperties": false + } + }, + "required": [ + "remove" + ] + } + ] + } + ] + }, + "Policy_Action_Client_SSL": { + "type": "object", + "description": "Enable or disable encrypted connections to backend servers", + "properties": { + "event": { + "type": "string", + "description": "When to run this event in the request-response cycle", + "enum": [ + "client-accepted", + "proxy-request", + "request", + "proxy-connect", + "proxy-response", + "server-connected" + ], + "default": "client-accepted" + }, + "enabled": { + "description": "Enable encrypted connections to backend servers", + "type": "boolean", + "default": true + } + }, + "required": [] + }, + "Policy_Action_Persist": { + "type": "object", + "description": "Control over how a connection is persisted", + "allOf": [ + { + "type": "object", + "properties": { + "event": { + "type": "string", + "description": "When to run this event in the request-response cycle", + "enum": [ + "client-accepted", + "proxy-request", + "request" + ], + "default": "client-accepted" + } + } + }, + { + "oneOf": [ + { + "type": "object", + "properties": { + "disable": { + "type": "object", + "title": "Disable", + "description": "Disable persistence. When specifying set this property to an empty object (disable: {}).", + "additionalProperties": false + } + }, + "required": [ + "disable" + ] + }, + { + "type": "object", + "properties": { + "sourceAddress": { + "type": "object", + "title": "Source Address", + "description": "Persist the connection based on the source IP address", + "properties": { + "netmask": { + "title": "Network Mask", + "type": "string", + "description": "Network mask", + "format": "f5ip" + }, + "timeout": { + "title": "Timeout", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "description": "Timeout value in seconds" + } + }, + "required": [ + "netmask", + "timeout" + ], + "additionalProperties": false + } + }, + "required": [ + "sourceAddress" + ] + }, + { + "type": "object", + "properties": { + "destinationAddress": { + "type": "object", + "title": "Destination Address", + "description": "Persist the connection based on the destination IP address", + "properties": { + "netmask": { + "title": "Network Mask", + "type": "string", + "description": "Network mask", + "format": "f5ip" + }, + "timeout": { + "title": "Timeout", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "description": "Timeout value in seconds" + } + }, + "required": [ + "netmask", + "timeout" + ], + "additionalProperties": false + } + }, + "required": [ + "destinationAddress" + ] + }, + { + "type": "object", + "properties": { + "cookieInsert": { + "type": "object", + "title": "Cookie Insert", + "description": "Persist the connection using cookie insertion", + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "Name of cookie" + }, + "expiry": { + "type": "string", + "title": "Expiry", + "description": "Expiration duration expressed as [Nd][HH:MM[:SS]]" + } + }, + "required": [ + "name", + "expiry" + ], + "additionalProperties": false + } + }, + "required": [ + "cookieInsert" + ] + }, + { + "type": "object", + "properties": { + "cookieRewrite": { + "type": "object", + "title": "Cookie Rewrite", + "description": "Persist the connection using cookie rewrite", + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "Name of cookie" + }, + "expiry": { + "type": "string", + "title": "Expiry", + "description": "Expiration duration expressed as [Nd][HH:MM[:SS]]" + } + }, + "required": [ + "name", + "expiry" + ], + "additionalProperties": false + } + }, + "required": [ + "cookieRewrite" + ] + }, + { + "type": "object", + "properties": { + "cookiePassive": { + "type": "object", + "title": "Cookie Passive", + "description": "Persist the connection using cookie passive", + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "Name of cookie" + } + }, + "required": [ + "name" + ], + "additionalProperties": false + } + }, + "required": [ + "cookiePassive" + ] + }, + { + "type": "object", + "properties": { + "cookieHash": { + "type": "object", + "title": "Cookie Hash", + "description": "Persist the connection using cookie hash", + "properties": { + "name": { + "type": "string", + "title": "Name", + "description": "Name of cookie" + }, + "offset": { + "type": "integer", + "title": "Offset", + "minimum": 0, + "maximum": 65535, + "description": "Offset into hash" + }, + "length": { + "type": "integer", + "title": "Length", + "minimum": 0, + "maximum": 65535, + "description": "Substring length" + }, + "timeout": { + "title": "Timeout", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "description": "Timeout value in seconds" + } + }, + "required": [ + "name", + "offset", + "length", + "timeout" + ], + "additionalProperties": false + } + }, + "required": [ + "cookieHash" + ] + }, + { + "type": "object", + "properties": { + "universal": { + "type": "object", + "title": "Universal", + "description": "Persist the connection using a user-defined key", + "properties": { + "key": { + "type": "string", + "title": "Key", + "description": "The key to use. Tcl command substitution is allowed" + }, + "timeout": { + "title": "Timeout", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "description": "Timeout value in seconds" + } + }, + "required": [ + "key", + "timeout" + ], + "additionalProperties": false + } + }, + "required": [ + "universal" + ] + }, + { + "type": "object", + "properties": { + "hash": { + "type": "object", + "title": "Hash", + "description": "Persist the connection using the hash of a key", + "properties": { + "key": { + "type": "string", + "title": "Key", + "description": "The key to use. Tcl command substitution is allowed" + }, + "timeout": { + "title": "Timeout", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "description": "Timeout value in seconds" + } + }, + "required": [ + "key", + "timeout" + ], + "additionalProperties": false + } + }, + "required": [ + "hash" + ] + }, + { + "type": "object", + "properties": { + "carp": { + "type": "object", + "title": "Cache Array Routing Protocol (CARP)", + "description": "Persist the connection using Cache Array Routing Protocol (CARP) algorithm", + "properties": { + "key": { + "type": "string", + "title": "Key", + "description": "The key to use. Tcl command substitution is allowed" + }, + "timeout": { + "title": "Timeout", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "description": "Timeout value in seconds" + } + }, + "required": [ + "key", + "timeout" + ], + "additionalProperties": false + } + }, + "required": [ + "carp" + ] + } + ] + } + ] + }, + "Policy_Action_TCL": { + "type": "object", + "description": "Set a Tcl variable in runtime environment", + "properties": { + "event": { + "type": "string", + "description": "When to run this event in the request-response cycle", + "enum": [ + "proxy-request", + "request", + "response", + "ssl-client-hello", + "ssl-server-hello", + "ssl-server-handshake" + ], + "default": "request" + }, + "setVariable": { + "type": "object", + "description": "Set a Tcl variable in the runtime environment", + "properties": { + "expression": { + "type": "string", + "description": "Tcl expression to evaluate" + }, + "name": { + "type": "string", + "description": "Name of variable" + } + }, + "required": [ + "expression", + "name" + ] + } + }, + "required": [ + "setVariable" + ] + }, + "Policy_Action_Log": { + "type": "object", + "description": "Writes messages to local or remote system log", + "properties": { + "event": { + "type": "string", + "description": "When to run this event in the request-response cycle", + "enum": [ + "classification-detected", + "client-accepted", + "proxy-connect", + "proxy-request", + "proxy-response", + "request", + "response", + "server-connected", + "ssl-client-hello", + "ssl-client-serverhello-send", + "ssl-server-handshake", + "ssl-server-hello", + "ws-request", + "ws-response" + ], + "default": "ssl-client-hello" + }, + "write": { + "type": "object", + "description": "Write a message to the system log files", + "properties": { + "message": { + "type": "string", + "description": "The message to write to the system log. Can also be a Tcl command substitution", + "minLength": 1 + }, + "facility": { + "type": "string", + "description": "Standard syslog facility associated with the message", + "enum": [ + "authpriv", + "cron", + "daemon", + "ftp", + "kern", + "local0", + "local1", + "local2", + "local3", + "local4", + "local5", + "local6", + "local7", + "lpr", + "mail", + "news", + "security", + "user", + "uucp" + ], + "default": "local0" + }, + "priority": { + "type": "string", + "description": "Standard syslog priority associated with the message", + "enum": [ + "crit", + "debug", + "error", + "info", + "notice", + "warning" + ], + "default": "info" + }, + "ipAddress": { + "type": "string", + "description": "The IP address of the remote syslog server", + "format": "f5ip" + }, + "port": { + "type": "integer", + "description": "The port number of the remote syslog server", + "minimum": 0, + "maximum": 65535, + "default": 0 + } + }, + "required": [ + "message" + ] + } + }, + "required": [ + "write" + ] + }, + "Policy_Condition": { + "type": "object", + "description": "LTM policy condition", + "properties": { + "type": { + "description": "Selects the LTM policy condition this object describes", + "type": "string", + "enum": [ + "geoip", + "httpCookie", + "httpHeader", + "httpHost", + "httpMethod", + "httpStatus", + "httpUri", + "sslExtension", + "tcp" + ] + } + }, + "allOf": [ + { + "if": { + "properties": { + "type": { + "const": "httpUri" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Condition_HTTP_URI" + } + }, + { + "if": { + "properties": { + "type": { + "const": "httpHeader" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Condition_HTTP_Header" + } + }, + { + "if": { + "properties": { + "type": { + "const": "httpHost" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Condition_HTTP_Host" + } + }, + { + "if": { + "properties": { + "type": { + "const": "httpMethod" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Condition_HTTP_Method" + } + }, + { + "if": { + "properties": { + "type": { + "const": "httpStatus" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Condition_HTTP_Status" + } + }, + { + "if": { + "properties": { + "type": { + "const": "httpCookie" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Condition_HTTP_Cookie" + } + }, + { + "if": { + "properties": { + "type": { + "const": "sslExtension" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Condition_SSL_Extension" + } + }, + { + "if": { + "properties": { + "type": { + "const": "tcp" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Condition_TCP" + } + }, + { + "if": { + "properties": { + "type": { + "const": "geoip" + } + } + }, + "then": { + "$ref": "#/definitions/Policy_Condition_GeoIP" + } + } + ], + "required": [ + "type" + ] + }, + "Policy_Condition_HTTP_URI": { + "description": "Inspect the URI on a request and match on various parts or the entire URI", + "type": "object", + "allOf": [ + { + "type": "object", + "properties": { + "event": { + "description": "When to evaluate this condition in the request-response cycle", + "type": "string", + "enum": [ + "proxy-request", + "request" + ], + "default": "request" + } + } + }, + { + "oneOf": [ + { + "type": "object", + "properties": { + "path": { + "description": "Match on the URI path", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + }, + "normalized": { + "description": "Normalizes the result to a canonical form to allow consistent comparisons", + "type": "boolean", + "default": false + } + }, + "required": [ + "path" + ] + }, + { + "type": "object", + "properties": { + "scheme": { + "description": "Match on the scheme (e.g. http, https, ftp, file)", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + }, + "normalized": { + "description": "Normalizes the result to a canonical form to allow consistent comparisons", + "type": "boolean", + "default": false + } + }, + "required": [ + "scheme" + ] + }, + { + "type": "object", + "properties": { + "host": { + "description": "Match on the hostname in the URI", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + }, + "normalized": { + "description": "Normalizes the result to a canonical form to allow consistent comparisons", + "type": "boolean", + "default": false + } + }, + "required": [ + "host" + ] + }, + { + "type": "object", + "properties": { + "port": { + "description": "Match on the port number in the URI", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_Number" + } + ] + }, + "normalized": { + "description": "Normalizes the result to a canonical form to allow consistent comparisons", + "type": "boolean", + "default": false + } + }, + "required": [ + "port" + ] + }, + { + "type": "object", + "properties": { + "extension": { + "description": "Match on the file extension in the URI (e.g. jpg, html, cgi)", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + }, + "normalized": { + "description": "Normalizes the result to a canonical form to allow consistent comparisons", + "type": "boolean", + "default": false + } + }, + "required": [ + "extension" + ] + }, + { + "type": "object", + "properties": { + "queryString": { + "description": "Match against text in the query string", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + }, + "normalized": { + "description": "Normalizes the result to a canonical form to allow consistent comparisons", + "type": "boolean", + "default": false + } + }, + "required": [ + "queryString" + ] + }, + { + "type": "object", + "properties": { + "queryParameter": { + "description": "Match value of the named query parameter from the query string", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + }, + "name": { + "description": "Specify the name of the particular query parameter whose value you want to use", + "type": "string" + }, + "normalized": { + "description": "Normalizes the result to a canonical form to allow consistent comparisons", + "type": "boolean", + "default": false + } + }, + "required": [ + "queryParameter", + "name" + ] + }, + { + "type": "object", + "properties": { + "unnamedQueryParameter": { + "description": "Match the value of a query parameter by a numeric index instead of by name", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + }, + "index": { + "description": "The numeric order of the item whose value you want to use, start at 1; negative values indicate counting right to left", + "type": "integer", + "minimum": 1 + }, + "normalized": { + "description": "Normalizes the result to a canonical form to allow consistent comparisons", + "type": "boolean", + "default": false + } + }, + "required": [ + "unnamedQueryParameter", + "index" + ] + }, + { + "type": "object", + "properties": { + "pathSegment": { + "description": "Match a part of the URI path by a numeric index", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + }, + "index": { + "description": "The numeric order of the item whose value you want to use, start at 1; negative values indicate counting right to left", + "type": "integer", + "minimum": 1 + }, + "normalized": { + "description": "Normalizes the result to a canonical form to allow consistent comparisons", + "type": "boolean", + "default": false + } + }, + "required": [ + "pathSegment", + "index" + ] + }, + { + "type": "object", + "properties": { + "all": { + "description": "Match on the full URI", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + }, + "normalized": { + "description": "Normalizes the result to a canonical form to allow consistent comparisons", + "type": "boolean", + "default": false + } + }, + "required": [ + "all" + ] + } + ] + } + ] + }, + "Policy_Condition_HTTP_Header": { + "description": "Match against any HTTP header", + "type": "object", + "allOf": [ + { + "type": "object", + "properties": { + "event": { + "description": "When to evaluate this condition in the request-response cycle", + "type": "string", + "enum": [ + "proxy-request", + "request", + "proxy-connect", + "proxy-response", + "response" + ], + "default": "proxy-request" + } + } + }, + { + "oneOf": [ + { + "type": "object", + "properties": { + "all": { + "description": "Match on the full HTTP header", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + }, + "name": { + "description": "Specify the name of the particular HTTP header whose value you want to use", + "type": "string" + } + }, + "required": [ + "all", + "name" + ] + } + ] + } + ] + }, + "Policy_Condition_HTTP_Host": { + "description": "Match against an HTTP request's Host header", + "type": "object", + "allOf": [ + { + "type": "object", + "properties": { + "event": { + "description": "When to evaluate this condition in the request-response cycle", + "type": "string", + "enum": [ + "proxy-request", + "request", + "proxy-connect" + ], + "default": "proxy-request" + } + } + }, + { + "oneOf": [ + { + "type": "object", + "properties": { + "all": { + "description": "Match against the full string of the Host header", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + } + }, + "required": [ + "all" + ] + }, + { + "type": "object", + "properties": { + "host": { + "description": "Match against the host of the Host header", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + } + }, + "required": [ + "host" + ] + }, + { + "type": "object", + "properties": { + "port": { + "description": "Match against the port of the Host header", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_Number" + } + ] + } + }, + "required": [ + "port" + ] + } + ] + } + ] + }, + "Policy_Condition_HTTP_Status": { + "description": "Match against an HTTP response's status", + "type": "object", + "allOf": [ + { + "type": "object", + "properties": { + "event": { + "description": "When to evaluate this condition in the request-response cycle", + "type": "string", + "enum": [ + "proxy-response", + "response" + ], + "default": "proxy-response" + } + } + }, + { + "oneOf": [ + { + "type": "object", + "properties": { + "all": { + "description": "Match against full HTTP status response includeing both code and text", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + } + }, + "required": [ + "all" + ] + }, + { + "type": "object", + "properties": { + "code": { + "description": "Match against the numeric HTTP response status code", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_Number" + } + ] + } + }, + "required": [ + "code" + ] + }, + { + "type": "object", + "properties": { + "text": { + "description": "Match against HTTP response status string, e.g. 'Authentication Required'", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + } + }, + "required": [ + "text" + ] + } + ] + } + ] + }, + "Policy_Condition_HTTP_Method": { + "description": "Match against any HTTP method", + "type": "object", + "allOf": [ + { + "type": "object", + "properties": { + "event": { + "description": "When to evaluate this condition in the request-response cycle", + "type": "string", + "enum": [ + "proxy-request", + "request" + ], + "default": "proxy-request" + } + } + }, + { + "type": "object", + "properties": { + "all": { + "description": "Match on the full HTTP method", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + } + }, + "required": [ + "all" + ] + } + ] + }, + "Policy_Condition_HTTP_Cookie": { + "description": "Inspect an HTTP request Cookie: header", + "type": "object", + "allOf": [ + { + "type": "object", + "properties": { + "event": { + "description": "When to evaluate this condition in the request-response cycle", + "type": "string", + "enum": [ + "proxy-request", + "request", + "proxy-connect" + ], + "default": "proxy-request" + } + } + }, + { + "oneOf": [ + { + "type": "object", + "properties": { + "all": { + "description": "Match on the full HTTP cookie", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + }, + "name": { + "description": "Specify the name of the particular HTTP cookie whose value you want to use", + "type": "string" + } + }, + "required": [ + "all", + "name" + ] + } + ] + } + ] + }, + "Policy_Condition_SSL_Extension": { + "description": "Inspect SSL extensions being negotiated during HELLO phase", + "type": "object", + "allOf": [ + { + "type": "object", + "properties": { + "event": { + "description": "When to evaluate this condition in the request-response cycle", + "type": "string", + "enum": [ + "ssl-client-hello", + "ssl-server-hello" + ], + "default": "ssl-client-hello" + } + } + }, + { + "oneOf": [ + { + "type": "object", + "properties": { + "serverName": { + "description": "Server name indication", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + } + }, + "required": [ + "serverName" + ] + }, + { + "type": "object", + "properties": { + "npn": { + "description": "Server name indication", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + }, + "index": { + "description": "The numeric order of the item whose value you want to use, start at 1; negative values indicate counting right to left", + "type": "integer", + "minimum": 1, + "default": 0 + } + }, + "required": [ + "npn" + ] + }, + { + "type": "object", + "properties": { + "alpn": { + "description": "Server name indication", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_String" + } + ] + }, + "index": { + "description": "The numeric order of the item whose value you want to use, start at 1; negative values indicate counting right to left", + "type": "integer", + "minimum": 1, + "default": 0 + } + }, + "required": [ + "alpn" + ] + } + ] + } + ] + }, + "Policy_Condition_TCP": { + "description": "Match against specific TCP properties", + "type": "object", + "allOf": [ + { + "type": "object", + "properties": { + "event": { + "description": "When to evaluate this condition in the request-response cycle", + "type": "string", + "enum": [ + "request", + "response", + "classification-detected", + "client-accepted", + "proxy-connect", + "proxy-request", + "proxy-response", + "server-connected", + "ssl-client-hello", + "ssl-client-serverhello-send", + "ssl-server-handshake", + "ssl-server-hello", + "ws-request", + "ws-response" + ], + "default": "request" + } + } + }, + { + "oneOf": [ + { + "type": "object", + "properties": { + "address": { + "description": "Specify the address to use", + "allOf": [ + { + "$ref": "#/definitions/Policy_Match_String" + } + ] + } + }, + "required": [ + "address" + ] + }, + { + "type": "object", + "properties": { + "port": { + "description": "Specify the port to use", + "allOf": [ + { + "$ref": "#/definitions/Policy_Compare_Number" + } + ] + } + }, + "required": [ + "port" + ] + } + ] + } + ] + }, + "Policy_Condition_GeoIP": { + "description": "Match against specific GeoIP properties", + "type": "object", + "allOf": [ + { + "type": "object", + "properties": { + "event": { + "description": "When to evaluate this condition in the request-response cycle", + "type": "string", + "enum": [ + "request", + "response", + "client-accepted", + "proxy-connect", + "proxy-request", + "proxy-response", + "server-connected", + "ssl-client-hello", + "ssl-client-serverhello-send", + "ssl-server-handshake", + "ssl-server-hello" + ], + "default": "request" + } + } + }, + { + "oneOf": [ + { + "type": "object", + "properties": { + "continent": { + "description": "Two-character continent code: AF, AN, AS, OC, EU, NA, SA", + "allOf": [ + { + "$ref": "#/definitions/Policy_Match_String" + } + ] + } + }, + "required": [ + "continent" + ] + }, + { + "type": "object", + "properties": { + "countryCode": { + "description": "Two-character country code as defined in ISO-3166-2", + "allOf": [ + { + "$ref": "#/definitions/Policy_Match_String" + } + ] + } + }, + "required": [ + "countryCode" + ] + }, + { + "type": "object", + "properties": { + "countryName": { + "description": "Full name of country", + "allOf": [ + { + "$ref": "#/definitions/Policy_Match_String" + } + ] + } + }, + "required": [ + "countryName" + ] + }, + { + "type": "object", + "properties": { + "isp": { + "description": "Internet Service Provider associated with address", + "allOf": [ + { + "$ref": "#/definitions/Policy_Match_String" + } + ] + } + }, + "required": [ + "isp" + ] + }, + { + "type": "object", + "properties": { + "org": { + "description": "Organization associated with address", + "allOf": [ + { + "$ref": "#/definitions/Policy_Match_String" + } + ] + } + }, + "required": [ + "org" + ] + }, + { + "type": "object", + "properties": { + "regionCode": { + "description": "Abbreviation of State, Province, or country-specific region", + "allOf": [ + { + "$ref": "#/definitions/Policy_Match_String" + } + ] + } + }, + "required": [ + "regionCode" + ] + }, + { + "type": "object", + "properties": { + "regionName": { + "description": "Full name of State, Province, or country-specific region", + "allOf": [ + { + "$ref": "#/definitions/Policy_Match_String" + } + ] + } + }, + "required": [ + "regionName" + ] + } + ] + } + ] + }, + "Policy_Compare_String": { + "description": "Perform a comparison against string values", + "type": "object", + "properties": { + "operand": { + "description": "Specifies the comparison the system should perform with values. The operands exists and does-not-exist do not accept values and are available on BIGIP 15.0 and above.", + "type": "string", + "enum": [ + "equals", + "does-not-equal", + "starts-with", + "does-not-start-with", + "ends-with", + "does-not-end-with", + "contains", + "does-not-contain", + "exists", + "does-not-exist" + ], + "default": "equals" + }, + "values": { + "description": "A list of strings to do comparisons against", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "datagroup": { + "description": "Reference to a data-group containing the values", + "allOf": [ + { + "$ref": "#/definitions/Datagroup_Value" + } + ] + }, + "caseSensitive": { + "description": "Specifies if the comparison the system should perform with case sensitivity", + "type": "boolean", + "default": false + } + }, + "dependencies": { + "operand": { + "if": { + "allOf": [ + { + "properties": { + "operand": { + "not": { + "const": "exists" + } + } + } + }, + { + "properties": { + "operand": { + "not": { + "const": "does-not-exist" + } + } + } + } + ] + }, + "then": { + "oneOf": [ + { + "required": [ + "values" + ] + }, + { + "required": [ + "datagroup" + ] + } + ] + } + } + }, + "additionalProperties": false + }, + "Policy_Compare_Number": { + "description": "Perform a comparison against number values", + "type": "object", + "properties": { + "operand": { + "description": "Specifies the comparison the system should perform with values", + "type": "string", + "enum": [ + "equals", + "does-not-equal", + "less", + "greater", + "less-or-equal", + "greater-or-equal" + ], + "default": "equals" + }, + "values": { + "description": "A list of numbers to do comparisons against", + "type": "array", + "items": { + "type": "integer" + }, + "minItems": 1 + }, + "datagroup": { + "description": "Reference to a data-group containing the values", + "allOf": [ + { + "$ref": "#/definitions/Datagroup_Value" + } + ] + } + }, + "oneOf": [ + { + "required": [ + "values" + ] + }, + { + "required": [ + "datagroup" + ] + } + ], + "required": [ + "operand" + ], + "additionalProperties": false + }, + "Policy_Match_String": { + "description": "Perform a comparison that either matches or does-not-match", + "type": "object", + "properties": { + "operand": { + "description": "Specifies the comparison", + "type": "string", + "enum": [ + "matches", + "does-not-match" + ], + "default": "matches" + }, + "values": { + "description": "A list of strings to compare against", + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "datagroup": { + "description": "Reference to a data-group containing the values", + "allOf": [ + { + "$ref": "#/definitions/Datagroup_Value" + } + ] + } + }, + "oneOf": [ + { + "required": [ + "values" + ] + }, + { + "required": [ + "datagroup" + ] + } + ], + "additionalProperties": false + }, + "Datagroup_Value": { + "description": "Reference to a data-group containing the values", + "type": "object", + "properties": { + "bigip": { + "title": "BIG-IP Data-Group", + "description": "Pathname of existing BIG-IP Data-Group", + "type": "string", + "format": "f5bigip" + }, + "use": { + "title": "Use", + "description": "BIG-IP AS3 pointer to Data_Group", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "const": "Data_Group" + } + }, + "required": [ + "class" + ] + } + } + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm data-group internal" + ] + } + }, + "Bandwidth_Control_Policy": { + "title": "Bandwidth_Control_Policy", + "description": "Create a listener to specify how to handle traffic for policy enforcement", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Bandwidth_Control_Policy" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "dynamicControlEnabled": { + "description": "Specifies whether the policy is a static or dynamic policy. When enabled, the policy is dynamic, and additional settings are available. A dynamic policy enforces the specified maximum user rate and flow fairness for all traffic associated with the policy and for each session. The default is disabled, which indicates a static policy. A static policy enforces the maximum rate for combined traffic and does not guarantee fairness bandwidth for each session.", + "type": "boolean", + "default": false + }, + "maxBandwidth": { + "description": "Specifies the maximum amount of bandwidth that traffic associated with the bandwidth control policy can use. The range is from 1 Mbps to 320 Gbps (between 1000000 bps and 320000000000 bps.", + "type": "integer", + "minimum": 0, + "maximum": 18446744073709552000 + }, + "maxBandwidthUnit": { + "description": "Specifies the units used by the maxBandwidth property", + "type": "string", + "enum": [ + "bps", + "Kbps", + "Mbps", + "Gbps" + ], + "default": "Mbps" + }, + "maxUserBandwidth": { + "description": "Specifies the maximum amount of bandwidth that each session associated with the bandwidth control policy can use. The range is from 5 Kbps to 2 Gbps. Note: For FTP traffic, the throughput is roughly half of this setting, because the FTP protocol creates two connections per user: a control connection and a data connection.", + "type": "integer", + "minimum": 0, + "maximum": 18446744073709552000, + "default": 0 + }, + "maxUserBandwidthUnit": { + "description": "Specifies the units used by the maxUserBandwidth property", + "type": "string", + "enum": [ + "bps", + "Kbps", + "Mbps", + "Gbps" + ], + "default": "Mbps" + }, + "maxUserPPS": { + "description": "Specifies the limiter in packets per second that traffic is allowed per instance. It functions as a DoS limiter without fair share allocation. The system applies whichever value is lower, between this value and the specified Maximum Rate Per User. When both values are specified, both must pass for packets to go through. You can specify the rate in packets per second (PPS), kilo packets per second (KPPS), mega packets per second (MPPS), or giga packets per second (GPPS). The default value is 0 (not configured).", + "type": "integer", + "minimum": 0, + "maximum": 18446744073709552000, + "default": 0 + }, + "maxUserPPSUnit": { + "description": "Specifies the units used by the maxUserBandwidthPPS property", + "type": "string", + "enum": [ + "bpps", + "Kpps", + "Mpps", + "Gpps" + ], + "default": "Mpps" + }, + "loggingEnabled": { + "description": "Specifies whether the system measures bandwidth on all future instances of this bandwidth control policy. When enabled, the system measures bandwidth and sends it to the log publisher specified by the logPublisher setting. You can override this setting using iRules. For example, if you want measurement on only some instances, keep this setting disabled, and use iRules to enable measurement on specific instances.", + "type": "boolean", + "default": false + }, + "logPublisher": { + "$ref": "#/definitions/Pointer_Log_Publisher" + }, + "logPeriod": { + "description": "Specifies the frequency, in milliseconds, with which the system generates bandwidth measurement logs", + "type": "integer", + "minimum": 0, + "maximum": 18446744073709552000, + "default": 2048 + }, + "markIP": { + "description": "Specifies whether to mark traffic that exceeds the per-user limit by setting a Type of Service (ToS) bit in the IP headers of TCP packets associated with this bandwidth control policy. The default value is \"pass-through\", which means there is no change to the ToS bit. To set a ToS bit use a value from 0 to 63. If this setting is specified, the bandwidth policy is not enforced, but rather the packets are marked for a downstream system to process.", + "if": { + "type": "string" + }, + "then": { + "const": "pass-through" + }, + "else": { + "type": "integer", + "minimum": 0, + "maximum": 63 + }, + "default": "pass-through" + }, + "markL2": { + "description": "Specifies whether to mark traffic that exceeds the per-user limit by setting a Quality of Service (QoS) bit in the L2 headers of packets associated with this bandwidth control policy. The default value is \"pass-through\", which means there is no change to the QoS bit. To set a QoS bit use a value from 0 to 7. If this setting is specified, the bandwidth policy is not enforced, but rather the packets are marked for a downstream system to process.", + "if": { + "type": "string" + }, + "then": { + "const": "pass-through" + }, + "else": { + "type": "integer", + "minimum": 0, + "maximum": 7 + }, + "default": "pass-through" + }, + "categories": { + "description": "This specifies the categories under policy. Note: policy need to be enabled as dynamic to configure categories. Up to a maximum of 32 categories can be configured. All the categories under the dynamic policy share the bandwidth as specified for the category, up to a maximum of maxUserBandwidth.", + "additionalProperties": { + "$ref": "#/definitions/Bandwidth_Control_Policy_Category" + } + } + }, + "required": [ + "class", + "maxBandwidth" + ], + "if": { + "required": [ + "dynamicControlEnabled" + ], + "properties": { + "dynamicControlEnabled": { + "const": true + } + } + }, + "then": { + "required": [ + "maxUserBandwidth" + ] + }, + "additionalProperties": false + }, + "Idle_Timeout_Policy": { + "title": "Idle_Timeout_Policy", + "description": "Destination port based idle timeout policy", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Idle_Timeout_Policy" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "rules": { + "description": "List of idle timeout rules", + "type": "array", + "items": { + "$ref": "#/definitions/Idle_Timeout_Rule" + } + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "Idle_Timeout_Rule": { + "description": "Idle timeout rule", + "type": "object", + "properties": { + "name": { + "description": "Idle timeout rule name", + "type": "string", + "pattern": "^[A-Za-z_][0-9A-Za-z_/-]*$", + "maxLength": 64 + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "protocol": { + "type": "string", + "allOf": [ + { + "$ref": "#/definitions/Enum_Protocols_Idle_Timeout_Policy" + } + ], + "default": "all-other" + }, + "destinationPorts": { + "type": "array", + "description": "List of ports, port ranges (for example, 80, \"8080-8090\"), or \"all-other\".", + "items": { + "type": [ + "integer", + "string" + ] + }, + "minItems": 1 + }, + "idleTimeout": { + "description": "Idle timeout in seconds", + "type": [ + "integer", + "string" + ], + "oneOf": [ + { + "type": "integer" + }, + { + "type": "string", + "enum": [ + "immediate", + "indefinite", + "unspecified" + ] + } + ], + "default": "unspecified" + } + }, + "required": [ + "name" + ], + "additionalProperties": false + }, + "Bandwidth_Control_Policy_Category": { + "description": "Create a listener to specify how to handle traffic for policy enforcement", + "type": "object", + "properties": { + "remark": { + "$ref": "#/definitions/Remark" + }, + "maxBandwidth": { + "description": "Specifies the maximum bandwidth that this category of traffic can use when associated with this bandwidth control policy. The range is from 5 kbps to the value set for Maximum Rate Per User.", + "type": "integer", + "minimum": 0, + "maximum": 18446744073709552000 + }, + "maxBandwidthUnit": { + "description": "Specifies the units used by the maxBandwidth property", + "type": "string", + "enum": [ + "bps", + "Kbps", + "Mbps", + "Gbps", + "%" + ], + "default": "Mbps" + }, + "markIP": { + "description": "Specifies whether to mark traffic that exceeds the per-user limit by setting a Type of Service (ToS) bit in the IP headers of TCP packets associated with this bandwidth control policy. The default value is \"pass-through\", which means there is no change to the ToS bit. To set a ToS bit use a value from 0 to 63. If this setting is specified, the bandwidth policy is not enforced, but rather the packets are marked for a downstream system to process.", + "if": { + "type": "string" + }, + "then": { + "const": "pass-through" + }, + "else": { + "type": "integer", + "minimum": 0, + "maximum": 63 + }, + "default": "pass-through" + }, + "markL2": { + "description": "Specifies whether to mark traffic that exceeds the per-user limit by setting a Quality of Service (QoS) bit in the L2 headers of packets associated with this bandwidth control policy. The default value is \"pass-through\", which means there is no change to the QoS bit. To set a QoS bit use a value from 0 to 7. If this setting is specified, the bandwidth policy is not enforced, but rather the packets are marked for a downstream system to process.", + "if": { + "type": "string" + }, + "then": { + "const": "pass-through" + }, + "else": { + "type": "integer", + "minimum": 0, + "maximum": 7 + }, + "default": "pass-through" + } + }, + "required": [ + "maxBandwidth" + ], + "additionalProperties": false + }, + "Net_Address_List": { + "title": "Net_Address_List", + "description": "You can use the address-list component to define reusable lists of addresses. This property requires a BIG-IP version of 14.1 or higher.", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Net_Address_List" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "addresses": { + "type": "array", + "description": "A list of IPv4 and IPv6 addresses and address ranges. You can specify a network with CIDR slash notation.", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "addressLists": { + "type": "array", + "description": "A list of other address lists (each by BIG-IP AS3 pointer or BIG-IP pathname).", + "items": { + "$ref": "#/definitions/Pointer_Net_Address_List" + }, + "minItems": 1 + } + }, + "required": [ + "class" + ], + "anyOf": [ + { + "required": [ + "addresses" + ] + }, + { + "required": [ + "addressLists" + ] + } + ], + "additionalProperties": false + }, + "Net_Port_List": { + "title": "Net_Port_List", + "description": "You can use the port-list component to define reusable lists of ports. This property requires a BIG-IP version of 14.1 or higher.", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Net_Port_List" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "ports": { + "type": "array", + "description": "A list of ports and port ranges (for example, 80, \"8080-8090\").", + "items": { + "type": [ + "integer", + "string" + ] + }, + "minItems": 1 + }, + "portLists": { + "type": "array", + "description": "A list of other port lists (each by BIG-IP AS3 pointer or BIG-IP pathname).", + "items": { + "$ref": "#/definitions/Pointer_Net_Port_List" + }, + "minItems": 1 + } + }, + "required": [ + "class" + ], + "anyOf": [ + { + "required": [ + "ports" + ] + }, + { + "required": [ + "portLists" + ] + } + ], + "additionalProperties": false + }, + "Enforcement_Policy": { + "title": "Enforcement_Policy", + "description": "Configures policies for the Policy Enforcement Manager (PEM)", + "f5PostProcess": { + "tag": "modules", + "data": [ + "pem" + ] + }, + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Enforcement_Policy" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "enable": { + "description": "Specifies the current status of the policy", + "type": "boolean", + "default": true + }, + "allTransactions": { + "description": "Specifies, when set to true, that the system enables policy enforcement for each http transaction. When set to false, the system allows only policy enforcement of the first http transaction.", + "type": "boolean", + "default": false + }, + "rules": { + "description": "Enforcement policy rules", + "type": "array", + "items": { + "$ref": "#/definitions/Enforcement_Rule" + } + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "Enforcement_Rule": { + "description": "A rule to match traffic flows and apply actions", + "type": "object", + "properties": { + "dscpMarkingDownlink": { + "description": "Specifies whether to set DSCP bits in the IP header of outgoing traffic to the subscriber", + "if": { + "type": "string" + }, + "then": { + "const": "pass-through" + }, + "else": { + "type": "integer", + "minimum": 0, + "maximum": 63 + }, + "default": "pass-through" + }, + "dscpMarkingUplink": { + "description": "Specifies whether to set DSCP bits in the IP header of outgoing traffic to the network", + "if": { + "type": "string" + }, + "then": { + "const": "pass-through" + }, + "else": { + "type": "integer", + "minimum": 0, + "maximum": 63 + }, + "default": "pass-through" + }, + "gateStatusEnabled": { + "description": "Specifies, when set to true, that the traffic can pass through the system without being changed. Select false to drop traffic that this rule applies to.", + "type": "boolean", + "default": true + }, + "interceptionEndpoint": { + "$ref": "#/definitions/Pointer_Enforcement_Interception_Endpoint" + }, + "iRule": { + "$ref": "#/definitions/Pointer_Enforcement_iRule" + }, + "l2MarkingDownlink": { + "description": "Set Layer-2 Quality of Service Marking in downlink traffic that matches a rule. Setting a L2 QoS Marking affects the packet delivery priority. The range is 0 to 7, or pass-through. The default value is pass-through, indicating the L2 QoS Marking of the packet will not be changed when the packet matches the rule.", + "if": { + "type": "string" + }, + "then": { + "const": "pass-through" + }, + "else": { + "type": "integer", + "minimum": 0, + "maximum": 7 + }, + "default": "pass-through" + }, + "l2MarkingUplink": { + "description": "Set Layer-2 Quality of Service Marking in uplink traffic that matches a rule. Setting a L2 QoS marking affects the packet delivery priority. The range is 0 to 7, or pass-through. The default value is pass-through, indicating the L2 QoS Marking of the packet will not be changed when the packet matches the rule.", + "if": { + "type": "string" + }, + "then": { + "const": "pass-through" + }, + "else": { + "type": "integer", + "minimum": 0, + "maximum": 7 + }, + "default": "pass-through" + }, + "name": { + "description": "The name of the policy rule.", + "type": "string" + }, + "precedence": { + "description": "Specifies an integer that indicates the precedence for the rule in relation to the other rules. Number 1 has the highest precedence. Rules with higher precedence (lower numbers) are evaluated before other rules with lower precedence (higher numbers).", + "type": "integer", + "minimum": 1, + "maximum": 4294967295 + }, + "qosBandwidthControllerUplink": { + "$ref": "#/definitions/Enforcement_Rule_QOS" + }, + "qosBandwidthControllerDownlink": { + "$ref": "#/definitions/Enforcement_Rule_QOS" + }, + "serviceChain": { + "$ref": "#/definitions/Pointer_Enforcement_Service_Chain_Endpoint" + }, + "tclFilter": { + "description": "Specifies the tcl expression which uses iRule commands to filter the packet. It is a match if tclFilter returns TRUE/1 or nomatch if FALSE/0.", + "type": "string" + }, + "tcpAnalyticsEnabled": { + "description": "Specifies the action to enable tcp analytics when the traffic flow matches the rule matching criteria", + "type": "boolean", + "default": false + }, + "tcpOptimizationDownlink": { + "$ref": "#/definitions/Pointer_TCP_Profile" + }, + "tcpOptimizationUplink": { + "$ref": "#/definitions/Pointer_TCP_Profile" + }, + "classificationFilters": { + "description": "Classification filters to apply to the traffic", + "type": "array", + "items": { + "$ref": "#/definitions/Enforcement_Rule_Classification_Filter" + } + }, + "DTOSTethering": { + "allOf": [ + { + "$ref": "#/definitions/Enforcement_Rule_DTOS_Tethering" + } + ], + "default": {} + }, + "flowInfoFilters": { + "description": "Flow information filters to apply to the traffic", + "type": "array", + "items": { + "$ref": "#/definitions/Enforcement_Rule_Flow_Filter" + } + }, + "forwarding": { + "$ref": "#/definitions/Enforcement_Rule_Forwarding" + }, + "insertContent": { + "$ref": "#/definitions/Enforcement_Rule_Insert_Content" + }, + "modifyHttpHeader": { + "$ref": "#/definitions/Enforcement_Rule_Modify_HTTP_Header" + }, + "qoeReporting": { + "$ref": "#/definitions/Enforcement_Rule_Report_Destination_HSL" + }, + "quota": { + "$ref": "#/definitions/Enforcement_Rule_Quota" + }, + "ranCongestion": { + "$ref": "#/definitions/Enforcement_Rule_Ran_Congestion" + }, + "usageReporting": { + "$ref": "#/definitions/Enforcement_Rule_Usage_Reporting" + }, + "urlCategorizationFilters": { + "description": "URL categorization filters to apply to the traffic", + "type": "array", + "items": { + "$ref": "#/definitions/Enforcement_Rule_URL_Categorization_Filter" + } + } + }, + "required": [ + "name", + "precedence" + ], + "additionalProperties": false + }, + "Enforcement_Rule_QOS": { + "description": "Specifies a previously configured bandwidth control policy to apply to traffic that matches this rule", + "type": "object", + "properties": { + "policy": { + "$ref": "#/definitions/Pointer_Bandwidth_Control_Policy" + }, + "category": { + "description": "Specifies a category of traffic within the bandwidth control policy to which to apply the rule. This option provides more specific rate control to a certain type of traffic. The category must be defined in the selected bandwidth control policy.", + "type": "string" + } + }, + "required": [ + "policy" + ], + "additionalProperties": false + }, + "Enforcement_Rule_DTOS_Tethering": { + "description": "Specifies options for device type, operating system, and tethering detection", + "type": "object", + "properties": { + "detectDtos": { + "description": "Specifies the detection of the subscriber's device and the operating system", + "type": "boolean", + "default": false + }, + "detectTethering": { + "description": "Specifies if you want to enable detection of tethering", + "type": "boolean", + "default": false + }, + "reportDestinationHsl": { + "$ref": "#/definitions/Enforcement_Rule_Report_Destination_HSL" + } + }, + "required": [], + "additionalProperties": false + }, + "Enforcement_Rule_Report_Destination_HSL": { + "description": "Specifies report destination and format", + "type": "object", + "properties": { + "highSpeedLogPublisher": { + "$ref": "#/definitions/Pointer_Log_Publisher" + }, + "formatScript": { + "$ref": "#/definitions/Pointer_Enforcement_Format_Script" + } + }, + "required": [], + "additionalProperties": false + }, + "Enforcement_Rule_Forwarding_ICAP": { + "description": "Specifies that the flow forwards to the ICAP virtual server", + "type": "object", + "properties": { + "icapType": { + "description": "Specifies the ICAP adaptation type", + "type": "string", + "enum": [ + "request", + "response", + "both" + ] + }, + "icapService": { + "description": "ICAP service to route to", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Service" + } + ] + } + }, + "required": [ + "icapType", + "icapService" + ] + }, + "Enforcement_Rule_Forwarding_Endpoint": { + "description": "Specifies that the flow steers to a different destination", + "type": "object", + "properties": { + "endpoint": { + "$ref": "#/definitions/Pointer_Enforcement_Forwarding_Endpoint" + } + }, + "required": [ + "endpoint" + ] + }, + "Enforcement_Rule_Forwarding_Route_To_Network": { + "description": "Specifies that the system forwards the flow to the default destination", + "type": "object", + "properties": {}, + "required": [] + }, + "Enforcement_Rule_Forwarding_HTTP": { + "description": "Specifies that traffic affected by this rule should be redirected to the specified URL", + "type": "object", + "properties": { + "redirectUrl": { + "description": "Specifies that traffic affected by this rule should be redirected to the specified URL", + "type": "string" + } + }, + "required": [ + "redirectUrl" + ] + }, + "Enforcement_Rule_Forwarding": { + "description": "Manages the forwarding action and its attributes", + "type": "object", + "properties": { + "type": { + "description": "Specifies the type of forwarding action", + "type": "string", + "enum": [ + "icap", + "endpoint", + "route-to-network", + "http" + ] + }, + "fallbackAction": { + "description": "Specifies if the connection can remain unchanged or should be dropped if the forwarding action fails for any reason", + "type": "string", + "enum": [ + "continue", + "drop" + ], + "default": "drop" + } + }, + "allOf": [ + { + "if": { + "properties": { + "type": { + "const": "icap" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Rule_Forwarding_ICAP" + } + }, + { + "if": { + "properties": { + "type": { + "const": "endpoint" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Rule_Forwarding_Endpoint" + } + }, + { + "if": { + "properties": { + "type": { + "const": "route-to-network" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Rule_Forwarding_Route_To_Network" + } + }, + { + "if": { + "properties": { + "type": { + "const": "http" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Rule_Forwarding_HTTP" + } + } + ], + "required": [ + "type" + ] + }, + "Enforcement_Rule_Insert_Content": { + "description": "Specifies the action to insert content into the webpage", + "type": "object", + "properties": { + "duration": { + "description": "Specifies the periodicity of the insert action in seconds", + "type": "integer", + "minimum": 1, + "maximum": 4294967295 + }, + "frequency": { + "description": "Specifies the number of content insertion actions per transaction", + "type": "string", + "enum": [ + "always", + "once", + "once-every" + ], + "default": "always" + }, + "position": { + "description": "Specifies position with respect to the configured tagName", + "type": "string", + "enum": [ + "append", + "prepend" + ], + "default": "append" + }, + "tagName": { + "description": "Specifies the tag name to which the content is either appended or prepended", + "type": "string" + }, + "valueContent": { + "description": "Specifies the value content to be inserted into the webpage", + "type": "string" + }, + "valueType": { + "description": "Specifies the type of content format used in the valueContent option", + "type": "string", + "enum": [ + "string", + "tcl-snippet" + ], + "default": "string" + } + }, + "dependencies": { + "duration": { + "properties": { + "frequency": { + "const": "once-every" + } + } + }, + "tagName": { + "required": [ + "valueContent" + ] + }, + "valueContent": { + "required": [ + "tagName" + ] + }, + "frequency": { + "if": { + "properties": { + "frequency": { + "const": "once-every" + } + } + }, + "then": { + "required": [ + "duration" + ] + } + } + }, + "required": [], + "additionalProperties": false + }, + "Enforcement_Rule_Modify_HTTP_Header": { + "description": "Specifies the action to modify the HTTP header when the traffic flow matches the rule matching criteria", + "type": "object", + "properties": { + "headerName": { + "description": "Specifies the HTTP header name used by the operation option to modify the HTTP header", + "type": "string" + }, + "operation": { + "description": "Specifies the operation used to modify the HTTP header", + "type": "string", + "enum": [ + "insert", + "remove" + ] + }, + "valueContent": { + "description": "Specifies the HTTP header value content used by the insert operation to modify the HTTP header", + "type": "string" + }, + "valueType": { + "description": "Specifies the type of content format used in the valueContent option", + "type": "string", + "enum": [ + "string", + "tcl-snippet" + ], + "default": "string" + } + }, + "dependencies": { + "valueContent": { + "properties": { + "operation": { + "const": "insert" + } + } + }, + "valueType": { + "properties": { + "operation": { + "const": "insert" + } + } + } + }, + "if": { + "properties": { + "operation": { + "const": "insert" + } + } + }, + "then": { + "required": [ + "valueContent" + ] + }, + "required": [ + "headerName", + "operation" + ], + "additionalProperties": false + }, + "Enforcement_Rule_Quota": { + "description": "Specify quota management options", + "type": "object", + "properties": { + "ratingGroup": { + "$ref": "#/definitions/Pointer_Enforcement_Rating_Group" + }, + "reportingLevel": { + "description": "Specifies the quota reporting level", + "type": "string", + "enum": [ + "rating-group", + "service-id" + ], + "default": "rating-group" + } + }, + "dependencies": { + "ratingGroup": { + "properties": { + "reportingLevel": { + "const": "rating-group" + } + } + } + }, + "required": [], + "additionalProperties": false + }, + "Enforcement_Rule_Ran_Congestion": { + "description": "Detect congestion in the Radio Access Network", + "type": "object", + "properties": { + "threshold": { + "description": "Specifies lower threshold bandwidth (in kbps) for a session to be marked as congested", + "type": "integer", + "minimum": 0, + "maximum": 2147483647, + "default": 1000 + }, + "reportDestinationHsl": { + "$ref": "#/definitions/Enforcement_Rule_Report_Destination_HSL" + } + }, + "required": [], + "additionalProperties": false + }, + "Enforcement_Rule_Usage_Reporting": { + "description": "Send reporting data concerning traffic affected by this rule to either an external analytics system or to a PCRF over a Gx interface", + "type": "object", + "properties": { + "destination": { + "description": "Specifies where to send the usage monitoring data", + "type": "string", + "enum": [ + "gx", + "sd", + "hsl", + "radius-accounting" + ] + }, + "granularity": { + "description": "Specifies the type of reporting that will be generated when the policy applies", + "type": "string", + "enum": [ + "flow", + "session", + "transaction" + ], + "default": "session" + }, + "interval": { + "description": "Specifies the time interval when the report will be generated, in seconds. A value of 0 indicates this feature is disabled.", + "type": "integer", + "minimum": 0, + "default": 0 + }, + "volume": { + "$ref": "#/definitions/Enforcement_Rule_Usage_Reporting_Volume" + }, + "transaction": { + "$ref": "#/definitions/Enforcement_Rule_Usage_Reporting_Transaction" + } + }, + "allOf": [ + { + "if": { + "properties": { + "destination": { + "const": "gx" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Rule_Usage_Gx" + } + }, + { + "if": { + "properties": { + "destination": { + "const": "sd" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Rule_Usage_Sd" + } + }, + { + "if": { + "properties": { + "destination": { + "const": "hsl" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Rule_Usage_Hsl" + } + }, + { + "if": { + "properties": { + "destination": { + "const": "radius-accounting" + } + } + }, + "then": { + "$ref": "#/definitions/Enforcement_Rule_Usage_Radius" + } + }, + { + "if": { + "properties": { + "destination": { + "enum": [ + "gx", + "sd", + "radius-accounting" + ] + } + } + }, + "then": { + "properties": { + "granularity": { + "const": "session" + } + } + } + }, + { + "if": { + "properties": { + "destination": { + "enum": [ + "gx", + "sd" + ] + } + } + }, + "then": { + "properties": { + "interval": { + "const": 0 + } + } + } + }, + { + "if": { + "properties": { + "destination": { + "enum": [ + "hsl", + "radius-accounting" + ] + }, + "granularity": { + "enum": [ + "flow", + "session" + ] + } + } + }, + "then": { + "anyOf": [ + { + "properties": { + "interval": { + "minimum": 1 + } + }, + "required": [ + "interval" + ] + }, + { + "required": [ + "volume" + ] + } + ] + } + }, + { + "if": { + "properties": { + "destination": { + "const": "hsl" + }, + "granularity": { + "const": "transaction" + } + } + }, + "then": { + "properties": { + "interval": { + "const": 0 + } + } + } + } + ], + "dependencies": { + "transaction": { + "properties": { + "granularity": { + "const": "transaction" + } + } + } + }, + "required": [ + "destination" + ] + }, + "Enforcement_Rule_Usage_Reporting_Volume": { + "description": "Configures volume threshold settings", + "type": "object", + "properties": { + "downlink": { + "description": "Send reporting data if the number of octets to the client exceeds the threshold. A value of 0 indicates this feature is disabled.", + "type": "integer", + "minimum": 0, + "default": 0 + }, + "total": { + "description": "Send reporting data if the total number of octets both to and from the client exceeds the threshold. A value of 0 indicates this feature is disabled.", + "type": "integer", + "minimum": 0, + "default": 0 + }, + "uplink": { + "description": "Send reporting data if the number of octets from the client exceeds the threshold. A value of 0 indicates this feature is disabled.", + "type": "integer", + "minimum": 0, + "default": 0 + } + }, + "required": [], + "additionalProperties": false + }, + "Enforcement_Rule_Usage_Reporting_Transaction": { + "description": "Specifies policy enforcement configuration on transaction report for each HTTP transaction", + "type": "object", + "properties": { + "hostname": { + "description": "Specifies the maximum HTTP hostname string length option to include in the HTTP transaction report", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "uri": { + "description": "Specifies the maximum HTTP URI string length option to include in the HTTP transaction report", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 256 + }, + "userAgent": { + "description": "Specifies the maximum HTTP user agent string length to include in the HTTP transaction report", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + } + }, + "required": [], + "additionalProperties": false + }, + "Enforcement_Rule_Usage_Gx": { + "description": "Sends usage monitoring data to a PCRF over a Gx interface", + "type": "object", + "properties": { + "applicationReportingEnabled": { + "description": "Report APPLICATION_START and APPLICATION_END Event-Triggers when the application start/stop is detected", + "type": "boolean", + "default": false + }, + "monitoringKey": { + "description": "Specifies a string to use for usage monitoring indicating the portion of traffic that is accounted for in this dynamic policy and charging control (PCC) rule", + "type": "string" + } + }, + "required": [] + }, + "Enforcement_Rule_Usage_Sd": { + "description": "Sends usage monitoring data to a PCRF over a Sd interface", + "type": "object", + "properties": { + "applicationReportingEnabled": { + "description": "Report APPLICATION_START and APPLICATION_END Event-Triggers when the application start/stop is detected", + "type": "boolean", + "default": false + }, + "monitoringKey": { + "description": "Specifies a string to use for usage monitoring indicating the portion of traffic that is accounted for in this dynamic policy and charging control (PCC) rule", + "type": "string" + } + }, + "required": [ + "monitoringKey" + ] + }, + "Enforcement_Rule_Usage_Hsl": { + "description": "Sends reporting data to remote HSL servers", + "type": "object", + "properties": { + "publisher": { + "$ref": "#/definitions/Pointer_Log_Publisher" + }, + "formatScript": { + "$ref": "#/definitions/Pointer_Enforcement_Format_Script" + }, + "sessionReportingFields": { + "description": "Specifies the session fields and their order based on which messages should be published", + "type": "array", + "items": { + "type": "string", + "enum": [ + "3gpp-parameters", + "application-id", + "called-station-id", + "calling-station-id", + "concurrent-flows", + "downlink-volume", + "duration-seconds", + "last-record-sent", + "new-flows", + "observation-time-seconds", + "record-reason", + "record-type", + "report-id", + "report-version", + "subscriber-id", + "subscriber-id-type", + "successful-transactions", + "terminated-flows", + "timestamp-msec", + "total-transactions", + "uplink-volume" + ] + } + }, + "flowReportingFields": { + "description": "Specifies the flow fields and their order based on which messages should be published", + "type": "array", + "items": { + "type": "string", + "enum": [ + "application-id", + "destination-ip", + "destination-transport-port", + "downlink-volume", + "flow-end-milli-seconds", + "flow-end-seconds", + "flow-start-milli-seconds", + "flow-start-seconds", + "observation-time-seconds", + "protocol-identifier", + "record-type", + "report-id", + "report-version", + "route-domain", + "source-ip", + "source-transport-port", + "subscriber-id", + "subscriber-id-type", + "timestamp-msec", + "total-transactions", + "uplink-volume", + "url-category-id", + "vlan-id" + ] + } + }, + "transactionReportingFields": { + "description": "Specifies the transaction fields and their order based on which messages should be published", + "type": "array", + "items": { + "type": "string", + "enum": [ + "application-id", + "destination-ip", + "destination-transport-port", + "downlink-volume", + "http-hostname", + "http-hostname-truncated", + "http-response-code", + "http-url", + "http-url-truncated", + "http-user-agent", + "http-user-agent-truncated", + "protocol-identifier", + "record-type", + "report-id", + "report-version", + "route-domain", + "skipped-transactions", + "source-ip", + "source-transport-port", + "subscriber-id", + "subscriber-id-type", + "transaction-classification-result", + "transaction-end-milli-seconds", + "transaction-end-seconds", + "transaction-number", + "transaction-start-milli-seconds", + "transaction-start-seconds", + "uplink-volume", + "url-category-id", + "vlan-id" + ] + } + } + }, + "required": [ + "publisher" + ] + }, + "Enforcement_Rule_Usage_Radius": { + "description": "Specifies a RADIUS internal virtual server as a reporting destination", + "type": "object", + "properties": { + "radiusAAAService": { + "$ref": "#/definitions/Pointer_Service" + } + }, + "required": [ + "radiusAAAService" + ] + }, + "Enforcement_Rule_Classification_Filter": { + "description": "Defines the category or application (Layer 7) conditions that the traffic must meet (or not meet) for this enforcement policy rule to apply", + "type": "object", + "properties": { + "application": { + "$ref": "#/definitions/Pointer_Classification_Application" + }, + "category": { + "$ref": "#/definitions/Pointer_Classification_Category" + }, + "invertMatch": { + "description": "Specifies that a traffic flow should not match the condition", + "type": "boolean", + "default": false + }, + "name": { + "description": "The name of the classification filter.", + "type": "string" + } + }, + "required": [ + "name" + ], + "oneOf": [ + { + "required": [ + "application" + ] + }, + { + "required": [ + "category" + ] + } + ], + "additionalProperties": false + }, + "Enforcement_Rule_URL_Categorization_Filter": { + "description": "Defines the category of URL, which provides information about the content type requested by the subscriber", + "type": "object", + "properties": { + "category": { + "description": "Specifies which type of URL category you want the rule to affect", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Classification_Category" + } + ] + }, + "invertMatch": { + "description": "Specifies that a traffic flow should not match the condition", + "type": "boolean", + "default": false + }, + "name": { + "description": "The name of the URL categorization filter.", + "type": "string" + } + }, + "required": [ + "name", + "category" + ], + "additionalProperties": false + }, + "Enforcement_Rule_Flow_Filter": { + "description": "Defines the flow conditions (Layer 4) that the traffic must meet (or not meet) for this enforcement policy rule to apply", + "type": "object", + "properties": { + "name": { + "description": "The name of the flow filter.", + "type": "string" + }, + "invertMatch": { + "description": "Specifies that a traffic flow should not match the condition", + "type": "boolean", + "default": false + }, + "dscpMarking": { + "description": "Matches incoming traffic based on a value in the DSCP field in the IP header", + "oneOf": [ + { + "type": "integer", + "minimum": 0, + "maximum": 63 + }, + { + "type": "string", + "const": "disabled" + } + ], + "default": "disabled" + }, + "destinationAddress": { + "description": "Matches traffic going to a destination address or network", + "type": "string", + "default": "0.0.0.0/0" + }, + "destinationPort": { + "description": "Matches traffic headed to a destination port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "sourceVlan": { + "description": "Matches incoming traffic from a VLAN", + "allOf": [ + { + "$ref": "#/definitions/Pointer_VLAN" + } + ] + }, + "sourceAddress": { + "description": "Matches traffic coming from a source address or network", + "type": "string", + "default": "0.0.0.0/32" + }, + "sourcePort": { + "description": "Matches traffic coming from a source port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "protocol": { + "description": "Specifies the protocol of the traffic to which the rule applies", + "type": "string", + "enum": [ + "any", + "tcp", + "udp" + ], + "default": "any" + }, + "ipAddressType": { + "description": "Specifies the IP address type that this rule applies to", + "type": "string", + "enum": [ + "any", + "ipv4", + "ipv6" + ], + "default": "any" + } + }, + "required": [ + "name" + ], + "additionalProperties": false + }, + "Enforcement_Diameter_Endpoint_Profile": { + "title": "Enforcement_Diameter_Endpoint_Profile", + "description": "Create a listener to specify how to handle traffic for policy enforcement", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "pem" + ] + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Enforcement_Diameter_Endpoint_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "parentProfile": { + "description": "Specifies the name of the object to inherit the settings from", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Enforcement_Diameter_Endpoint_Profile" + } + ], + "default": { + "bigip": "/Common/diameter-endpoint" + } + }, + "destinationHost": { + "description": "Specifies the destination host name of the PCRF or external policy server, for example, pcrfdest.net.com", + "type": "string" + }, + "destinationRealm": { + "description": "Specifies the realm name or network of the PCRF, for example, net.com", + "type": "string" + }, + "fatalGraceTime": { + "description": "Specifies the time period in seconds that a diameter (PCRF) connection can be disconnected before the system clears all subscriber session information associated with that diameter endpoint. If the connection is re-established within the fatal grace time period, session information is not cleared. A value of 0 means if the PCRF is disconnected, session information is cleared immediately.", + "type": "integer", + "minimum": 0, + "default": 500 + }, + "messageMaxRetransmits": { + "description": "Specifies the maximum number of times that messages can be retransmitted from the BIG-IP system to the PCRF", + "type": "integer", + "minimum": 0, + "default": 2 + }, + "messageRetransmitDelay": { + "description": "Specifies the number of milliseconds to wait before retransmitting unanswered messages in case of failure from the BIG-IP system to the PCRF over the Gx interface", + "type": "integer", + "minimum": 0, + "default": 1500 + }, + "originHost": { + "description": "Specifies the host name of the PCRF or external policy server, for example, pcrf.xnet.com", + "type": "string" + }, + "originRealm": { + "description": "Specifies the realm name or network in which the PCRF resides, for example, xnet.com", + "type": "string" + }, + "protocolProfileGx": { + "description": "Specifies the protocol profile to be used when you enable subscriber discovery. The PEM protocol profile defines mapping of Diameter Gx AVPs to subscriber ID and other PEM subscriber session attributes. The default BIG-IP reference values vary between versions. BIGIP versions 14.1 and above begin with 'sys_diam' (e.g. _sys_diam_proto_default).", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Enforcement_Profile_Gx" + } + ] + }, + "productName": { + "description": "Specifies the value of the string used in the product name attribute value pair (AVP), in capabilities exchange message in the diameter when communicating with the PCRF", + "type": "string", + "default": "BIG-IP" + }, + "supportedApps": { + "description": "Specifies the diameter endpoint you would like to provision. You can select Gx, Gy or SD. Gx and SD are mutually exclusive.", + "type": "array", + "items": { + "type": "string", + "enum": [ + "Gx", + "Gy", + "Sd" + ] + }, + "minItems": 1, + "uniqueItems": true + } + }, + "required": [ + "class", + "supportedApps" + ], + "additionalProperties": false + }, + "Enforcement_iRule": { + "title": "Enforcement_iRule", + "description": "Specifies or configures an iRule for use in Enforcement Policies", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Enforcement_iRule" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "expand": { + "title": "Expand", + "description": "If true (default), expand backquoted variables in iRule", + "type": "boolean", + "default": true + }, + "iRule": { + "$ref": "#/definitions/IRule_Core" + } + }, + "additionalProperties": false, + "required": [ + "class", + "iRule" + ] + }, + "Enforcement_Radius_AAA_Profile": { + "title": "Enforcement_Radius_AAA_Profile", + "description": "Configures a radius AAA profile", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "pem" + ] + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Enforcement_Radius_AAA_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "parentProfile": { + "description": "Specifies the name of the object to inherit the settings from", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Enforcement_Radius_AAA_Profile" + } + ], + "default": { + "bigip": "/Common/radiusaaa" + } + }, + "retransmissionTimeout": { + "description": "The number of seconds to wait before resending authentication or accounting transaction messages to the RADIUS server", + "type": "integer", + "minimum": 0, + "maximum": 60, + "default": 5 + }, + "sharedSecret": { + "description": "Specifies the shared secret of the RADIUS server used for authentication or accounting", + "type": "object", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "allOf": [ + { + "$ref": "#/definitions/Secret" + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "object" + } + }, + { + "f5PostProcess": { + "tag": "secret" + } + } + ] + }, + "password": { + "description": "The password of the RADIUS AAA profile for RADIUS server authentication", + "type": "object", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "allOf": [ + { + "$ref": "#/definitions/Secret" + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "object" + } + }, + { + "f5PostProcess": { + "tag": "secret" + } + } + ] + }, + "transactionTimeout": { + "description": "The number of seconds to wait before resending authentication or accounting transaction messages to the RADIUS server", + "type": "integer", + "minimum": 5, + "maximum": 300, + "default": 30 + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "Enforcement_Profile": { + "title": "Enforcement_Profile", + "description": "Configures a subscriber policy manager profile", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "pem" + ] + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Enforcement_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "parentProfile": { + "description": "Specifies the name of the object to inherit the settings from", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Enforcement_Profile" + } + ], + "default": { + "bigip": "/Common/spm" + } + }, + "policiesGlobalHighPrecedence": { + "description": "Adds, deletes, or replaces a set of the policies", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Enforcement_Policy" + } + }, + "policiesGlobalLowPrecedence": { + "description": "Adds, deletes, or replaces a set of the policies", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Enforcement_Policy" + } + }, + "policiesUnknownSubscribers": { + "description": "Adds, deletes, or replaces a set of the policies", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Enforcement_Policy" + } + }, + "connectionOptimizationEnabled": { + "description": "Specifies whether connection optimization is enabled or not", + "type": "boolean", + "default": true + }, + "connectionOptimizationService": { + "$ref": "#/definitions/Pointer_Service" + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "Enforcement_Subscriber_Management_Profile": { + "title": "Enforcement_Subscriber_Management_Profile", + "description": "Configures a subscriber management profile", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "pem" + ] + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Enforcement_Subscriber_Management_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "parentProfile": { + "description": "Specifies the name of the object to inherit the settings from", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Enforcement_Subscriber_Management_Profile" + } + ], + "default": { + "bigip": "/Common/subscriber-mgmt" + } + }, + "dhcpLeaseQuery": { + "$ref": "#/definitions/Enforcement_Subscriber_Management_Profile_DHCP" + }, + "serverSideSessionsEnabled": { + "description": "Specifies the session is created based on server side IP when the server side traffic comes and is enabled", + "type": "boolean", + "default": true + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "Enforcement_Subscriber_Management_Profile_DHCP": { + "description": "Configures DHCP lease query settings for a subscriber management profile", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "pem" + ] + }, + "properties": { + "enabled": { + "description": "Specifies the subscriber management settings use DHCP lease query to communicate with DHCP servers to obtain DHCP lease information for the unknown IP address and creates a new policy enforcement session using the lease information received", + "type": "boolean", + "default": true + }, + "service": { + "$ref": "#/definitions/Pointer_Service" + } + }, + "required": [ + "service" + ], + "additionalProperties": false + }, + "Enforcement_Listener": { + "title": "Enforcement_Listener", + "description": "Configures an enforcement data plane listener", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "pem" + ] + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Enforcement_Listener" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "enforcementProfile": { + "$ref": "#/definitions/Pointer_Enforcement_Profile" + }, + "subscriberManagementProfile": { + "$ref": "#/definitions/Pointer_Enforcement_Subscriber_Management_Profile" + }, + "services": { + "description": "A set of virtual servers", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Service" + }, + "minItems": 1 + } + }, + "required": [ + "class", + "enforcementProfile", + "services" + ], + "additionalProperties": false + }, + "Enforcement_Interception_Endpoint": { + "title": "Enforcement_Interception_Endpoint", + "description": "Configures an interception endpoint to clone all traffic", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "pem" + ] + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Enforcement_Interception_Endpoint" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "persistence": { + "description": "Specifies the persistence that is based on either the source or destination IP addresses only", + "type": "string", + "enum": [ + "destination-ip", + "source-ip", + "disabled" + ], + "default": "disabled" + }, + "pool": { + "$ref": "#/definitions/Pointer_Pool" + } + }, + "required": [ + "class", + "pool" + ], + "additionalProperties": false + }, + "Enforcement_Format_Script": { + "title": "Enforcement_Format_Script", + "description": "Specifies a script using TCL syntax that defines a custom format for HSL reporting applied in an enforcement policy rule. The format and fields available differ depending on whether you are using session-based or flow-based reporting in the rule.", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "pem" + ] + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Enforcement_Format_Script" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "definition": { + "description": "TCL script text", + "type": "string" + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "Enforcement_Forwarding_Endpoint": { + "title": "Enforcement_Forwarding_Endpoint", + "description": "Configures an forwarding endpoint to specify PEM policy forwarding actions", + "type": "object", + "f5PostProcess": { + "tag": "modules", + "data": [ + "pem" + ] + }, + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Enforcement_Forwarding_Endpoint" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "pool": { + "$ref": "#/definitions/Pointer_Pool" + }, + "SNATPool": { + "$ref": "#/definitions/Pointer_SNAT_Pool" + }, + "sourcePortAction": { + "description": "Specifies whether the system preserves the source port of the connection", + "type": "string", + "enum": [ + "change", + "preserve", + "preserve-strict" + ], + "default": "preserve" + }, + "addressTranslationEnabled": { + "description": "Specifies, when enabled, the system translates the original destination address of the virtual server. When disabled, specifies the system uses the address without translation.", + "type": "boolean", + "default": false + }, + "portTranslationEnabled": { + "description": "Specifies, when enabled, the system translates the original destination port. When disabled, specifies the system uses the original destination port without translation.", + "type": "boolean", + "default": false + }, + "defaultPersistenceType": { + "description": "Specifies a persistence method for the pool member selection. If you have multiple pool members and want specific traffic to go to the same pool member, select the appropriate IP address type.", + "type": "string", + "enum": [ + "destination-ip", + "disabled", + "hash", + "source-ip" + ], + "default": "disabled" + }, + "fallbackPersistenceType": { + "description": "Specifies the fallback persistence method that is applied when default persistence fails. If you have multiple pool members and want specific traffic to go to the same pool member, select the appropriate IP address type.", + "type": "string", + "enum": [ + "destination-ip", + "disabled", + "source-ip" + ], + "default": "disabled" + }, + "persistenceHashSettings": { + "allOf": [ + { + "$ref": "#/definitions/Enforcement_Forwarding_Endpoint_Hash_Settings" + } + ], + "default": {} + } + }, + "required": [ + "class", + "pool" + ], + "additionalProperties": false + }, + "Enforcement_Forwarding_Endpoint_Hash_Settings": { + "description": "Specifies the settings for the hash persistence method", + "type": "object", + "properties": { + "length": { + "description": "Specifies the length of the source string used to calculate the hash value", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 1024 + }, + "offset": { + "description": "Specifies the offset, in bytes, from start of the source string to calculate the hash value", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 0 + }, + "tclScript": { + "description": "The results from this TCL script are used to calculate the hash value. If no script is specified, the URI is used instead.", + "type": "string" + } + }, + "required": [], + "additionalProperties": false + }, + "Enforcement_Service_Chain_Endpoint": { + "title": "Enforcement_Service_Chain_Endpoint", + "description": "Configures service chain endpoint definitions for the Policy Enforcement Manager (PEM)", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Enforcement_Service_Chain_Endpoint" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "serviceEndpoints": { + "description": "Specifies a list of forwarding endpoints that define where to send traffic on the way to its final destination. This way, the system can route traffic to other servers that can provide value-added services. Traffic goes to the endpoints in the order in which they are listed.", + "type": "array", + "items": { + "$ref": "#/definitions/Enforcement_Service_Chain_Endpoint_Service_Endpoint" + } + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "Enforcement_Service_Chain_Endpoint_Service_Endpoint": { + "description": "Configures an individual service chain endpoint", + "type": "object", + "properties": { + "name": { + "description": "Specify the name of the service endpoint where the traffic is going to", + "type": "string" + }, + "forwardingEndpoint": { + "$ref": "#/definitions/Pointer_Enforcement_Forwarding_Endpoint" + }, + "sourceVLAN": { + "$ref": "#/definitions/Pointer_VLAN" + }, + "serviceOption": { + "description": "Specifies the service option in case the service endpoint is not accessible through the network, for forwarding endpoint. For ICAP service endpoint, the service endpoint works as a fallback action for non-HTTP traffic. Select \"optional\" if you want to skip the service endpoint. Select \"mandatory\" if you want all traffic flows dropped.", + "type": "string", + "enum": [ + "mandatory", + "optional" + ], + "default": "mandatory" + }, + "internalService": { + "description": "Specifies the internal ICAP virtual server", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Service" + } + ] + }, + "internalServiceICAPType": { + "description": "Specifies the ICAP adaptation type. Select \"request\" to send only HTTP requests to ICAP server. Select \"response\" to send only HTTP responses to ICAP server. Select \"both\" to have both requests and responses.", + "type": "string", + "enum": [ + "request", + "response", + "both", + "none" + ] + }, + "steeringPolicy": { + "$ref": "#/definitions/Pointer_Enforcement_Policy" + } + }, + "dependencies": { + "internalServiceICAPType": [ + "internalService" + ] + }, + "required": [ + "sourceVLAN" + ], + "additionalProperties": false + }, + "Pointer_Address_List": { + "description": "Reference to a firewall address list or net address list", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to firewall address list or net address list declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Firewall_Address_List", + "Net_Address_List" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP firewall address list or net address list", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security firewall address-list", + "query net address-list" + ] + } + } + ] + }, + "Pointer_Address_Discovery": { + "description": "Reference to a Address Discovery", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to Address Discovery declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Address_Discovery" + ] + } + }, + "required": [ + "class" + ] + } + } + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1 + }, + "Pointer_ALG_Log_Profile": { + "description": "Reference to a application layer gateway log profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to application layer gateway log profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "ALG_Log_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP application layer gateway log profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm alg-log-profile" + ] + } + } + ] + }, + "Pointer_API_Protection_Profile": { + "description": "Reference to a API_Protection_Profile", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP API_Protection_Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query api-protection profile apiprotection" + ] + } + } + ] + }, + "Pointer_Bandwidth_Control_Policy": { + "description": "Reference to a bandwidth control policy", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to bandwidth control policy declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Bandwidth_Control_Policy" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP bandwidth control policy", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query net bwc policy" + ] + } + } + ] + }, + "Pointer_Idle_Timeout_Policy": { + "description": "Reference to a idle timeout policy", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to idle timeout policy declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Idle_Timeout_Policy" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP idle timeout policy", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query net timer-policy" + ] + } + } + ] + }, + "Pointer_Denylist_Category": { + "description": "Reference to a denylist category", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP denylist category", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security ip-intelligence blacklist-category" + ] + } + } + ] + }, + "Pointer_Bot_Defense_Profile": { + "description": "Reference to a bot defense profile", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP bot defense profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security bot-defense profile" + ] + } + } + ] + }, + "Pointer_Bot_Signature": { + "description": "Reference to a bot signature", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP bot signature", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security dos bot-signature", + "query security bot-defense signature" + ] + } + } + ] + }, + "Pointer_Bot_Signature_Category": { + "description": "Reference to a bot signature category", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP bot signature category", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security dos bot-signature-category", + "query security bot-defense signature-category" + ] + } + } + ] + }, + "Pointer_Cipher_Group": { + "description": "Reference to a cipher group", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to cipher group declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Cipher_Group" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP cipher group", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm cipher group" + ] + } + } + ] + }, + "Pointer_Cipher_Rule": { + "description": "Reference to a cipher rule", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to cipher rule declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Cipher_Rule" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP cipher rule", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm cipher rule" + ] + } + } + ] + }, + "Pointer_Classification_Application": { + "description": "Reference to a application classification", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP application classification", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm classification application" + ] + } + } + ] + }, + "Pointer_Classification_Category": { + "description": "Reference to a category classification", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP category classification", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm classification category" + ] + } + } + ] + }, + "Pointer_Classification_Preset": { + "description": "Reference to a classification preset", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP classification preset", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm classification ce" + ] + } + } + ] + }, + "Pointer_Classification_Profile": { + "description": "Reference to a classification profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to classification profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Classification_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP classification profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile classification" + ] + } + } + ] + }, + "Pointer_DNS_Cache": { + "description": "Reference to a DNS cache", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to DNS cache declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "DNS_Cache" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP DNS cache", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm dns cache resolver", + "query ltm dns cache transparent", + "query ltm dns cache validating-resolver" + ] + } + } + ] + }, + "Pointer_Data_Group_File": { + "description": "Reference to a Data Group File", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP Data Group File", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys file data-group" + ] + } + } + ] + }, + "Pointer_Data_Group": { + "description": "Reference to a Data Group", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to Data Group declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Data_Group" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP Data Group", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm data-group internal", + "query ltm data-group external" + ] + } + } + ] + }, + "Pointer_DNS_Listener": { + "description": "Reference to a DNS Listener", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to DNS Listener declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "DNS_Listener" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP DNS Listener", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query gtm listener" + ] + } + } + ] + }, + "Pointer_DNS_Logging_Profile": { + "description": "Reference to a DNS logging profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to DNS logging profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "DNS_Logging_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP DNS logging profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile dns-logging" + ] + } + } + ] + }, + "Pointer_DNS_Nameserver": { + "description": "Reference to a DNS nameserver", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to DNS nameserver declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "DNS_Nameserver" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP DNS nameserver", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm dns nameserver" + ] + } + } + ] + }, + "Pointer_DNS_Profile": { + "description": "Reference to a DNS profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to DNS profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "DNS_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP DNS profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile dns" + ] + } + } + ] + }, + "Pointer_DNS_Security_Profile": { + "description": "Reference to a DNS security profile", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP DNS security profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security dns profile" + ] + } + } + ] + }, + "Pointer_DNS_TSIG_Key": { + "description": "Reference to a DNS TSIG key", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to DNS TSIG key declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "DNS_TSIG_Key" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP DNS TSIG key", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm dns tsig-key" + ] + } + } + ] + }, + "Pointer_DNS_Zone": { + "description": "Reference to a DNS zone", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to DNS zone declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "DNS_Zone" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP DNS zone", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm dns zone" + ] + } + } + ] + }, + "Pointer_DOS_Profile": { + "description": "Reference to a DOS Profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to DOS Profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "DOS_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP DOS Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security dos profile" + ] + } + } + ] + }, + "Pointer_Endpoint_Policy": { + "oneOf": [ + { + "description": "AS3 pointer to endpoint policy declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Endpoint_Policy" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + { + "description": "Reference to a endpoint policy", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to endpoint policy declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Endpoint_Policy" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP endpoint policy", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm policy" + ] + } + } + ] + } + ] + }, + "Pointer_Enforcement_Format_Script": { + "description": "Reference to a format script", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to format script declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Enforcement_Format_Script" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP format script", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query pem reporting format-script" + ] + } + } + ] + }, + "Pointer_Enforcement_Forwarding_Endpoint": { + "description": "Reference to a forwarding endpoint", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to forwarding endpoint declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Enforcement_Forwarding_Endpoint" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP forwarding endpoint", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query pem forwarding-endpoint" + ] + } + } + ] + }, + "Pointer_Enforcement_Interception_Endpoint": { + "description": "Reference to a interception endpoint", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to interception endpoint declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Enforcement_Interception_Endpoint" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP interception endpoint", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query pem interception-endpoint" + ] + } + } + ] + }, + "Pointer_Enforcement_iRule": { + "description": "Reference to a enforcement iRule", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to enforcement iRule declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Enforcement_iRule" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP PEM iRule", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query pem irule" + ] + } + } + ] + }, + "Pointer_Enforcement_Policy": { + "description": "Reference to a enforcement policy", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to enforcement policy declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Enforcement_Policy" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP PEM policy", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query pem policy" + ] + } + } + ] + }, + "Pointer_Enforcement_Diameter_Endpoint_Profile": { + "description": "Reference to a enforcement profile diameter endpoint", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to enforcement profile diameter endpoint declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Enforcement_Diameter_Endpoint_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP enforcement profile diameter endpoint", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query pem profile diameter-endpoint" + ] + } + } + ] + }, + "Pointer_Enforcement_Profile_Gx": { + "description": "Reference to a enforcement profile gx", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP enforcement profile gx", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query pem protocol profile gx" + ] + } + } + ] + }, + "Pointer_Enforcement_Radius_AAA_Profile": { + "description": "Reference to a enforcement profile radius aaa", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to enforcement profile radius aaa declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Enforcement_Radius_AAA_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP enforcement profile radius aaa", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query pem profile radius-aaa" + ] + } + } + ] + }, + "Pointer_Enforcement_Profile": { + "description": "Reference to a enforcement profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to enforcement profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Enforcement_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP PEM spm policy", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query pem profile spm" + ] + } + } + ] + }, + "Pointer_Enforcement_Rating_Group": { + "description": "Reference to a quota rating group", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP quota rating group", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query pem quota-mgmt rating-group" + ] + } + } + ] + }, + "Pointer_Enforcement_Service_Chain_Endpoint": { + "description": "Reference to a service chain endpoint", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to service chain endpoint declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Enforcement_Service_Chain_Endpoint" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP service chain endpoint", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query pem service-chain-endpoint" + ] + } + } + ] + }, + "Pointer_Enforcement_Subscriber_Management_Profile": { + "description": "Reference to a enforcement subscriber management profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to enforcement subscriber management profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Enforcement_Subscriber_Management_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP PEM subscriber-mgmt policy", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query pem profile subscriber-mgmt" + ] + } + } + ] + }, + "Pointer_Enforcement_Protocol_Profile_Radius": { + "description": "Reference to a radius protocol profile", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP radius protocol profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query pem protocol profile radius" + ] + } + } + ] + }, + "Pointer_Existing_TLS_Server_Profile": { + "description": "Reference to a TLS Server profile", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP TLS Server profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile client-ssl" + ] + } + } + ] + }, + "Pointer_Existing_TLS_Client_Profile": { + "description": "Reference to a TLS Client profile", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP TLS Client profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile server-ssl" + ] + } + } + ] + }, + "Pointer_Firewall_Address_List": { + "description": "Reference to a firewall address list", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to firewall address list declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Firewall_Address_List" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP firewall address list", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security firewall address-list" + ] + } + } + ] + }, + "Pointer_Firewall_Policy": { + "description": "Reference to a firewall (AFM) policy", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to firewall (AFM) policy declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Firewall_Policy" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP firewall (AFM) policy", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security firewall policy" + ] + } + } + ] + }, + "Pointer_Firewall_Port_List": { + "description": "Reference to a firewall port list", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to firewall port list declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Firewall_Port_List" + ] + } + }, + "required": [ + "class" + ] + } + } + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1 + }, + "Pointer_Firewall_Rule_List": { + "description": "Reference to a firewall rule list", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to firewall rule list declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Firewall_Rule_List" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP firewall rule list", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security firewall rule-list" + ] + } + } + ] + }, + "Pointer_FPS_Profile": { + "description": "Reference to a FPS Profile", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP FPS Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security anti-fraud profile" + ] + } + } + ] + }, + "Pointer_FTP_Profile": { + "description": "Reference to a FTP protocol profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to FTP protocol profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "FTP_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP FTP protocol profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile ftp" + ] + } + } + ] + }, + "Pointer_GSLB_Data_Center": { + "description": "Reference to a GSLB data center", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to GSLB data center declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "GSLB_Data_Center" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP GSLB data center", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query gtm datacenter" + ] + } + } + ] + }, + "Pointer_GSLB_Domain_A": { + "description": "Reference to a GSLB domain", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to GSLB domain declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "GSLB_Domain" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP GSLB domain", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query gtm wideip a" + ] + } + } + ] + }, + "Pointer_GSLB_Domain_AAAA": { + "description": "Reference to a GSLB domain", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to GSLB domain declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "GSLB_Domain" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP GSLB domain", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query gtm wideip aaaa" + ] + } + } + ] + }, + "Pointer_GSLB_Domain_CNAME": { + "description": "Reference to a GSLB domain", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to GSLB domain declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "GSLB_Domain" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP GSLB domain", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query gtm wideip cname" + ] + } + } + ] + }, + "Pointer_GSLB_Domain_MX": { + "description": "Reference to a GSLB domain", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to GSLB domain declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "GSLB_Domain" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP GSLB domain", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query gtm wideip mx" + ] + } + } + ] + }, + "Pointer_GSLB_Domain_NAPTR": { + "description": "Reference to a GSLB domain", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to GSLB domain declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "GSLB_Domain" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP GSLB domain", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query gtm wideip naptr" + ] + } + } + ] + }, + "Pointer_GSLB_Monitor": { + "description": "Reference to a GSLB monitor", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to GSLB monitor declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "GSLB_Monitor" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP GSLB monitor", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query gtm monitor bigip", + "query gtm monitor bigip-link", + "query gtm monitor external", + "query gtm monitor firepass", + "query gtm monitor ftp", + "query gtm monitor gateway-icmp", + "query gtm monitor gtp", + "query gtm monitor http", + "query gtm monitor https", + "query gtm monitor http2", + "query gtm monitor imap", + "query gtm monitor ldap", + "query gtm monitor mssql", + "query gtm monitor mysql", + "query gtm monitor nntp", + "query gtm monitor none", + "query gtm monitor oracle", + "query gtm monitor pop3", + "query gtm monitor postgresql", + "query gtm monitor radius", + "query gtm monitor radius-accounting", + "query gtm monitor real-server", + "query gtm monitor scripted", + "query gtm monitor sip", + "query gtm monitor smtp", + "query gtm monitor snmp", + "query gtm monitor snmp-link", + "query gtm monitor soap", + "query gtm monitor tcp", + "query gtm monitor tcp-half-open", + "query gtm monitor udp", + "query gtm monitor wap", + "query gtm monitor wmi" + ] + } + } + ] + }, + "Pointer_GSLB_Pool": { + "description": "Reference to a GSLB pool", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to GSLB pool declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "GSLB_Pool" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP GSLB pool", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query gtm pool a", + "query gtm pool aaaa", + "query gtm pool cname", + "query gtm pool mx", + "query gtm pool naptr" + ] + } + } + ] + }, + "Pointer_GSLB_Prober_Pool": { + "description": "Reference to a GSLB pool", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to GSLB pool declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "GSLB_Prober_Pool" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP GSLB pool", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query gtm prober-pool" + ] + } + } + ] + }, + "Pointer_GSLB_Server": { + "description": "Reference to a GSLB server", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to GSLB server declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "GSLB_Server" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP GSLB server", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query gtm server" + ] + } + } + ] + }, + "Pointer_GSLB_Server_Device": { + "description": "Reference to a GSLB server device", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to GSLB server device declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "GSLB_Server_Device" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP GSLB server device", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query gtm server devices" + ] + } + } + ] + }, + "Pointer_GSLB_Topology_Region": { + "description": "Reference to a GSLB Topology Region", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to GSLB Topology Region declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "GSLB_Topology_Region" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP GSLB Topology Region", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query gtm region" + ] + } + } + ] + }, + "Pointer_GSLB_Virtual_Server": { + "description": "Reference to a GSLB virtual server", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to GSLB virtual server declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "GSLB_Virtual_Server" + ] + } + }, + "required": [ + "class" + ] + } + } + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1 + }, + "Pointer_HTML_Profile": { + "description": "Reference to a HTML_Profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to HTML_Profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "HTML_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP HTML_Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile html" + ] + } + } + ] + }, + "Pointer_HTML_Rule": { + "description": "Reference to a HTML_Rule", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to HTML_Rule declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "HTML_Rule" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP HTML_Rule", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm html-rule comment-raise-event", + "query ltm html-rule comment-remove", + "query ltm html-rule tag-append-html", + "query ltm html-rule tag-prepend-html", + "query ltm html-rule tag-raise-event", + "query ltm html-rule tag-remove", + "query ltm html-rule tag-remove-attribute" + ] + } + } + ] + }, + "Pointer_HTTP2_Profile": { + "description": "Reference to a HTTP/2 Profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to HTTP/2 Profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "HTTP2_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP HTTP/2 Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile http2" + ] + } + } + ] + }, + "Pointer_ILX_Profile": { + "description": "Reference to a iRules LX Profile", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP iRules LX Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile ilx" + ] + } + } + ] + }, + "Pointer_Integrated_Bot_Defense_Profile": { + "description": "Reference to a Integrated Bot Defense Profile", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP Integrated Bot Defense Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query saas bd profile" + ] + } + } + ] + }, + "Pointer_IP_Intelligence_Policy": { + "description": "Reference to a IP Intelligence Policy", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP IP Intelligence Policy", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security ip-intelligence policy" + ] + } + } + ] + }, + "Pointer_NAT_Source_Translation": { + "description": "Reference to a NAT Source Translation", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to NAT Source Translation declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "NAT_Source_Translation" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP NAT Source Translation", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security nat source-translation" + ] + } + } + ] + }, + "Pointer_Net_Address_List": { + "description": "Reference to a net address list", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to net address list declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Net_Address_List" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP net address list", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query net address-list" + ] + } + } + ] + }, + "Pointer_Net_Port_List": { + "description": "Reference to a net port list", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to net port list declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Net_Port_List" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP net port list", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query net port-list" + ] + } + } + ] + }, + "Pointer_Persist_Profile": { + "description": "Reference to a Persist Profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to Persist Profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Persist" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP Persist Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm persistence cookie", + "query ltm persistence dest-addr", + "query ltm persistence hash", + "query ltm persistence host", + "query ltm persistence msrdp", + "query ltm persistence sip", + "query ltm persistence source-addr", + "query ltm persistence ssl", + "query ltm persistence universal" + ] + } + } + ] + }, + "Pointer_RTSP_Profile": { + "description": "Reference to a Real Time Streaming Protocol Profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to Real Time Streaming Protocol Profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "RTSP_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP Real Time Streaming Protocol Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile rtsp" + ] + } + } + ] + }, + "Pointer_Access_Profile": { + "description": "Reference to a Access Profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to Access Profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Access_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP Access Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query apm profile access" + ] + } + } + ] + }, + "Pointer_Per_Request_Access_Policy": { + "description": "Reference to a Per Request Access Policy", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to Per Request Access Policy declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Per_Request_Access_Policy" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP Per Request Access Policy", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query apm policy access-policy" + ] + } + } + ] + }, + "Pointer_Connectivity_Profile": { + "description": "Reference to a Connectivity Profile", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP Connectivity Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query apm profile connectivity" + ] + } + } + ] + }, + "Pointer_IP_Other_Profile": { + "description": "Reference to a ipother profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to ipother profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "IP_Other_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP ipother profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile ipother" + ] + } + } + ] + }, + "Pointer_Radius_Profile": { + "description": "Reference to a radius profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to radius profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Radius_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP radius profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile radius" + ] + } + } + ] + }, + "Pointer_Persist": { + "description": "Reference to a persistence profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to persistence profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Persist" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP persistence profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm persistence" + ] + } + } + ] + }, + "Pointer_Analytics_Profile": { + "description": "Reference to a Analytics_Profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to Analytics_Profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Analytics_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP Analytics_Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile analytics" + ] + } + } + ] + }, + "Pointer_Analytics_TCP_Profile": { + "description": "Reference to a Analytics_TCP_Profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to Analytics_TCP_Profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Analytics_TCP_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP Analytics_TCP_Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile tcp-analytics" + ] + } + } + ] + }, + "Pointer_FIX_Profile": { + "description": "Reference to a FIX profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to FIX profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "FIX_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP FIX profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile fix" + ] + } + } + ] + }, + "Pointer_ICAP_Profile": { + "description": "Reference to a ICAP Profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to ICAP Profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "ICAP_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP ICAP Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile icap" + ] + } + } + ] + }, + "Pointer_Multiplex_Profile": { + "description": "Reference to a Multiplex profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to Multiplex profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Multiplex_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP Multiplex profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile one-connect" + ] + } + } + ] + }, + "Pointer_NTLM_Profile": { + "description": "Reference to a NT LAN Manager profile", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP NT LAN Manager profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile ntlm" + ] + } + } + ] + }, + "Pointer_PPTP_Profile": { + "description": "Reference to a PPTP_Profile", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP PPTP_Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile pptp" + ] + } + } + ] + }, + "Pointer_Rewrite_Profile": { + "description": "Reference to a Rewrite Profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to Rewrite Profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Rewrite_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP Rewrite Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile rewrite" + ] + } + } + ] + }, + "Pointer_Protocol_Inspection_Profile": { + "description": "Reference to a Protocol Inspection Profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to Protocol Inspection Profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Protocol_Inspection_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP Protocol Inspection Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security protocol-inspection profile" + ] + } + } + ] + }, + "Pointer_Statistics_Profile": { + "description": "Reference to a Statistics Profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to Statistics Profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Statistics_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP Statistics Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile statistics" + ] + } + } + ] + }, + "Pointer_TCP_Profile": { + "description": "Reference to a TCP profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to TCP profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "TCP_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP TCP profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile tcp" + ] + } + } + ] + }, + "Pointer_TLS_Client": { + "description": "Reference to a TLS Client", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to TLS Client declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "TLS_Client" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP TLS Client", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile server-ssl" + ] + } + } + ] + }, + "Pointer_Port_List": { + "description": "Reference to a firewall port list or net port list", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to firewall port list or net port list declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Firewall_Port_List", + "Net_Port_List" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP firewall port list or net port list", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security firewall port-list", + "query net port-list" + ] + } + } + ] + }, + "Pointer_Request_Adapt_Profile": { + "description": "Reference to a Request Adapt Profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to Request Adapt Profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Adapt_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP Request Adapt Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile request-adapt" + ] + } + } + ] + }, + "Pointer_Response_Adapt_Profile": { + "description": "Reference to a Response Adapt Profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to Response Adapt Profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Adapt_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP Response Adapt Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile response-adapt" + ] + } + } + ] + }, + "Pointer_Route_Domain": { + "description": "Reference to a route domain", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP route domain", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query net route-domain" + ] + } + } + ] + }, + "Pointer_SCTP_Profile": { + "description": "Reference to a SCTP Profile", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP SCTP Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile sctp" + ] + } + } + ] + }, + "Pointer_Security_Log_Profile": { + "description": "Reference to a Security Log Profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to Security Log Profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Security_Log_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP Security Log Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security log profile" + ] + } + } + ] + }, + "Pointer_Service": { + "description": "Reference to a service", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to service declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Service_Forwarding", + "Service_HTTPS", + "Service_HTTP", + "Service_TCP", + "Service_UDP", + "Service_L4", + "Service_Generic" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP virtual server", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm virtual" + ] + } + } + ] + }, + "Pointer_SOCKS_Profile": { + "description": "Reference to a SOCKS profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to SOCKS profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "SOCKS_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP SOCKS profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile socks" + ] + } + } + ] + }, + "Pointer_SSL_CRL_File": { + "description": "Reference to a SSL CRL file", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP SSL CRL file", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys file ssl-crl" + ] + } + } + ] + }, + "Pointer_Stream_Profile": { + "description": "Reference to a stream profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to stream profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Stream_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP stream profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile stream" + ] + } + } + ] + }, + "Pointer_TFTP_Profile": { + "description": "Reference to a TFTP profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to TFTP profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "TFTP_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP TFTP profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile tftp" + ] + } + } + ] + }, + "Pointer_Traffic_Log_Profile": { + "description": "Reference to a traffic log profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to traffic log profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Traffic_Log_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP Request Logging Profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile request-log" + ] + } + } + ] + }, + "Pointer_Tunnel": { + "description": "Reference to a network tunnel", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP network tunnel", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query net tunnels endpoint", + "query net tunnels etherip", + "query net tunnels fec", + "query net tunnels fec-stat", + "query net tunnels geneve", + "query net tunnels gre", + "query net tunnels ipip", + "query net tunnels ipsec", + "query net tunnels lw4o6", + "query net tunnels map", + "query net tunnels ppp", + "query net tunnels tcp-forward", + "query net tunnels tunnel", + "query net tunnels v6rd", + "query net tunnels vxlan", + "query net tunnels wccp", + "query net vlan" + ] + } + } + ] + }, + "Pointer_Service_Address": { + "description": "Reference to a Service Address", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to Service Address declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "Service_Address" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP Service Address", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm virtual-address" + ] + } + } + ] + }, + "Pointer_SSH_Proxy_Profile": { + "description": "Reference to a SSH proxy profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to SSH proxy profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "SSH_Proxy_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP SSH proxy profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query security ssh profile" + ] + } + } + ] + }, + "Pointer_SIP_Profile": { + "description": "Reference to a SIP profile", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP SIP profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile sip" + ] + } + } + ] + }, + "Pointer_UDP_Profile": { + "description": "Reference to a UDP profile", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to UDP profile declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "UDP_Profile" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP UDP profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile udp" + ] + } + } + ] + }, + "Pointer_VDI_Profile": { + "description": "Reference to a VDI profile", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP VDI profile", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query apm profile vdi" + ] + } + } + ] + }, + "Pointer_VLAN": { + "description": "Reference to a VLAN", + "type": "object", + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP VLAN", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query net vlan" + ] + } + } + ] + }, + "Pointer_WAF_Policy": { + "description": "Reference to a WAF policy", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to WAF policy declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "properties": { + "class": { + "enum": [ + "WAF_Policy" + ] + } + }, + "required": [ + "class" + ] + } + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP WAF policy", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query asm policy" + ] + } + } + ] + }, + "Analytics_Profile": { + "title": "Analytics Profile", + "type": "object", + "description": "HTTP Analytics profile with configurable options", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Analytics_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "captureFilter": { + "$ref": "#/definitions/Capture_Filter", + "default": {} + }, + "collectGeo": { + "title": "Collect Countries", + "description": "Specifies that the system collects statistics of the names of the countries from which that traffic was sent", + "type": "boolean", + "default": false + }, + "collectClientSideStatistics": { + "title": "Collect Client-Side Statistics", + "description": "Specifies that the system collects statistics regarding the HTTP request and response times", + "type": "boolean", + "default": false + }, + "collectUrl": { + "title": "Collect URL", + "description": "Specifies that the system collects statistics of requested URLs", + "type": "boolean", + "default": false + }, + "collectIp": { + "title": "Collect Client IP Addresses", + "description": "Specifies that the system collects statistics of the IP addresses of where the traffic came from", + "type": "boolean", + "default": false + }, + "collectSubnet": { + "title": "Collect Client Subnet", + "description": "Specifies that the system collects statistics of client subnets", + "type": "boolean", + "default": false + }, + "collectUserAgent": { + "title": "Collect User Agent", + "description": "Specifies that the system collects statistics about browsers used to send traffic", + "type": "boolean", + "default": false + }, + "collectOsAndBrowser": { + "title": "Collect Operating System and Browser", + "description": "Specifies that the system collect statistics about the OSs and Browsers used to send requests", + "type": "boolean", + "default": true + }, + "collectResponseCode": { + "title": "Collect Response Code", + "description": "Specifies that the system collects statistics about the distribution of HTTP response codes returned by the servers", + "type": "boolean", + "default": true + }, + "collectMethod": { + "title": "Collect Method", + "description": "Specifies that the system collects statistics about the distribution of HTTP methods found in requests", + "type": "boolean", + "default": true + }, + "collectMaxTpsAndThroughput": { + "title": "Collect Max TPS and Throughput", + "description": "Specifies that the system collects statistics for the maximum number of transactions per second, and the maximum amount of traffic moving through the system, both request and response throughput values", + "type": "boolean", + "default": false + }, + "collectPageLoadTime": { + "title": "Collect Page Load Time", + "description": "Specifies that the system collects statistics of the round-trip latency between client end-users and the servers", + "type": "boolean", + "default": false + }, + "collectUserSession": { + "title": "Collect User Sessions", + "description": "Specifies that the system collects statistics of the number of unique user sessions in the application traffic, as determined by the value of the configured HTTP cookies found in the requests", + "type": "boolean", + "default": false + }, + "collectedStatsInternalLogging": { + "title": "Collected Statistics Internal Logging", + "description": "Specifies that statistics logs are stored in the system", + "type": "boolean", + "default": true + }, + "collectedStatsExternalLogging": { + "title": "Collected Statistics External Logging", + "description": "Specifies that statistics logs are stored on a remote server", + "type": "boolean", + "default": false + }, + "capturedTrafficInternalLogging": { + "title": "Captured Traffic Internal Logging", + "description": "Specifies that the system captures a portion of the application traffic and sends it to a remote server", + "type": "boolean", + "default": false + }, + "capturedTrafficExternalLogging": { + "title": "Captured Traffic External Logging", + "description": "Specifies that the system captures a portion of the application traffic which can then be viewed on the System >> Logs >> Captured Transactions screen", + "type": "boolean", + "default": false + }, + "sessionCookieSecurity": { + "title": "Session Cookie Security", + "description": "Specify whether to secure session cookies", + "type": "string", + "enum": [ + "ssl-only", + "always-secure", + "never-secure" + ], + "default": "ssl-only" + }, + "sessionTimeoutMinutes": { + "title": "Session Timeout in Minutes", + "description": "The number of minutes of user non-activity ot allow before the system considers the session to be over", + "type": "integer", + "minimum": 5, + "maximum": 60, + "default": 5, + "multipleOf": 5 + }, + "externalLoggingPublisher": { + "$ref": "#/definitions/Pointer_Log_Publisher" + }, + "notificationBySyslog": { + "title": "Notification by syslog", + "description": "Specifies that the system sends notifications to the syslog", + "type": "boolean", + "default": false + }, + "notificationBySnmp": { + "title": "Notification by SNMP", + "description": "Specifies that the system sends notifications as SNMP traps", + "type": "boolean", + "default": false + }, + "notificationByEmail": { + "title": "Notification by Email", + "description": "Specifies that the system sends notifications by e-mail", + "type": "boolean", + "default": false + }, + "notificationEmailAddresses": { + "title": "E-mail Notification Recipients", + "description": "The e-mail addresses of a recipient to whom the system should send email notifications", + "type": "array", + "items": { + "title": "Email address", + "type": "string", + "format": "email" + }, + "uniqueItems": true + }, + "publishIruleStatistics": { + "title": "Publish iRule Statistics", + "description": "Specifies that the system collects and displays statistics according to the expressions written in an iRule", + "type": "boolean", + "default": false + }, + "urlsForStatCollection": { + "title": "URLs for Statistics Collection", + "description": "Specifies the requested URLs for collecting statistics", + "type": "array", + "items": { + "title": "URL", + "type": "string", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Analytics_Profile/properties/urlsForStatCollection/items" + } + }, + "uniqueItems": true + }, + "countriesForStatCollection": { + "title": "Countries for Statistics Collection", + "description": "Specifies the countries for collecting statistics", + "type": "array", + "items": { + "$ref": "#/definitions/Enum_Country_Analytics" + } + }, + "subnetsForStatCollection": { + "title": "Subnets for Statistics Collection", + "description": "Specifies the requested subnets for collecting statistics", + "type": "array", + "items": { + "title": "Subnet", + "type": "string", + "format": "f5ip" + }, + "uniqueItems": true + } + }, + "dependencies": { + "urlsForStatCollection": { + "properties": { + "collectUrl": { + "const": true + } + } + }, + "countriesForStatCollection": { + "properties": { + "collectGeo": { + "const": true + } + } + }, + "subnetsForStatCollection": { + "properties": { + "collectSubnet": { + "const": true + } + } + } + }, + "required": [ + "class" + ], + "additionalProperties": false, + "f5PostProcess": { + "tag": "modules", + "data": [ + "avr" + ], + "errSchemaPath": "#/definitions/Analytics_Profile" + } + }, + "Analytics_TCP_Profile": { + "title": "Analytics TCP Profile", + "type": "object", + "description": "TCP Analytics profile with configurable options", + "properties": { + "class": { + "type": "string", + "const": "Analytics_TCP_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "collectCity": { + "title": "Collect City", + "description": "Specifies that the system saves the name of the city with which traffic was exchanged", + "type": "boolean", + "default": false + }, + "collectContinent": { + "title": "Collect Continent", + "description": "Specifies that the system saves the name of the continent with which traffic was exchanged", + "type": "boolean", + "default": true + }, + "collectCountry": { + "title": "Collect Country", + "description": "Specifies that the system saves the name of the country with which traffic was exchanged", + "type": "boolean", + "default": true + }, + "collectedByClientSide": { + "title": "Collected By Client Side", + "description": "Specifies that system collects statistics on the client side", + "type": "boolean", + "default": true + }, + "collectedByServerSide": { + "title": "Collected By Server Side", + "description": "Specifies that system collects statistics on the server side", + "type": "boolean", + "default": true + }, + "collectedStatsExternalLogging": { + "title": "Collected Statistics External Logging", + "description": "Specifies that statistics logs are stored on a remote server", + "type": "boolean", + "default": false + }, + "collectedStatsInternalLogging": { + "title": "Collected Statistics Internal Logging", + "description": "Specifies that statistics logs are stored in the system", + "type": "boolean", + "default": true + }, + "collectNexthop": { + "title": "Collect Next Hop Ethernet Address", + "description": "Specifies that the system saves the address to which the traffic is being routed", + "type": "boolean", + "default": false + }, + "collectPostCode": { + "title": "Collect Post Code", + "description": "Specifies that the system saves the name of the postcode with which traffic was exchanged", + "type": "boolean", + "default": false + }, + "collectRegion": { + "title": "Collect Region", + "description": "Specifies that the system saves the name of the region with which traffic was exchanged", + "type": "boolean", + "default": true + }, + "collectRemoteHostIp": { + "title": "Collect Remote Host IP", + "description": "Specifies that the system collects IP addresses with which traffic was exchanged", + "type": "boolean", + "default": false + }, + "collectRemoteHostSubnet": { + "title": "Collect Remote Host Subnet", + "description": "Specifies that the system saves the address of the subnet with which traffic was exchanged", + "type": "boolean", + "default": true + }, + "externalLoggingPublisher": { + "$ref": "#/definitions/Pointer_Log_Publisher" + } + }, + "required": [ + "class" + ], + "additionalProperties": false, + "f5PostProcess": { + "tag": "modules", + "data": [ + "avr" + ], + "errSchemaPath": "#/definitions/Analytics_TCP_Profile" + } + }, + "Basic_Auth": { + "title": "Basic Authentication", + "type": "object", + "description": "Describes the basic authentication to access a resource", + "properties": { + "method": { + "type": "string", + "description": "Specifies the authentication method", + "enum": [ + "basic" + ] + }, + "username": { + "description": "Specifies the user name for authentication", + "type": "string" + }, + "passphrase": { + "description": "Specifies the password for authentication", + "properties": { + "allowReuse": { + "type": "boolean", + "description": "If true, other declaration objects may reuse this value", + "default": false + } + }, + "allOf": [ + { + "$ref": "#/definitions/Property_Passphrase" + }, + { + "f5PostProcess": { + "data": "object", + "tag": "fetch", + "errSchemaPath": "#/definitions/Basic_Auth/properties/passphrase/allOf/1" + } + } + ] + } + }, + "required": [ + "method", + "username", + "passphrase" + ], + "additionalProperties": false + }, + "Basic_Monitor": { + "title": "Monitor", + "description": "Monitor definition", + "oneOf": [ + { + "type": "string", + "enum": [ + "http", + "https", + "http2", + "icmp", + "tcp-half-open", + "tcp" + ] + }, + { + "$ref": "#/definitions/Pointer_Monitor" + } + ] + }, + "Bearer_Token": { + "title": "Bearer Token Authorization", + "description": "Describes using a bearer token to access a resource", + "type": "object", + "properties": { + "method": { + "description": "Specifies the authentication method", + "type": "string", + "const": "bearer-token" + }, + "token": { + "description": "Specifies the bearer token", + "oneOf": [ + { + "type": "string", + "description": "plain text bearer token", + "minLength": 1 + }, + { + "type": "object", + "allOf": [ + { + "required": [ + "ciphertext" + ] + }, + { + "$ref": "#/definitions/Secret" + } + ] + } + ], + "f5PostProcess": { + "tag": "longSecret", + "errSchemaPath": "#/definitions/Bearer_Token/properties/token" + } + } + }, + "required": [ + "method", + "token" + ], + "additionalProperties": false + }, + "CA_Bundle": { + "title": "CA Bundle", + "description": "Bundle of one or more PKI Certificate-Authority certificates", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "CA_Bundle" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "bundle": { + "description": "Reference to a CA bundle or string of PEM encoded certificates", + "allOf": [ + { + "$ref": "#/definitions/Pointer_F5_String_Or_BIGIP" + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "pki-cert", + "errSchemaPath": "#/definitions/CA_Bundle/properties/bundle/allOf/1" + } + }, + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys file ssl-cert" + ], + "errSchemaPath": "#/definitions/CA_Bundle/properties/bundle/allOf/2" + } + } + ] + } + }, + "additionalProperties": false, + "required": [ + "class", + "bundle" + ] + }, + "Capture_Filter": { + "title": "Capture Filter", + "description": "Criteria determining when the system captures a portion of the application traffic", + "type": "object", + "properties": { + "requestCapturedParts": { + "title": "Request Captured Parts", + "description": "Specifies which parts of the request data the system captures", + "type": "string", + "enum": [ + "all", + "body", + "headers", + "none" + ], + "default": "none" + }, + "responseCapturedParts": { + "title": "Response Captured Parts", + "description": "Specifies which parts of the response data the system captures", + "type": "string", + "enum": [ + "all", + "body", + "headers", + "none" + ], + "default": "none" + }, + "dosActivity": { + "title": "DoS Activity", + "description": "Specifies whether the system captures traffic data mitigated by the DoS Layer 7 Enforcer, or traffic regardless of DoS activity", + "type": "string", + "enum": [ + "any", + "mitigated-by-dosl7" + ], + "default": "any" + }, + "capturedProtocols": { + "title": "Captured Protocols", + "description": "Specifies whether the system captures traffic data that is sent using any protocol, or a specific type of protocol", + "type": "string", + "enum": [ + "all", + "http", + "https" + ], + "default": "all" + }, + "capturedReadyForJsInjection": { + "title": "Qualified for JavaScript Injection", + "description": "Specifies whether the system captures all traffic data from all transactions or only from transactions that qualify for JavaScript injection", + "type": "string", + "enum": [ + "disabled", + "enabled" + ], + "default": "disabled" + }, + "virtualServers": { + "title": "Virtual Servers", + "description": "Specifies whether the system captures traffic data sent from/to all virtual servers, or only from/to specific virtual servers. If none are specified then all will be collected", + "type": "array", + "items": { + "title": "Virtual Server", + "type": "string" + }, + "uniqueItems": true, + "default": [] + }, + "nodeAddresses": { + "title": "Node Addresses", + "description": "Specifies whether the system captures traffic data sent from/to all nodes, or only from/to specific nodes. If none are specified then all will be collected", + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true, + "default": [] + }, + "responseCodes": { + "title": "Response Status Codes", + "description": "Specifies whether the system captures traffic data based on the HTTP response status codes that the requests return. If none are specified then all will be collected", + "type": "array", + "items": { + "title": "Response Status Code", + "type": "integer", + "minimum": 100, + "maximum": 999 + }, + "maxItems": 10, + "uniqueItems": true, + "default": [] + }, + "methods": { + "title": "HTTP Methods", + "description": "Specifies whether the system captures traffic data based on the HTTP method that was requested. If none are specified then all will be collected", + "type": "array", + "items": { + "title": "HTTP Method", + "type": "string" + }, + "maxItems": 10, + "uniqueItems": true, + "default": [] + }, + "urlFilterType": { + "title": "URL Filter Type", + "description": "Specifies how the URL path prefixes are interpreted", + "type": "string", + "enum": [ + "all", + "black-list", + "white-list" + ], + "default": "all" + }, + "urlPathPrefixes": { + "title": "URL Path Prefixes", + "description": "Specifies URLs the filter type is to be applied to. If none are specified then all will be collected", + "type": "array", + "items": { + "title": "URL", + "type": "string", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Capture_Filter/properties/urlPathPrefixes/items" + } + }, + "maxItems": 10, + "uniqueItems": true, + "default": [] + }, + "userAgentSubstrings": { + "title": "User Agent Substrings", + "description": "Specifies whether the system captures traffic sent from all browsers, or only traffic sent from a specific browser", + "type": "array", + "items": { + "title": "User Agent Substring", + "type": "string", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Capture_Filter/properties/userAgentSubstrings/items" + } + }, + "maxItems": 10, + "uniqueItems": true, + "default": [] + }, + "clientIps": { + "title": "Client IP Addresses", + "description": "Specifies the client IP addresses to collect stats for. If none are specified, then all will be collected", + "type": "array", + "items": { + "title": "Client IP Address", + "type": "string", + "format": "f5ip" + }, + "maxItems": 10, + "uniqueItems": true, + "default": [] + }, + "requestContentFilterSearchPart": { + "title": "Request Content Filter Search Part", + "description": "Specifies the part of the request that should be filtered by the search string", + "type": "string", + "enum": [ + "all", + "headers", + "body", + "none", + "uri" + ], + "default": "none" + }, + "requestContentFilterSearchString": { + "title": "Request Content Filter Search String", + "description": "Specifies the string the request should be searched for", + "type": "string" + }, + "responseContentFilterSearchPart": { + "title": "Response Content Filter Search Part", + "description": "Specifies the part of the response that should be filtered by the search string", + "type": "string", + "enum": [ + "all", + "body", + "headers", + "none" + ], + "default": "none" + }, + "responseContentFilterSearchString": { + "title": "Response Content Filter Search String", + "description": "Specifies the string the response should be searched for", + "type": "string" + } + }, + "dependencies": { + "requestContentFilterSearchString": { + "properties": { + "requestContentFilterSearchPart": { + "not": { + "const": "none" + } + } + } + }, + "responseContentFilterSearchString": { + "properties": { + "responseContentFilterSearchPart": { + "not": { + "const": "none" + } + } + } + } + } + }, + "Certificate": { + "title": "Certificate", + "description": "Configures a Certificate", + "type": "object", + "properties": { + "class": { + "type": "string", + "const": "Certificate" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "certificate": { + "title": "Certificate", + "description": "X.509 public-key certificate", + "allOf": [ + { + "$ref": "#/definitions/Pointer_System_All_Or_F5_String" + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "pki-cert", + "errSchemaPath": "#/definitions/Certificate/properties/certificate/allOf/1" + } + }, + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys file ssl-cert" + ], + "errSchemaPath": "#/definitions/Certificate/properties/certificate/allOf/2" + } + } + ] + }, + "privateKey": { + "title": "Private Key", + "description": "Private key matching certificate's public key (optional)", + "allOf": [ + { + "$ref": "#/definitions/Pointer_System_All_Or_F5_String" + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "pki-key", + "errSchemaPath": "#/definitions/Certificate/properties/privateKey/allOf/1" + } + }, + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys file ssl-key" + ], + "errSchemaPath": "#/definitions/Certificate/properties/privateKey/allOf/2" + } + } + ] + }, + "chainCA": { + "title": "CA chain", + "description": "Bundle of one or more CA certificates in trust-chain from root CA to certificate (optional)", + "type": [ + "object", + "string" + ], + "anyOf": [ + { + "$ref": "#/definitions/Pointer_F5_String_Or_BIGIP" + }, + { + "$ref": "#/definitions/Pointer_CA_Bundle" + } + ], + "allOf": [ + { + "f5PostProcess": { + "tag": "fetch", + "data": "pki-bundle", + "errSchemaPath": "#/definitions/Certificate/properties/chainCA/allOf/0" + } + }, + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys file ssl-cert" + ], + "errSchemaPath": "#/definitions/Certificate/properties/chainCA/allOf/1" + } + } + ] + }, + "passphrase": { + "title": "Passphrase", + "description": "If supplied, used to decrypt privateKey at runtime (optional)", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "allOf": [ + { + "$ref": "#/definitions/Property_Passphrase" + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "object", + "errSchemaPath": "#/definitions/Certificate/properties/passphrase/allOf/1" + } + } + ], + "type": "object" + }, + "pkcs12": { + "title": "PKCS#12 certificate+key", + "description": "The pkcs12 value which may be a url to fetch the binary file from or base64 encoded string", + "allOf": [ + { + "$ref": "#/definitions/Pointer_F5_String_Or_BIGIP" + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "pkcs12", + "errSchemaPath": "#/definitions/Certificate/properties/pkcs12/allOf/1" + } + }, + { + "f5PostProcess": { + "tag": "certExtract", + "errSchemaPath": "#/definitions/Certificate/properties/pkcs12/allOf/2" + } + } + ] + }, + "pkcs12Options": { + "title": "PKCS#12 certificate+key Options", + "description": "Options for importing PKCS12 file", + "type": "object", + "properties": { + "keyImportFormat": { + "title": "PKCS#12 Private Key Format", + "description": "Determines the format in which the private key is saved. Default is PKCS#8.", + "type": "string", + "enum": [ + "pkcs8", + "openssl-legacy" + ], + "default": "pkcs8" + }, + "ignoreChanges": { + "title": "Ignore changes", + "description": "Key has to be decrypted and re-encrypted as part of extraction, resulting in a diff. Set to true to exclude the pkcs12 object for subsequent deployments.", + "type": "boolean", + "default": false + }, + "internalOnly": { + "title": "BIG-IP AS3 internal use only", + "description": "BIG-IP AS3 uses this property internally. Any values supplied here will be ignored", + "type": "array", + "items": { + "type": [ + "string", + "number", + "boolean", + "object", + "array" + ] + }, + "readOnly": true + } + } + }, + "staplerOCSP": { + "title": "OCSP Stapler", + "description": "BIG-IP AS3 pointer to OCSP Stapler declaration (optional)", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Certificate_Validator_OCSP" + } + ] + }, + "issuerCertificate": { + "type": "object", + "description": "Specifies the name of the issuer certificate for this certificate", + "allOf": [ + { + "$ref": "#/definitions/Pointer_SSL_Certificate" + } + ] + } + }, + "required": [ + "class" + ], + "additionalProperties": false, + "dependencies": { + "staplerOCSP": { + "required": [ + "issuerCertificate" + ] + } + }, + "if": { + "required": [ + "pkcs12" + ] + }, + "then": { + "dependencies": { + "certificate": { + "not": {} + }, + "privateKey": { + "not": {} + } + } + }, + "else": { + "required": [ + "certificate" + ], + "not": { + "required": [ + "pkcs12" + ] + } + } + }, + "Certificate_Validator_OCSP": { + "title": "Certificate_Validator_OCSP", + "description": "OCSP validator for certificates", + "type": "object", + "properties": { + "class": { + "const": "Certificate_Validator_OCSP", + "title": "Class", + "type": "string" + }, + "dnsResolver": { + "allOf": [ + { + "$ref": "#/definitions/Pointer_DNS_Resolver" + } + ], + "description": "BIG-IP AS3 pointer to DNS resolver used to resolve hostnames in client requests", + "title": "DNS resolver" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "responderUrl": { + "description": "Specifies the absolute URL that overrides the OCSP responder URL obtained from the certificate's AIA extension(s). This should be a HTTP based URL.", + "minLength": 3, + "title": "Responder URL", + "type": "string" + }, + "signingCertificate": { + "allOf": [ + { + "$ref": "#/definitions/Pointer_SSL_Certificate" + } + ], + "description": "Specifies the certificate object to use for OCSP responders that require the request to be signed", + "title": "Request Signing Certificate Object" + }, + "signingHashAlgorithm": { + "default": "sha256", + "description": "Specifies a hash algorithm used to sign an OCSP request", + "enum": [ + "sha1", + "sha256" + ], + "title": "Request Signing Hash Algorithm", + "type": "string" + }, + "timeout": { + "default": 8, + "description": "Specifies the time interval (in seconds) that the BIG-IP waits for before ending the connection to the OCSP responder. The default value is 8", + "maximum": 300, + "minimum": 1, + "title": "Timeout", + "type": "integer" + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "Constants": { + "title": "Constants", + "description": "Named values for (re-)use by declaration objects", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Constants" + } + }, + "propertyNames": { + "maxLength": 64, + "pattern": "^[A-Za-z][0-9A-Za-z_]*$" + }, + "additionalProperties": { + "if": { + "required": [ + "protected", + "ciphertext" + ], + "type": "object" + }, + "then": { + "allOf": [ + { + "$ref": "#/definitions/JWE" + } + ], + "properties": { + "allowReuse": { + "default": true, + "description": "If true (default), cryptogram may be reused by different declaration objects, WHICH MAY POSE A SECURITY RISK!", + "title": "Allow reuse", + "type": "boolean" + } + } + }, + "type": [ + "boolean", + "integer", + "number", + "string", + "array", + "object" + ] + }, + "required": [ + "class" + ] + }, + "Controls": { + "title": "Controls", + "type": "object", + "description": "Optional controls configuration", + "properties": { + "archiveId": { + "description": "Read-only property present when you GET a declaration from configuration system. Archived versions of declaration are identified by a combination of 'id' and 'archiveId'", + "readOnly": true, + "title": "Archive ID", + "type": [ + "number", + "string" + ] + }, + "archiveTimestamp": { + "description": "Read-only property present when you GET a declaration from configuration system. Indicates when this version (see archiveId) of declaration was archived", + "format": "date-time", + "readOnly": true, + "title": "Archive timestamp", + "type": "string" + }, + "class": { + "title": "Class", + "type": "string", + "const": "Controls", + "default": "Controls" + }, + "dryRun": { + "default": false, + "description": "Boolean that indicates if this declaration will be run as a dry-run. If true, the declaration will NOT make any changes to the system, but will respond with whether or not it would.", + "title": "Dry-Run Option", + "type": "boolean" + }, + "fortune": { + "description": "If true, BIG-IP AS3 will activate Zoltar mode and read you your fortune", + "title": "Fortune", + "type": "boolean" + }, + "logLevel": { + "title": "Log level", + "description": "Controls the amount of detail in logs produced while configuring this Tenant (default is whole-declaration Controls/logLevel value)", + "type": "string", + "enum": [ + "emergency", + "alert", + "critical", + "error", + "warning", + "notice", + "info", + "debug" + ], + "default": "error" + }, + "trace": { + "default": false, + "description": "If true, BIG-IP AS3 creates a detailed trace of the configuration process for this Tenant for subsequent analysis (default is whole-declaration Controls/trace value). Warning: trace files may contain sensitive configuration data", + "title": "Trace", + "type": "boolean" + }, + "traceResponse": { + "title": "Trace Response", + "description": "If true, the response will contain the trace files", + "type": "boolean", + "default": false + }, + "userAgent": { + "title": "User Agent", + "description": "User Agent information to include in TEEM report", + "type": "string" + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "DNS_Logging_Profile": { + "title": "DNS Logging Profile", + "type": "object", + "description": "Configures a Domain Name System (DNS) logging profile", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "DNS_Logging_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "includeCompleteAnswer": { + "description": "Specifies whether the system logs the complete answer from the query", + "type": "boolean", + "default": true + }, + "includeQueryId": { + "description": "Specifies whether the system logs the ID of the query", + "type": "boolean", + "default": false + }, + "includeSource": { + "description": "Specifies whether the system logs the source (the BIG-IP system that receives the packet)", + "type": "boolean", + "default": true + }, + "includeTimestamp": { + "description": "Specifies whether the system logs the timestamp of when the query was created", + "type": "boolean", + "default": true + }, + "includeView": { + "description": "Specifies whether the system includes the view in the log", + "type": "boolean", + "default": true + }, + "logPublisher": { + "$ref": "#/definitions/Pointer_Log_Publisher" + }, + "logQueriesEnabled": { + "description": "Specifies whether the system logs queries", + "type": "boolean", + "default": true + }, + "logResponsesEnabled": { + "description": "Specifies whether the systems logs responses", + "type": "boolean", + "default": false + } + }, + "required": [ + "class", + "logPublisher" + ], + "additionalProperties": false + }, + "Enum_Country_Analytics": { + "title": "Enum values for Analytics_Profile", + "description": "Enum values for Analytics_Profile", + "type": "string", + "enum": [ + "Afghanistan", + "Aland Islands", + "Albania", + "Algeria", + "American Samoa", + "Andorra", + "Angola", + "Anguilla", + "Anonymous Proxy", + "Antarctica", + "Antigua and Barbuda", + "Argentina", + "Armenia", + "Aruba", + "Asia/Pacific Region", + "Australia", + "Austria", + "Azerbaijan", + "Bahamas", + "Bahrain", + "Bangladesh", + "Barbados", + "Belarus", + "Belgium", + "Belize", + "Benin", + "Bermuda", + "Bhutan", + "Bolivia", + "Bonaire, Saint Eustatius and Saba", + "Bosnia and Herzegovina", + "Botswana", + "Bouvet Island", + "Brazil", + "British Indian Ocean Territory", + "Brunei Darussalam", + "Bulgaria", + "Burkina Faso", + "Burundi", + "Cambodia", + "Cameroon", + "Canada", + "Cape Verde", + "Cayman Islands", + "Central African Republic", + "Chad", + "Chile", + "China", + "Christmas Island", + "Cocos (Keeling) Islands", + "Colombia", + "Comoros", + "Congo", + "Congo, The Democratic Republic of the", + "Cook Islands", + "Costa Rica", + "Cote D'Ivoire", + "Croatia", + "Cuba", + "Cyprus", + "Czech Republic", + "Denmark", + "Djibouti", + "Dominica", + "Dominican Republic", + "Ecuador", + "Egypt", + "El Salvador", + "Equatorial Guinea", + "Eritrea", + "Estonia", + "Ethiopia", + "Europe", + "Falkland Islands (Malvinas)", + "Faroe Islands", + "Fiji", + "Finland", + "France", + "France, Metropolitan", + "French Guiana", + "French Polynesia", + "French Southern Territories", + "Gabon", + "Gambia", + "Georgia", + "Germany", + "Ghana", + "Gibraltar", + "Greece", + "Greenland", + "Grenada", + "Guadeloupe", + "Guam", + "Guatemala", + "Guernsey", + "Guinea", + "Guinea-Bissau", + "Guyana", + "Haiti", + "Heard Island and McDonald Islands", + "Holy See (Vatican City State)", + "Honduras", + "Hong Kong", + "Hungary", + "Iceland", + "India", + "Indonesia", + "Iran, Islamic Republic of", + "Iraq", + "Ireland", + "Isle of Man", + "Israel", + "Italy", + "Jamaica", + "Japan", + "Jersey", + "Jordan", + "Kazakhstan", + "Kenya", + "Kiribati", + "Korea, Democratic People's Republic of", + "Korea, Republic of", + "Kuwait", + "Kyrgyzstan", + "Lao People's Democratic Republic", + "Latvia", + "Lebanon", + "Lesotho", + "Liberia", + "Libyan Arab Jamahiriya", + "Liechtenstein", + "Lithuania", + "Luxembourg", + "Macau", + "Macedonia", + "Madagascar", + "Malawi", + "Malaysia", + "Maldives", + "Mali", + "Malta", + "Marshall Islands", + "Martinique", + "Mauritania", + "Mauritius", + "Mayotte", + "Mexico", + "Micronesia, Federated States of", + "Moldova, Republic of", + "Monaco", + "Mongolia", + "Montenegro", + "Montserrat", + "Morocco", + "Mozambique", + "Myanmar", + "Namibia", + "Nauru", + "Nepal", + "Netherlands", + "Netherlands Antilles", + "New Caledonia", + "New Zealand", + "Nicaragua", + "Niger", + "Nigeria", + "Niue", + "Norfolk Island", + "Northern Mariana Islands", + "Norway", + "Oman", + "Other", + "Pakistan", + "Palau", + "Palestinian Territory", + "Panama", + "Papua New Guinea", + "Paraguay", + "Peru", + "Philippines", + "Pitcairn Islands", + "Poland", + "Portugal", + "Puerto Rico", + "Qatar", + "Reunion", + "Romania", + "Russian Federation", + "Rwanda", + "Saint Barthelemy", + "Saint Helena", + "Saint Kitts and Nevis", + "Saint Lucia", + "Saint Martin", + "Saint Pierre and Miquelon", + "Saint Vincent and the Grenadines", + "Samoa", + "San Marino", + "Sao Tome and Principe", + "Satellite Provider", + "Saudi Arabia", + "Senegal", + "Serbia", + "Seychelles", + "Sierra Leone", + "Singapore", + "Slovakia", + "Slovenia", + "Solomon Islands", + "Somalia", + "South Africa", + "South Georgia and the South Sandwich Islands", + "Spain", + "Sri Lanka", + "Sudan", + "Suriname", + "Svalbard and Jan Mayen", + "Swaziland", + "Sweden", + "Switzerland", + "Syrian Arab Republic", + "Taiwan", + "Tajikistan", + "Tanzania, United Republic of", + "Thailand", + "Timor-Leste", + "Togo", + "Tokelau", + "Tonga", + "Trinidad and Tobago", + "Tunisia", + "Turkey", + "Turkmenistan", + "Turks and Caicos Islands", + "Tuvalu", + "Uganda", + "Ukraine", + "United Arab Emirates", + "United Kingdom", + "United States", + "United States Minor Outlying Islands", + "Unknown", + "Uruguay", + "Uzbekistan", + "Vanuatu", + "Venezuela", + "Vietnam", + "Virgin Islands, British", + "Virgin Islands, U.S.", + "Wallis and Futuna", + "Western Sahara", + "Yemen", + "Zambia", + "Zimbabwe" + ] + }, + "F5_String": { + "title": "Common definition for ways to define a value that needs to be resolved", + "description": "The value can be either a string, text property, base64 property, url property, etc.", + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "text": { + "$ref": "#/definitions/Property_Text" + }, + "base64": { + "$ref": "#/definitions/Property_Base64" + }, + "url": { + "$ref": "#/definitions/Resource_URL" + }, + "copyFrom": { + "$ref": "#/definitions/Pointer_Copy_From" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1 + } + ], + "errorMessage": "must be a string or an object with a single property of 'text', 'base64', 'url', or 'copyFrom'. Example formats: 'your_string', { \"text\": \"your_string\" }, { \"base64\": \"base64_value\" }, { \"url\": \"your_url\" }, or { \"copyFrom\": \"pointer_value\" }" + }, + "HTTP_Acceleration_Profile": { + "title": "HTTP acceleration profile", + "type": "object", + "description": "HTTP acceleration profile with configurable options", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "HTTP_Acceleration_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "agingRate": { + "description": "Rate at which a cache entry ages", + "type": "integer", + "minimum": 0, + "maximum": 10, + "default": 9 + }, + "cacheSize": { + "description": "The maximum size (in megabytes) for the cache.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 100 + }, + "ignoreHeaders": { + "description": "Which cache disabling headers will be ignored by the system", + "type": "string", + "enum": [ + "none", + "max-age", + "all" + ], + "default": "all" + }, + "insertAgeHeaderEnabled": { + "description": "Age and date headers are inserted into the response when enabled", + "type": "boolean", + "default": true + }, + "maximumAge": { + "description": "How long (in seconds) the system will consider the cached content valid", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 3600 + }, + "maximumEntries": { + "description": "The maximum number of entries that can reside in the cache", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 10000 + }, + "maximumObjectSize": { + "description": "The largest object (in bytes) that the system will cache", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 50000 + }, + "metadataMaxSize": { + "default": 25, + "description": "The maximum size (in megabytes) of the metadata cache", + "maximum": 4294967295, + "minimum": 0, + "type": "integer" + }, + "minimumObjectSize": { + "description": "The smallest object (in bytes) that the system will cache", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 500 + }, + "parentProfile": { + "$ref": "#/definitions/Pointer_HTTP_Acceleration_Profile", + "default": { + "bigip": "/Common/webacceleration" + }, + "description": "The profile that this profile inherits values from" + }, + "uriExcludeList": { + "description": "A list of URIs that will be excluded from the cache", + "type": "array", + "items": { + "type": "string", + "minLength": 1 + }, + "uniqueItems": true + }, + "uriIncludeList": { + "description": "A list of URIs that will be cacheable", + "type": "array", + "items": { + "type": "string", + "minLength": 1 + }, + "uniqueItems": true + }, + "uriIncludeOverrideList": { + "description": "A list of URIs that should be cached even though they may normally not be due to existing constraints", + "type": "array", + "items": { + "type": "string", + "minLength": 1 + }, + "uniqueItems": true + }, + "uriPinnedList": { + "description": "A list of URIs that are kept in the cache regardless of maxAge or expiry settings", + "type": "array", + "items": { + "type": "string", + "minLength": 1 + }, + "uniqueItems": true + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "HTTP_Compress": { + "title": "HTTP Compression profile", + "type": "object", + "description": "HTTP Compression profile with configurable options", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "HTTP_Compress" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "allowHTTP10": { + "description": "Specifies whether to forward HTTP 1.0 requests/responses (default false)", + "type": "boolean", + "default": false + }, + "bufferSize": { + "title": "Buffer size", + "description": "Maximum number of response octets to buffer before deciding whether to apply compression (default 4096)", + "type": "integer", + "minimum": 256, + "maximum": 4294967295, + "default": 4096 + }, + "contentTypeExcludes": { + "title": "Content-Type exclude list", + "description": "List of response Content-Type values which BIG-IP AS3 should not compress. Values are regular expressions that match Content-Type strings", + "type": "array", + "items": { + "type": "string", + "pattern": "^[^\\x00-\\x1f\\x22\\x7f-\\xff]+$" + }, + "uniqueItems": true + }, + "contentTypeIncludes": { + "title": "Content-Type include list", + "description": "List of response Content-Type values which BIG-IP AS3 should compress. Values are regular expressions that match Content-Type strings", + "type": "array", + "items": { + "type": "string", + "pattern": "^[^\\x00-\\x1f\\x22\\x7f-\\xff]+$" + }, + "uniqueItems": true, + "default": [ + "text/", + "application/(xml|x-javascript)" + ] + }, + "cpuSaver": { + "default": true, + "description": "If true (default), system will reduce compression rate when CPU utilization exceeds cpuSaverHigh threshold and increase it when CPU utilization falls below cpuSaverLow threshold", + "title": "CPU saver", + "type": "boolean" + }, + "cpuSaverHigh": { + "default": 90, + "description": "CPU utilization percentage (default 90) above which BIG-IP AS3 should moderate compression", + "maximum": 99, + "minimum": 15, + "title": "CPU-saver %high", + "type": "integer" + }, + "cpuSaverLow": { + "default": 75, + "description": "CPU utilization percentage (default 75) below which the system returns compression to normal", + "maximum": 95, + "minimum": 10, + "title": "CPU-saver %low", + "type": "integer" + }, + "gzipLevel": { + "title": "GZIP level", + "description": "Compression level (default 1); higher values produce greater compression but use more CPU cycles", + "type": "integer", + "minimum": 1, + "maximum": 9, + "default": 1 + }, + "gzipMemory": { + "title": "GZIP memory level", + "description": "Compression memory allocation in kilobytes (default 8), should be a power of two", + "type": "integer", + "minimum": 1, + "maximum": 256, + "default": 8 + }, + "gzipWindowSize": { + "title": "GZIP window size", + "description": "Compression window size in kilobytes (default 16), should be a power of two", + "type": "integer", + "minimum": 1, + "maximum": 128, + "default": 16 + }, + "keepAcceptEncoding": { + "title": "Keep Accept-Encoding header", + "description": "Specifies that the system does not remove the Accept-Encoding header from an HTTP request (default false)", + "type": "boolean", + "default": false + }, + "minimumSize": { + "default": 1024, + "description": "BIG-IP AS3 will not compress responses of fewer octets than this (default 1024)", + "maximum": 131072, + "minimum": 128, + "title": "Minimum size to compress", + "type": "integer" + }, + "preferMethod": { + "default": "gzip", + "description": "Select preferred compression method (default gzip, strongly recommended)", + "enum": [ + "gzip", + "deflate" + ], + "title": "Prefer method", + "type": "string" + }, + "selective": { + "default": false, + "description": "If true, BIG-IP AS3 will only compress a response when an iRule attached to the virtual server requests it (default is false, meaning BIG-IP AS3 will compress responses which meet the criteria in this profile)", + "title": "Selective mode", + "type": "boolean" + }, + "uriExcludes": { + "title": "URI exclude list", + "description": "List of request URI's for which BIG-IP AS3 should not compress responses. Values are regular expressions that match request URI strings", + "type": "array", + "items": { + "type": "string", + "pattern": "^[^\\x00-\\x1f\\x7f-\\xff]+$" + }, + "uniqueItems": true + }, + "uriIncludes": { + "title": "URI include list", + "description": "List of request URI's for which BIG-IP AS3 should compress responses. Values are regular expressions that match URI strings", + "type": "array", + "items": { + "type": "string", + "pattern": "^[^\\x00-\\x1f\\x7f-\\xff]+$" + }, + "uniqueItems": true + }, + "varyHeader": { + "default": true, + "description": "If true (default), a Vary header will appear in compressed responses", + "title": "Vary header", + "type": "boolean" + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "HTTP_Profile": { + "title": "HTTP profile", + "type": "object", + "description": "HTTP profile with configurable options", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "HTTP_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "allowBlankSpaceAfterHeaderName": { + "default": false, + "description": "Specifies whether to allow blank space in an HTTP header between the header name and the separator colon in an HTTP request or response. Requires TMOS version 16.1 or newer.", + "title": "Allow Blank Space After Header Name", + "type": "boolean" + }, + "allowedResponseHeaders": { + "description": "By default BIG-IP AS3 passes HTTP headers in responses from pool members to clients unaltered. You may list names of allowed response headers here and BIG-IP AS3 removes any you do not list from responses.", + "items": { + "maxLength": 128, + "minLength": 1, + "pattern": "^[^\\x00-\\x20\\x22:\\x5c\\x7f-\\xff]+$", + "title": "Allowed header", + "type": "string" + }, + "title": "Allow response headers", + "type": "array", + "uniqueItems": true + }, + "cookiePassphrase": { + "title": "Cookie encryption passphrase", + "description": "Used to create secret key for cookie encryption (when missing, BIG-IP AS3 uses a system-generated key)", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "allOf": [ + { + "$ref": "#/definitions/Property_Passphrase" + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "object", + "errSchemaPath": "#/definitions/HTTP_Profile/properties/cookiePassphrase/allOf/1" + } + } + ], + "type": "object" + }, + "encryptCookies": { + "title": "Encrypt cookies", + "description": "List cookies to encrypt en-route to the client and decrypt en-route to a pool member", + "type": "array", + "items": { + "title": "Cookie name", + "type": "string", + "pattern": "^[^\\x00-\\x20\\x22=\\x5c\\x7f-\\xff]+$" + }, + "uniqueItems": true + }, + "enforceRFCCompliance": { + "default": false, + "description": "BIG-IP LTM performs basic RFC compliance checks as described in the latest RFC for the HTTP protocol. If a client request fails these checks, then the connection is reset. Requires TMOS version 15.0 or newer.", + "title": "Enforce RFC Compliance", + "type": "boolean" + }, + "fallbackRedirect": { + "title": "Fallback Redirect", + "description": "Domain name (or IP address) of service (if any) to which BIG-IP AS3 should redirect a request when no pool member is responsive or selected pool member returns a fallbackStatusCode", + "type": "string", + "minLength": 1, + "anyOf": [ + { + "format": "uri" + }, + { + "format": "f5ip" + } + ] + }, + "fallbackStatusCodes": { + "description": "When a pool member responds to a request with one of these HTTP status codes (for example, 500), redirect the client to the fallbackRedirect", + "items": { + "maximum": 999, + "minimum": 100, + "title": "Status code", + "type": "integer" + }, + "title": "Fallback status codes", + "type": "array", + "uniqueItems": true + }, + "hstsIncludeSubdomains": { + "default": true, + "description": "If true then HSTS headers (see hstsInsert) will tell clients to apply HSTS settings to the hostnames of this service and all their possible subdomains. Warning: an incorrect value here can make multiple websites unreachable, not just this service", + "title": "Include subdomains in HSTS", + "type": "boolean" + }, + "hstsInsert": { + "default": false, + "description": "If true, insert HSTS (HTTP Strict Transport Security) headers into responses sent to clients (default false). Warning: misconfiguration of HSTS can make a website unreachable", + "title": "Insert HSTS headers", + "type": "boolean" + }, + "hstsPeriod": { + "default": 7862400, + "description": "If hstsInsert is true, this value tells each client how long (in seconds; default 7862400 equals 91 days) to wait before refreshing HSTS settings for this service. Warning: once a client receives erroneous HSTS settings it will ignore any attempt to correct them until this period has expired", + "maximum": 4294967295, + "minimum": 0, + "title": "Period of HSTS", + "type": "integer" + }, + "hstsPreload": { + "default": false, + "description": "If true, include the domain for the web site associated with this HTTP profile in the browser's preload list. This forces the client to send packets over SSL/TLS.", + "title": "Include domain in preload list", + "type": "boolean" + }, + "requestChunking": { + "title": "Request chunking", + "description": "Controls handling of HTTP payload chunking in requests from clients (default is 'preserve'). Note: 'selective' and 'preserve' will be translated to 'sustain' when TMOS version is 15.0 or newer and 'sustain' will be translated to 'preserve' on older TMOS versions.", + "type": "string", + "enum": [ + "selective", + "preserve", + "rechunk", + "sustain" + ], + "default": "preserve" + }, + "responseChunking": { + "title": "Response chunking", + "description": "Controls handling of HTTP payload chunking in responses from pool members (default 'selective' adapts to most situations). Note: 'selective' and 'preserve' will be translated to 'sustain' when TMOS version is 15.0 or newer and 'sustain' will be translated to 'selective' on older TMOS versions.", + "type": "string", + "enum": [ + "selective", + "preserve", + "unchunk", + "rechunk", + "sustain" + ], + "default": "selective" + }, + "rewriteRedirects": { + "title": "Rewrite redirects", + "description": "In selected Location-header values (default none) of redirect responses from pool members, change protocol HTTP to HTTPS before passing redirects to clients", + "type": "string", + "enum": [ + "none", + "all", + "matching", + "addresses" + ], + "default": "none" + }, + "insertHeader": { + "title": "Insert header", + "description": "You may insert one header into each request before BIG-IP AS3 sends it to a pool member. The header value may be a simple string or the result of an iRules TCL expression (for example, [IP::client_addr]). This is the most efficient way to insert a single header; to insert multiple headers use an iRule or an Endpoint policy", + "type": "object", + "properties": { + "name": { + "title": "Header name", + "description": "Name of the HTTP header to insert", + "type": "string", + "pattern": "^[^\\x00-\\x20\\x22:\\x5c\\x7f-\\xff]+$", + "minLength": 1, + "maxLength": 128 + }, + "value": { + "title": "Header value", + "description": "Value of the HTTP header to insert", + "type": "string", + "pattern": "^[^\\x00-\\x1f\\x7f-\\xff]*$" + } + }, + "additionalProperties": false + }, + "knownMethods": { + "title": "Known methods", + "description": "List of HTTP request methods BIG-IP AS3 should recognize as normal. Any method not in this list will provoke the 'unknownMethodAction' action", + "type": "array", + "items": { + "title": "HTTP method", + "type": "string", + "pattern": "^[A-Z0-9]+$", + "minLength": 1, + "maxLength": 32 + }, + "uniqueItems": true, + "default": [ + "CONNECT", + "DELETE", + "GET", + "HEAD", + "LOCK", + "OPTIONS", + "POST", + "PROPFIND", + "PUT", + "TRACE", + "UNLOCK" + ] + }, + "maxRequests": { + "title": "Maximum requests per connection", + "description": "When BIG-IP AS3 has processed more than this number of requests through a connection, the system closes it. Default 0 means permit unlimited requests", + "type": "integer", + "minimum": 0, + "maximum": 2147483647, + "default": 0 + }, + "multiplexTransformations": { + "title": "Multiplex transformations", + "description": "If true (default), BIG-IP AS3 adjusts request headers to work properly when the virtual server uses a Multiplex profile", + "type": "boolean", + "default": true + }, + "otherXFF": { + "title": "Other XFF headers", + "description": "Names of request headers to treat as equivalent to X-Forwarded-For (see trustXFF)", + "type": "array", + "items": { + "title": "Header name", + "type": "string", + "minLength": 1, + "maxLength": 128, + "pattern": "^[^\\x00-\\x20\\x22:\\x5c\\x7f-\\xff]+$" + }, + "uniqueItems": true + }, + "pipelineAction": { + "default": "allow", + "description": "Default 'allow' means clients may pipeline HTTP/1.1 requests to pool members which support pipelining. Otherwise, 'reject' prevents pipelining, and 'pass-through' causes the connection to switch to pass-through mode when the system detects pipelining", + "enum": [ + "allow", + "reject", + "pass-through" + ], + "title": "Pipeline action", + "type": "string" + }, + "profileWebSocket": { + "description": "Deprecated. Specifies the WebSocket profile that will be used on Services alongside this HTTP profile. When the 'profileWebSocket' property is used on a Service, it will supersede this property.", + "allOf": [ + { + "$ref": "#/definitions/Pointer_WebSocket_Profile" + } + ] + }, + "proxyConnectEnabled": { + "default": false, + "description": "Determines if a proxy connection profile will be created", + "title": "Proxy connection enabled", + "type": "boolean" + }, + "proxyType": { + "default": "reverse", + "description": "Default value 'reverse' is usually appropriate. You may use 'transparent' when virtual server will handle a mix of HTTP and non-HTTP traffic. You may use 'explicit' when clients will ask ADC to proxy connections to arbitrary remote services", + "enum": [ + "reverse", + "transparent", + "explicit" + ], + "title": "Proxy type", + "type": "string" + }, + "whiteOutHeader": { + "title": "White-out header", + "description": "You may name one request header you want whited-out of each request before BIG-IP AS3 sends it to a pool member. To remove more than a single named header, use an iRule or an Endpoint policy. (Whiting-out a header leaves its name but replaces its value in the request with space characters (ASCII 0x20) to avoid changing the length of the headers.)", + "type": "string", + "pattern": "^[^\\x00-\\x20\\x22:\\x5c\\x7f-\\xff]+$", + "minLength": 1, + "maxLength": 128 + }, + "xForwardedFor": { + "title": "Insert X-Forwarded-For", + "description": "If true, insert an X-Forwarded-For header carrying the client IP address into each HTTP request sent to a pool member (default true)", + "type": "boolean", + "default": true + }, + "serverHeaderValue": { + "title": "Server header value", + "description": "Server header value to place in responses generated by the ADC itself (not obtained from a pool member)", + "type": "string", + "default": "BigIP" + }, + "trustXFF": { + "default": false, + "description": "If true, WAF (ASM) and AVR may trust X-Forwarded-For headers found in incoming requests and report statistics using client IP addresses appearing in them (default false). Use this feature only when you control upstream gateway(s)", + "title": "Trust X-Forwarded-For", + "type": "boolean" + }, + "unknownMethodAction": { + "default": "allow", + "description": "Default 'allow' means clients may make HTTP requests using unknown methods. Otherwise, 'reject' means to discard any unknown-method request and reject the client connection, and 'pass-through' causes the connection to switch to pass-through mode upon the first unknown-method request", + "enum": [ + "allow", + "reject", + "pass-through" + ], + "title": "Unknown method action", + "type": "string" + }, + "viaHost": { + "anyOf": [ + { + "format": "hostname" + }, + { + "format": "f5ip" + } + ], + "description": "Hostname to place in Via header when viaRequest or viaResponse is 'append'", + "minLength": 1, + "title": "Via hostname", + "type": "string" + }, + "viaRequest": { + "default": "remove", + "description": "Controls treatment of Via: headers in requests from clients. When set to 'append' BIG-IP AS3 requires viaHost", + "enum": [ + "append", + "preserve", + "remove" + ], + "title": "Via request control", + "type": "string" + }, + "viaResponse": { + "default": "remove", + "description": "Controls treatment of Via: headers in responses from pool members. When set to 'append' BIG-IP AS3 requires viaHost", + "enum": [ + "append", + "preserve", + "remove" + ], + "title": "Via response control", + "type": "string" + }, + "webSocketMasking": { + "default": "unmask", + "description": "Deprecated. WebSocket stream data is always masked from client to ADC and from ADC to server. Default value 'unmask' makes stream data passing through visible to ADC security policy and/or iRules attached to the service. 'selective' unmasks stream data only when a security policy is attached. 'preserve' passes data through masked (unreadable by security policy). 'remask' causes different masking keys to be used on client and server sides. When specified the property 'profileWebSocket' supersedes this property.", + "enum": [ + "preserve", + "remask", + "selective", + "unmask" + ], + "title": "WebSocket masking", + "type": "string" + }, + "webSocketsEnabled": { + "default": false, + "description": "Deprecated. When true, allow clients to initiate WebSocket connections (default false). When specified the property 'profileWebSocket' supersedes this property.", + "title": "WebSockets Enabled", + "type": "boolean" + } + }, + "required": [ + "class" + ], + "dependencies": { + "cookiePassphrase": { + "required": [ + "encryptCookies" + ] + }, + "fallbackStatusCodes": { + "required": [ + "fallbackRedirect" + ] + }, + "proxyType": { + "else": { + "if": { + "properties": { + "proxyType": { + "not": { + "const": "explicit" + } + } + } + }, + "then": { + "not": { + "anyOf": [ + { + "required": [ + "resolver" + ] + }, + { + "required": [ + "doNotProxyHosts" + ] + }, + { + "required": [ + "tunnelName" + ] + }, + { + "required": [ + "defaultConnectAction" + ] + }, + { + "required": [ + "routeDomain" + ] + }, + { + "required": [ + "connectErrorMessage" + ] + }, + { + "required": [ + "dnsErrorMessage" + ] + }, + { + "required": [ + "badRequestMessage" + ] + }, + { + "required": [ + "badResponseMessage" + ] + }, + { + "required": [ + "ipv6" + ] + } + ] + } + } + }, + "if": { + "properties": { + "proxyType": { + "not": { + "const": "transparent" + } + } + } + }, + "then": { + "not": { + "anyOf": [ + { + "required": [ + "excessClientHeaders" + ] + }, + { + "required": [ + "excessServerHeaders" + ] + }, + { + "required": [ + "oversizeClientHeaders" + ] + }, + { + "required": [ + "oversizeServerHeaders" + ] + } + ] + } + } + }, + "viaRequest": { + "if": { + "properties": { + "viaRequest": { + "const": "append" + } + } + }, + "then": { + "required": [ + "viaHost" + ] + } + }, + "viaResponse": { + "if": { + "properties": { + "viaResponse": { + "const": "append" + } + } + }, + "then": { + "required": [ + "viaHost" + ] + } + } + }, + "if": { + "properties": { + "proxyType": { + "const": "reverse" + } + } + }, + "then": { + "$ref": "#/definitions/HTTP_Profile_Reverse" + }, + "else": { + "if": { + "properties": { + "proxyType": { + "const": "transparent" + } + } + }, + "then": { + "$ref": "#/definitions/HTTP_Profile_Transparent" + }, + "else": { + "if": { + "properties": { + "proxyType": { + "const": "explicit" + } + } + }, + "then": { + "$ref": "#/definitions/HTTP_Profile_Explicit" + } + } + } + }, + "HTTP_Profile_Explicit": { + "title": "HTTP Profile Explicit", + "type": "object", + "description": "Extra HTTP profile configurable options when proxyType is 'explicit'", + "properties": { + "maxHeaderCount": { + "title": "Maximum header count", + "description": "When the number of headers in an incoming HTTP request exceeds this value, discard the request and reset the client connection", + "type": "integer", + "minimum": 1, + "maximum": 1024, + "default": 64 + }, + "maxHeaderSize": { + "title": "Maximum header size", + "description": "When the total size in octets of the headers of an incoming HTTP request exceeds this value, discard the request and reset the client connection", + "type": "integer", + "minimum": 9, + "maximum": 262144, + "default": 32768 + }, + "truncatedRedirects": { + "title": "Truncated redirects", + "description": "If false (default) elide malformed redirects from pool members, otherwise pass them to client", + "type": "boolean", + "default": false + }, + "resolver": { + "title": "DNS resolver", + "description": "BIG-IP AS3 pointer to DNS resolver used to resolve hostnames in client requests", + "type": "object", + "properties": { + "bigip": { + "title": "BIG-IP resolver", + "description": "Pathname of existing BIG-IP net DNS resolver", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "required": [ + "bigip" + ], + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query net dns-resolver" + ], + "errSchemaPath": "#/definitions/HTTP_Profile_Explicit/properties/resolver" + } + }, + "doNotProxyHosts": { + "title": "Do-not-proxy hosts", + "description": "When a client makes a (proxy-type) request to some host on this list, that request will simply be load-balanced to a pool member (without DNS resolution). This is ineffective for HTTPS requests", + "type": "array", + "items": { + "title": "host", + "type": "string", + "anyOf": [ + { + "format": "hostname" + }, + { + "format": "f5ip" + } + ] + }, + "default": [ + "none" + ], + "uniqueItems": true + }, + "tunnelName": { + "title": "Tunnel name", + "description": "Name of tunnel used for outbound CONNECT requests (default 'http-tunnel')", + "type": "string", + "minLength": 1, + "maxLength": 63, + "default": "http-tunnel", + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query net tunnels tunnel" + ], + "errSchemaPath": "#/definitions/HTTP_Profile_Explicit/properties/tunnelName" + } + }, + "defaultConnectAction": { + "title": "Default CONNECT action", + "description": "By default (value 'deny') the system refuses CONNECT requests from clients except when there is a virtual server listening to the tunnelName tunnel to accept and process them (typically to authorize and/or intercept outbound TLS connections). Value 'allow' will let clients CONNECT to arbitrary remote services", + "type": "string", + "enum": [ + "deny", + "allow" + ], + "default": "deny" + }, + "routeDomain": { + "title": "Exit route domain", + "description": "Proxy requests will leave the ADC from a Self IP in this route domain (default 0)", + "oneOf": [ + { + "type": "integer", + "minimum": 0, + "maximum": 65535 + }, + { + "type": "string" + } + ], + "default": 0, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query net route-domain" + ], + "errSchemaPath": "#/definitions/HTTP_Profile_Explicit/properties/routeDomain" + } + }, + "connectErrorMessage": { + "title": "Connect-error message", + "description": "Message returned to client when the system cannot establish a proxy connection. May include iRules TCL expressions", + "type": "string", + "maxLength": 65279, + "default": "Connection Error

Unable to connect to host in proxy request

" + }, + "dnsErrorMessage": { + "title": "DNS-error message", + "description": "Message returned to the client when the system cannot resolve the hostname in the request. May include iRules TCL expressions", + "type": "string", + "maxLength": 65279, + "default": "DNS Resolution Error

Cannot resolve hostname in proxy request

" + }, + "badRequestMessage": { + "title": "Bad-request message", + "description": "Message returned to client when proxy request is erroneous. May include iRules TCL expressions", + "type": "string", + "maxLength": 65279, + "default": "Bad Request

Invalid proxy request

" + }, + "badResponseMessage": { + "title": "Bad-response message", + "description": "Message returned to client when response to proxy request is erroneous. May include iRules TCL expressions", + "type": "string", + "maxLength": 65279, + "default": "Bad Response

Proxy request provoked invalid response

" + }, + "ipv6": { + "title": "IPv6 first priority", + "description": "Specifies the relative order of IPv4 and IPv6 DNS resolutions for URIs. If false (default), then the system performs IPv4 lookup before IPv6.", + "type": "boolean", + "default": false + } + } + }, + "HTTP_Profile_Reverse": { + "title": "HTTP Profile Reverse", + "type": "object", + "description": "Extra HTTP profile configurable options when proxyType is 'reverse'", + "properties": { + "maxHeaderCount": { + "title": "Maximum header count", + "description": "When the number of headers in an incoming HTTP request exceeds this value, discard the request and reset the client connection", + "type": "integer", + "minimum": 1, + "maximum": 1024, + "default": 64 + }, + "maxHeaderSize": { + "title": "Maximum header size", + "description": "When the total size in octets of the headers of an incoming HTTP request exceeds this value, discard the request and reset the client connection", + "type": "integer", + "minimum": 9, + "maximum": 262144, + "default": 32768 + }, + "truncatedRedirects": { + "title": "Truncated redirects", + "description": "If false (default) elide malformed redirects from pool members, otherwise pass them to client", + "type": "boolean", + "default": false + } + } + }, + "HTTP_Profile_Transparent": { + "title": "HTTP Profile Transparent", + "type": "object", + "description": "Extra HTTP profile configurable options when proxyType is 'transparent'", + "properties": { + "maxHeaderCount": { + "title": "Maximum header count", + "description": "When the number of headers in a request or response exceeds this value (default 32), take the excessX...Headers action", + "type": "integer", + "minimum": 1, + "maximum": 1024, + "default": 32 + }, + "maxHeaderSize": { + "title": "Maximum header size", + "description": "When the total size in octets of the headers of request or response exceeds this value (default 16384), take the oversizeX...Headers action", + "type": "integer", + "minimum": 9, + "maximum": 262144, + "default": 16384 + }, + "excessClientHeaders": { + "title": "Excess client headers action", + "description": "When a client request violates maxHeaderCount, either switch to pass-through mode (default) or reject the connection", + "type": "string", + "enum": [ + "pass-through", + "reject" + ], + "default": "pass-through" + }, + "excessServerHeaders": { + "title": "Excess server headers action", + "description": "When a pool member response violates maxHeaderCount, either switch to pass-through mode (default) or reject the connection", + "type": "string", + "enum": [ + "pass-through", + "reject" + ], + "default": "pass-through" + }, + "oversizeClientHeaders": { + "title": "Oversize client headers action", + "description": "When a client request violates maxHeaderSize, either switch to pass-through mode (default) or reject the connection", + "type": "string", + "enum": [ + "pass-through", + "reject" + ], + "default": "pass-through" + }, + "oversizeServerHeaders": { + "title": "Oversize server headers action", + "description": "When a pool member response violates maxHeaderSize, either switch to pass-through mode (default) or reject the connection", + "type": "string", + "enum": [ + "pass-through", + "reject" + ], + "default": "pass-through" + }, + "truncatedRedirects": { + "title": "Truncated redirects", + "description": "If true (default) pass malformed redirects to client", + "type": "boolean", + "default": true + } + } + }, + "HTTP2_Profile": { + "title": "HTTP2 profile", + "type": "object", + "description": "Profile to enable HTTP2", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "HTTP2_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "activationMode": { + "title": "Activation Mode", + "description": "This setting specifies the condition that will cause the BIG-IP system to handle an incoming connection as an HTTP/2 connection.", + "type": "string", + "enum": [ + "alpn", + "always" + ], + "default": "alpn" + }, + "concurrentStreamsPerConnection": { + "title": "Concurrent streams per connection", + "description": "The number of concurrent connections to allow on a single HTTP/2 connection.", + "type": "integer", + "minimum": 1, + "maximum": 256, + "default": 10 + }, + "connectionIdleTimeout": { + "title": "Connection idle timeout", + "description": "The number of seconds that a HTTP/2 connection is left open idly before it is closed.", + "type": "integer", + "minimum": 1, + "maximum": 4294967295, + "default": 300 + }, + "enforceTlsRequirements": { + "title": "Enforce TLS requirements", + "description": "Enable or disable enforcement of TLS requirements.", + "type": "boolean", + "default": true + }, + "frameSize": { + "title": "Frame size", + "type": "integer", + "default": 2048, + "description": "The size of the data frames, in bytes, that the HTTP/2 protocol sends to the client.", + "maximum": 16384, + "minimum": 1024 + }, + "headerTableSize": { + "title": "Header table size", + "type": "integer", + "default": 4096, + "description": "The size of the header table, in KB, for the HTTP headers that the HTTP/2 protocol compresses to save bandwidth.", + "maximum": 65535, + "minimum": 0 + }, + "includeContentLength": { + "title": "Include content length", + "type": "boolean", + "default": false, + "description": "Enable to include content-length in HTTP/2 headers." + }, + "insertHeader": { + "title": "Insert header", + "description": "This setting specifies whether the BIG-IP system should add an HTTP header to the HTTP request to show that the request was received over HTTP/2.", + "type": "boolean", + "default": false + }, + "insertHeaderName": { + "title": "Insert header name", + "description": "This setting specifies the name of the header that the BIG-IP system will add to the HTTP request when the Insert Header is enabled.", + "type": "string", + "default": "X-HTTP2" + }, + "receiveWindow": { + "title": "Receive window", + "type": "integer", + "default": 32, + "description": "The flow-control size for upload streams, in KB.", + "maximum": 128, + "minimum": 16 + }, + "writeSize": { + "title": "Write size", + "type": "integer", + "default": 16384, + "description": "The total size of combined data frames, in bytes, that the HTTP/2 protocol sends in a single write function.", + "maximum": 32768, + "minimum": 2048 + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "IRule": { + "title": "iRule", + "type": "object", + "description": "iRule definition with configurable options", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "iRule" + }, + "expand": { + "title": "Expand", + "description": "If true (default), expand backquoted variables in iRule", + "type": "boolean", + "default": true + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "iRule": { + "$ref": "#/definitions/IRule_Core" + } + }, + "required": [ + "class", + "iRule" + ], + "additionalProperties": false + }, + "IRule_Core": { + "title": "iRule Core definition", + "description": "Reference to an iRule or text of an iRule", + "allOf": [ + { + "$ref": "#/definitions/F5_String" + }, + { + "f5PostProcess": { + "tag": "expand", + "data": { + "when": "1/expand" + }, + "errSchemaPath": "#/definitions/IRule_Core/allOf/1" + } + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "string", + "errSchemaPath": "#/definitions/IRule_Core/allOf/2" + } + } + ] + }, + "JWE": { + "title": "JWE cryptogram", + "description": "A value in a cryptogram which is a Flattened JWE JSON Serialization object. If 'miniJWE' is true then enc=(none|f5sv) only (in JOSE header)", + "type": "object", + "properties": { + "ciphertext": { + "title": "Ciphertext", + "description": "Put base64url(data_value) here", + "type": "string", + "minLength": 2, + "allOf": [ + { + "$ref": "#/definitions/Resource_Base64" + } + ] + }, + "ignoreChanges": { + "title": "Ignore changes", + "description": "If false (default), the system updates the ciphertext in every BIG-IP AS3 declaration deployment. If true, BIG-IP AS3 creates the ciphertext on first deployment, and leaves it untouched afterwards", + "type": "boolean", + "default": false + }, + "miniJWE": { + "title": "Mini JWE", + "description": "If true (default), object is an f5 mini-JWE", + "type": "boolean", + "default": true + }, + "protected": { + "title": "JOSE header", + "description": "JOSE header: alg=dir, enc=(none|f5sv); default enc=none (encoded default is 'protected'='eyJhbGciOiJkaXIiLCJlbmMiOiJub25lIn0', use with secret simply base64 url-encoded into 'ciphertext'). If you see 'protected'='eyJhbGciOiJkaXIiLCJlbmMiOiJmNXN2In0', 'ciphertext' contains base64url-encoded SecureVault cryptogram", + "type": "string", + "minLength": 2, + "allOf": [ + { + "$ref": "#/definitions/Resource_Base64" + } + ], + "default": "eyJhbGciOiJkaXIiLCJlbmMiOiJub25lIn0" + } + }, + "required": [ + "protected" + ] + }, + "L4_Profile": { + "title": "L4 Profile", + "description": "Configures a Fast Layer 4 profile", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "L4_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "clientTimeout": { + "title": "Client timeout", + "description": "Number of seconds allowed for a client to transmit enough data to select a server when you have late binding enabled. Value -1 means indefinite (not recommended)", + "type": "integer", + "maximum": 86400, + "minimum": -1, + "default": 30 + }, + "idleTimeout": { + "title": "Idle timeout", + "type": "integer", + "default": 300, + "description": "Number of seconds (default 300; may not be 0) connection may remain idle before it becomes eligible for deletion. Value -1 (not recommended) means infinite", + "anyOf": [ + { + "maximum": 86400, + "minimum": 1 + }, + { + "const": -1 + } + ] + }, + "keepAliveInterval": { + "title": "Keep-alive interval", + "description": "Number of seconds between keep-alive probes. A value of 0 seconds disables the feature.", + "type": "integer", + "default": 0, + "maximum": 4294967295, + "minimum": 0 + }, + "looseClose": { + "$ref": "#/definitions/Property_Loose_Close", + "default": false + }, + "looseInitialization": { + "$ref": "#/definitions/Property_Loose_Initialization", + "default": false + }, + "maxSegmentSize": { + "title": "MSS", + "description": "Sets MSS advertised to peer. Value 0 (default) will set MSS automatically in proportion to interface MTU. Default 0 is usually the best choice", + "type": "integer", + "default": 0, + "anyOf": [ + { + "maximum": 9162, + "minimum": 256 + }, + { + "const": 0 + } + ] + }, + "resetOnTimeout": { + "$ref": "#/definitions/Property_Reset_On_Timeout", + "default": true + }, + "synCookieAllowlist": { + "title": "Syn Cookie Allowlist", + "description": "Specifies whether or not to use a SYN Cookie Allowlist when doing software SYN Cookies. This means not doing a SYN Cookie for the same src IP address if it has been done already in the previous tm.flowstate.timeout (30) seconds. The default value is disabled.", + "type": "boolean", + "default": false + }, + "synCookieEnable": { + "title": "SYN cookie enable", + "description": "Enables syn-cookies capability on this virtual server. If true (default), the system may use SYN cookies to avert connection-table overflow (for example, from DoS attacks)", + "type": "boolean", + "default": true + }, + "tcpCloseTimeout": { + "$ref": "#/definitions/Property_TCP_Close_Timeout", + "default": 5 + }, + "tcpHandshakeTimeout": { + "$ref": "#/definitions/Property_TCP_Handshake_Timeout", + "default": 5 + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "Log_Destination": { + "title": "Log Destination", + "description": "Configures a log destination", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Log_Destination" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "type": { + "description": "The type of the log destination", + "type": "string", + "enum": [ + "management-port", + "remote-high-speed-log", + "remote-syslog", + "splunk" + ] + } + }, + "required": [ + "class", + "type" + ], + "allOf": [ + { + "if": { + "properties": { + "type": { + "const": "management-port" + } + } + }, + "then": { + "$ref": "#/definitions/Log_Destination_Management_Port" + } + }, + { + "if": { + "properties": { + "type": { + "const": "remote-syslog" + } + } + }, + "then": { + "$ref": "#/definitions/Log_Destination_Remote_Syslog" + } + }, + { + "if": { + "properties": { + "type": { + "const": "remote-high-speed-log" + } + } + }, + "then": { + "$ref": "#/definitions/Log_Destination_Remote_High_Speed_Log" + } + }, + { + "if": { + "properties": { + "type": { + "const": "splunk" + } + } + }, + "then": { + "$ref": "#/definitions/Log_Destination_Splunk" + } + } + ] + }, + "Log_Destination_Management_Port": { + "title": "Log Destination Management Port", + "description": "Sends received messages to a specified IP address and port through the management interface", + "type": "object", + "properties": { + "address": { + "description": "Specifies the IP address that will receive messages from the specified local Log Destination", + "type": "string", + "format": "f5ip" + }, + "port": { + "description": "Specifies the port of the IP address that will receive messages from the specified local Log Destination", + "type": "integer", + "minimum": 0, + "maximum": 65535 + }, + "protocol": { + "description": "Specifies the protocol for the system to use to send logs to the specified location", + "type": "string", + "enum": [ + "tcp", + "udp" + ], + "default": "tcp" + } + }, + "required": [ + "address", + "port" + ] + }, + "Log_Destination_Remote_High_Speed_Log": { + "title": "Log Destination Remote High Speed Log", + "description": "Sends received messages to a specified pool", + "type": "object", + "properties": { + "distribution": { + "description": "Specifies the distribution method used to send messages to pool members", + "type": "string", + "enum": [ + "adaptive", + "balanced", + "replicated" + ], + "default": "adaptive" + }, + "protocol": { + "description": "Specifies the protocol for the system to use to send logs to the pool", + "type": "string", + "enum": [ + "tcp", + "udp" + ], + "default": "tcp" + }, + "pool": { + "$ref": "#/definitions/Pointer_Pool" + } + }, + "required": [ + "pool" + ] + }, + "Log_Destination_Remote_Syslog": { + "title": "Log Destination Remote Syslog", + "description": "Configures Remote Syslog destinations to format log messages into Syslog format and forward them to a Remote High-Speed Log destination", + "type": "object", + "properties": { + "format": { + "description": "Specifies the method to use to format the logs", + "type": "string", + "enum": [ + "legacy-bigip", + "rfc3164", + "rfc5424" + ], + "default": "rfc3164" + }, + "defaultFacility": { + "description": "Specifies the facility given to log messages received that do not already have a facility listed", + "type": "string", + "enum": [ + "local0", + "local1", + "local2", + "local3", + "local4", + "local5", + "local6", + "local7" + ], + "default": "local0" + }, + "defaultSeverity": { + "description": "Specifies the severity given to log messages received that do not already have a severity listed", + "type": "string", + "enum": [ + "alert", + "crit", + "debug", + "emerg", + "err", + "info", + "notice", + "warn" + ], + "default": "info" + }, + "remoteHighSpeedLog": { + "description": "Specifies a remote high-speed log destination, which the system uses to forward the logs to a pool of remote log servers", + "allOf": [ + { + "$ref": "#/definitions/Pointer_BIGIP_Or_Use" + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "use": { + "description": "BIG-IP AS3 pointer to remote high speed log declaration", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "type": "object", + "properties": { + "class": { + "const": "Log_Destination" + }, + "type": { + "const": "remote-high-speed-log" + } + }, + "required": [ + "class" + ] + }, + "errSchemaPath": "#/definitions/Log_Destination_Remote_Syslog/properties/remoteHighSpeedLog/allOf/1/properties/use" + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP remote high speed log", + "format": "f5bigip" + } + }, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys log-config destination remote-high-speed-log" + ], + "errSchemaPath": "#/definitions/Log_Destination_Remote_Syslog/properties/remoteHighSpeedLog/allOf/1" + } + } + ], + "minProperties": 1, + "maxProperties": 1 + } + }, + "required": [ + "remoteHighSpeedLog" + ] + }, + "Log_Destination_Splunk": { + "title": "Log Destination Splunk", + "description": "Configures Splunk formatting destinations to format incoming log messages into Splunk format", + "type": "object", + "properties": { + "forwardTo": { + "description": "Specifies the log destination to which logs are forwarded", + "allOf": [ + { + "$ref": "#/definitions/Pointer_Log_Destination" + } + ] + } + }, + "required": [ + "forwardTo" + ] + }, + "Log_Publisher": { + "title": "Log_Publisher", + "description": "Configures lists of destinations for the common logging interface", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Log_Publisher" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "destinations": { + "description": "specify log destinations for this log publisher to use", + "type": "array", + "items": { + "$ref": "#/definitions/Pointer_Log_Destination" + } + } + }, + "required": [ + "class", + "destinations" + ] + }, + "Monitor": { + "title": "Monitor", + "description": "Declares a (possibly complex) monitor", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string", + "enum": [ + "dns", + "external", + "ftp", + "http", + "https", + "http2", + "icmp", + "inband", + "ldap", + "mysql", + "postgresql", + "radius", + "sip", + "smtp", + "tcp", + "tcp-half-open", + "udp" + ] + } + }, + "required": [ + "class", + "monitorType" + ], + "allOf": [ + { + "if": { + "properties": { + "monitorType": { + "const": "dns" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor_DNS" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "external" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor_External" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "ftp" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor_FTP" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "http" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor_HTTP" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "https" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor_HTTPS" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "http2" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor_HTTP2" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "icmp" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor_ICMP" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "inband" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor_Inband" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "ldap" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor_LDAP" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "mysql" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor_MySQL" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "postgresql" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor_PostgreSQL" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "radius" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor_RADIUS" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "sip" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor_SIP" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "smtp" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor_SMTP" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "tcp" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor_TCP" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "tcp-half-open" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor_TCP_Half_Open" + } + }, + { + "if": { + "properties": { + "monitorType": { + "const": "udp" + } + } + }, + "then": { + "$ref": "#/definitions/Monitor_UDP" + } + } + ] + }, + "Monitor_DNS": { + "title": "Monitor DNS", + "description": "Additional Monitor class properties available when monitorType = dns", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "acceptRCODE": { + "title": "Accept RCODE", + "description": "Specifies the RCODE required in the response for an up status", + "type": "string", + "enum": [ + "anything", + "no-error" + ], + "default": "no-error" + }, + "adaptive": { + "title": "Adaptive", + "description": "If true, use adaptive probe timing", + "type": "boolean", + "default": false + }, + "adaptiveDivergenceType": { + "title": "Adaptive divergence type", + "description": "Adaptive divergence, 'absolute' selects milliseconds, 'relative' (default) selects percentage", + "type": "string", + "enum": [ + "absolute", + "relative" + ], + "default": "relative" + }, + "adaptiveDivergenceMilliseconds": { + "title": "Adaptive divergence msec", + "description": "Probe fails if response latency exceeds mean by this number of milliseconds", + "type": "integer", + "minimum": 1, + "maximum": 10000, + "default": 500 + }, + "adaptiveDivergencePercentage": { + "title": "Adaptive divergence percent", + "description": "Probe fails if response latency exceeds mean by this percentage", + "type": "integer", + "minimum": 1, + "maximum": 500, + "default": 100 + }, + "adaptiveLimitMilliseconds": { + "title": "Adaptive limit msec", + "description": "Probe fails if response latency exceeds this number of milliseconds", + "type": "integer", + "minimum": 1, + "maximum": 10000, + "default": 1000 + }, + "adaptiveWindow": { + "title": "Adaptive window", + "description": "Time window over which the system samples latency (seconds)", + "type": "integer", + "minimum": 60, + "maximum": 1800, + "default": 180 + }, + "answerContains": { + "title": "Answer Section Contains", + "description": "Specifies the type of DNS query that the monitor sends", + "type": "string", + "enum": [ + "any-type", + "anything", + "query-type" + ], + "default": "query-type" + }, + "interval": { + "title": "Interval", + "description": "Poll interval (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 5 + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string" + }, + "queryName": { + "title": "Query Name", + "description": "Specifies a query name for the monitor to use in a DNS query", + "type": "string", + "minLength": 1 + }, + "queryType": { + "title": "Query Type", + "description": "Specifies the type of DNS query that the monitor sends.", + "type": "string", + "enum": [ + "a", + "aaaa" + ], + "default": "a" + }, + "receive": { + "title": "Receive String", + "description": "IP address that the monitor uses from the resource records sections of the DNS response", + "type": "string" + }, + "reverse": { + "title": "Reverse", + "description": "If true, mark node down upon receipt of 'receive' string", + "type": "boolean", + "default": false + }, + "targetAddress": { + "title": "Address", + "description": "IP address monitor should probe; if empty (default) then pool member address", + "type": "string", + "format": "f5ip", + "default": "" + }, + "targetPort": { + "title": "Port", + "description": "L4 port (if any) monitor should probe; if 0 (default) then pool member port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "timeout": { + "title": "Timeout", + "description": "Time limit for node to respond (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 900, + "default": 16 + }, + "timeUntilUp": { + "title": "Time until up", + "description": "Delay between successful probe and sending traffic to node (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 1800, + "default": 0 + }, + "transparent": { + "title": "Transparent", + "description": "If true, treat pool member address as gateway to server (node) (default false)", + "type": "boolean", + "default": false + }, + "upInterval": { + "title": "Up-Interval", + "description": "Poll interval when service is already up (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 0 + } + }, + "allOf": [ + { + "if": { + "properties": { + "transparent": { + "const": true + } + }, + "required": [ + "transparent" + ] + }, + "then": { + "allOf": [ + { + "required": [ + "targetAddress", + "targetPort" + ] + }, + { + "properties": { + "targetAddress": { + "not": { + "const": "" + } + } + } + } + ] + } + }, + { + "if": { + "properties": { + "reverse": { + "const": true + } + }, + "required": [ + "reverse" + ] + }, + "then": { + "allOf": [ + { + "required": [ + "receive" + ] + }, + { + "properties": { + "receive": { + "not": { + "const": "" + } + } + } + } + ] + } + }, + { + "if": { + "properties": { + "answerContains": { + "const": "query-type" + }, + "acceptRCODE": { + "const": "no-error" + } + } + }, + "then": { + "properties": { + "receive": { + "default": "" + } + } + } + } + ], + "required": [ + "queryName" + ], + "additionalProperties": true + }, + "Monitor_External": { + "title": "Monitor External", + "description": "Monitor External definition", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "arguments": { + "title": "Arguments", + "description": "Arguments to specified external monitor (will be backquote-expanded)", + "type": "string", + "default": "", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_External/properties/arguments" + } + }, + "environmentVariables": { + "description": "Specifies user defined command line parameters that the external program requires.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "default": {} + }, + "expand": { + "title": "Expand", + "description": "If true (default), expand backquoted variables in script", + "type": "boolean", + "default": true + }, + "interval": { + "title": "Interval", + "description": "Poll interval (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 5 + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string" + }, + "pathname": { + "title": "pathname", + "description": "Tmsh object path name of an imported existing external monitor (e.g. /Common/arg_example)", + "type": "string", + "minLength": 2, + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_External/properties/pathname" + } + }, + "script": { + "title": "External monitor script", + "description": "Bash(1) script which implements external monitor", + "allOf": [ + { + "$ref": "#/definitions/F5_String" + }, + { + "f5PostProcess": { + "tag": "expand", + "data": { + "when": "1/expand" + }, + "errSchemaPath": "#/definitions/Monitor_External/properties/script/allOf/1" + } + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "string", + "errSchemaPath": "#/definitions/Monitor_External/properties/script/allOf/2" + } + } + ] + }, + "targetAddress": { + "title": "Address", + "description": "IP address monitor should probe; if empty (default) then pool member address", + "type": "string", + "format": "f5ip", + "default": "" + }, + "targetPort": { + "title": "Port", + "description": "L4 port (if any) monitor should probe; if 0 (default) then pool member port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "timeout": { + "title": "Timeout", + "description": "Time limit for node to respond (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 900, + "default": 16 + }, + "timeUntilUp": { + "title": "Time until up", + "description": "Delay between successful probe and sending traffic to node (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 1800, + "default": 0 + }, + "upInterval": { + "title": "Up-Interval", + "description": "Poll interval when service is already up (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 0 + } + }, + "anyOf": [ + { + "required": [ + "pathname" + ] + }, + { + "required": [ + "script" + ] + } + ], + "if": { + "required": [ + "pathname" + ] + }, + "then": { + "not": { + "required": [ + "script" + ] + }, + "errorMessage": "can only have either 'pathname' or 'script', not both. Also check property types along with minimum and maximum property values" + }, + "additionalProperties": true + }, + "Monitor_FTP": { + "title": "Monitor FTP", + "description": "Monitor FTP definition", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "filename": { + "title": "Filename", + "description": "Specifies the full path and file name of the file that the system attempts to download. The health check is successful if the system can download the file.", + "type": "string" + }, + "interval": { + "title": "Interval", + "description": "Poll interval (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 5 + }, + "mode": { + "title": "Mode", + "description": "Specifies the data transfer process (DTP) mode. The default value is passive.", + "type": "string", + "default": "passive", + "enum": [ + "passive", + "port" + ] + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string" + }, + "passphrase": { + "title": "Passphrase", + "description": "Passphrase if any for query authentication", + "type": "object", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "f5PostProcess": { + "tag": "fetch", + "data": "object", + "errSchemaPath": "#/definitions/Monitor_FTP/properties/passphrase" + }, + "allOf": [ + { + "$ref": "#/definitions/Property_Passphrase" + } + ] + }, + "targetAddress": { + "title": "Address", + "description": "IP address monitor should probe; if empty (default) then pool member address", + "type": "string", + "format": "f5ip", + "default": "" + }, + "targetPort": { + "title": "Port", + "description": "L4 port (if any) monitor should probe; if 0 (default) then pool member port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "timeout": { + "title": "Timeout", + "description": "Time limit for node to respond (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 900, + "default": 16 + }, + "timeUntilUp": { + "title": "Time until up", + "description": "Delay between successful probe and sending traffic to node (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 1800, + "default": 0 + }, + "upInterval": { + "title": "Up-Interval", + "description": "Poll interval when service is already up (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 0 + }, + "username": { + "title": "Username", + "description": "Username if any for query authentication", + "type": "string" + } + }, + "additionalProperties": true + }, + "Monitor_HTTP": { + "title": "Monitor HTTP", + "description": "Monitor HTTP definition", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "adaptive": { + "title": "Adaptive", + "description": "If true, use adaptive probe timing", + "type": "boolean", + "default": false + }, + "adaptiveDivergenceType": { + "title": "Adaptive divergence type", + "description": "Adaptive divergence, 'absolute' selects milliseconds, 'relative' (default) selects percentage", + "type": "string", + "enum": [ + "absolute", + "relative" + ], + "default": "relative" + }, + "adaptiveDivergenceMilliseconds": { + "title": "Adaptive divergence msec", + "description": "Probe fails if response latency exceeds mean by this number of milliseconds", + "type": "integer", + "minimum": 1, + "maximum": 10000, + "default": 500 + }, + "adaptiveDivergencePercentage": { + "title": "Adaptive divergence percent", + "description": "Probe fails if response latency exceeds mean by this percentage", + "type": "integer", + "minimum": 1, + "maximum": 500, + "default": 100 + }, + "adaptiveLimitMilliseconds": { + "title": "Adaptive limit msec", + "description": "Probe fails if response latency exceeds this number of milliseconds", + "type": "integer", + "minimum": 1, + "maximum": 10000, + "default": 1000 + }, + "adaptiveWindow": { + "title": "Adaptive window", + "description": "Time window over which the system samples latency (seconds)", + "type": "integer", + "minimum": 1, + "maximum": 1800, + "default": 180 + }, + "dscp": { + "title": "IP DSCP", + "description": "Value for IP DSCP (ex-TOS) field (default 0)", + "type": "integer", + "minimum": 0, + "maximum": 63, + "default": 0 + }, + "interval": { + "title": "Interval", + "description": "Poll interval (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 5 + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string" + }, + "passphrase": { + "allOf": [ + { + "$ref": "#/definitions/Property_Passphrase" + }, + { + "title": "Passphrase", + "description": "Passphrase if any for query authentication", + "type": "object", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "f5PostProcess": { + "tag": "fetch", + "data": "object", + "errSchemaPath": "#/definitions/Monitor_HTTP/properties/passphrase/allOf/1" + } + } + ] + }, + "receive": { + "title": "Receive = up", + "description": "Mark node up upon receipt of this (backquote-expanded) string", + "type": "string", + "default": "HTTP/1.", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_HTTP/properties/receive" + } + }, + "receiveDown": { + "title": "Receive = down", + "description": "Mark node down upon receipt of this (backquote-expanded) string (optional; must be empty when 'reverse' is true)", + "type": "string", + "default": "", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_HTTP/properties/receiveDown" + } + }, + "reverse": { + "title": "Reverse", + "description": "If true, mark node down upon receipt of 'receive' string", + "type": "boolean", + "default": false + }, + "send": { + "title": "Send", + "description": "Send this (backquote-expanded) string to query node", + "type": "string", + "default": "HEAD / HTTP/1.0\\r\\n\\r\\n", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_HTTP/properties/send" + } + }, + "targetAddress": { + "title": "Address", + "description": "IP address monitor should probe; if empty (default) then pool member address", + "type": "string", + "format": "f5ip", + "default": "" + }, + "targetPort": { + "title": "Port", + "description": "L4 port (if any) monitor should probe; if 0 (default) then pool member port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "timeout": { + "title": "Timeout", + "description": "Time limit for node to respond (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 900, + "default": 16 + }, + "timeUntilUp": { + "title": "Time until up", + "description": "Delay between successful probe and sending traffic to node (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 1800, + "default": 0 + }, + "transparent": { + "title": "Transparent", + "description": "If true, treat pool member address as gateway to server (node) (default false)", + "type": "boolean", + "default": false + }, + "upInterval": { + "title": "Up-Interval", + "description": "Poll interval when service is already up (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 0 + }, + "username": { + "title": "Username", + "description": "Username if any for query authentication", + "type": "string" + } + }, + "dependencies": { + "reverse": { + "if": { + "properties": { + "reverse": { + "const": true + } + } + }, + "then": { + "properties": { + "receiveDown": { + "const": "" + } + } + } + } + }, + "additionalProperties": true + }, + "Monitor_HTTP2": { + "title": "Monitor HTTP2", + "description": "Monitor HTTP2 definition", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "adaptive": { + "title": "Adaptive", + "description": "If true, use adaptive probe timing", + "type": "boolean", + "default": false + }, + "adaptiveDivergenceType": { + "title": "Adaptive divergence type", + "description": "Adaptive divergence, 'absolute' selects milliseconds, 'relative' (default) selects percentage", + "type": "string", + "enum": [ + "absolute", + "relative" + ], + "default": "relative" + }, + "adaptiveDivergenceMilliseconds": { + "title": "Adaptive divergence msec", + "description": "Probe fails if response latency exceeds mean by this number of milliseconds", + "type": "integer", + "minimum": 1, + "maximum": 10000, + "default": 500 + }, + "adaptiveDivergencePercentage": { + "title": "Adaptive divergence percent", + "description": "Probe fails if response latency exceeds mean by this percentage", + "type": "integer", + "minimum": 1, + "maximum": 500, + "default": 100 + }, + "adaptiveLimitMilliseconds": { + "title": "Adaptive limit msec", + "description": "Probe fails if response latency exceeds this number of milliseconds", + "type": "integer", + "minimum": 1, + "maximum": 10000, + "default": 1000 + }, + "adaptiveWindow": { + "title": "Adaptive window", + "description": "Time window over which the system samples latency (seconds)", + "type": "integer", + "minimum": 1, + "maximum": 1800, + "default": 180 + }, + "clientTLS": { + "title": "Client TLS", + "description": "BIG-IP AS3 pointer to client TLS Profile", + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/Pointer_TLS_Client" + } + ] + }, + "dscp": { + "title": "IP DSCP", + "description": "Value for IP DSCP (ex-TOS) field (default 0)", + "type": "integer", + "minimum": 0, + "maximum": 63, + "default": 0 + }, + "interval": { + "title": "Interval", + "description": "Poll interval (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 5 + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string" + }, + "passphrase": { + "title": "Passphrase", + "description": "Passphrase if any for query authentication", + "type": "object", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "f5PostProcess": { + "tag": "fetch", + "data": "object", + "errSchemaPath": "#/definitions/Monitor_HTTP2/properties/passphrase" + }, + "allOf": [ + { + "$ref": "#/definitions/Property_Passphrase" + } + ] + }, + "receive": { + "title": "Receive = up", + "description": "Mark node up upon receipt of this (backquote-expanded) string", + "type": "string", + "default": "HTTP/2.", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_HTTP2/properties/receive" + } + }, + "receiveDown": { + "title": "Receive = down", + "description": "Mark node down upon receipt of this (backquote-expanded) string (optional; must be empty when 'reverse' is true)", + "type": "string", + "default": "", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_HTTP2/properties/receiveDown" + } + }, + "reverse": { + "title": "Reverse", + "description": "If true, mark node down upon receipt of 'receive' string", + "type": "boolean", + "default": false + }, + "send": { + "title": "Send", + "description": "Send this (backquote-expanded) string to query node", + "type": "string", + "default": "GET /\\r\\n\\r\\n", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_HTTP2/properties/send" + } + }, + "targetAddress": { + "title": "Address", + "description": "IP address monitor should probe; if empty (default) then pool member address", + "type": "string", + "format": "f5ip", + "default": "" + }, + "targetPort": { + "title": "Port", + "description": "L4 port (if any) monitor should probe; if 0 (default) then pool member port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "timeout": { + "title": "Timeout", + "description": "Time limit for node to respond (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 900, + "default": 16 + }, + "timeUntilUp": { + "title": "Time until up", + "description": "Delay between successful probe and sending traffic to node (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 1800, + "default": 0 + }, + "transparent": { + "title": "Transparent", + "description": "If true, treat pool member address as gateway to server (node) (default false)", + "type": "boolean", + "default": false + }, + "upInterval": { + "title": "Up-Interval", + "description": "Poll interval when service is already up (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 0 + }, + "username": { + "title": "Username", + "description": "Username if any for query authentication", + "type": "string" + } + }, + "additionalProperties": true + }, + "Monitor_HTTPS": { + "title": "Monitor HTTPS", + "description": "Monitor HTTPS definition", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "adaptive": { + "title": "Adaptive", + "description": "If true, use adaptive probe timing", + "type": "boolean", + "default": false + }, + "adaptiveDivergenceType": { + "title": "Adaptive divergence type", + "description": "Adaptive divergence, 'absolute' selects milliseconds, 'relative' (default) selects percentage", + "type": "string", + "enum": [ + "absolute", + "relative" + ], + "default": "relative" + }, + "adaptiveDivergenceMilliseconds": { + "title": "Adaptive divergence msec", + "description": "Probe fails if response latency exceeds mean by this number of milliseconds", + "type": "integer", + "minimum": 1, + "maximum": 10000, + "default": 500 + }, + "adaptiveDivergencePercentage": { + "title": "Adaptive divergence percent", + "description": "Probe fails if response latency exceeds mean by this percentage", + "type": "integer", + "minimum": 1, + "maximum": 500, + "default": 100 + }, + "adaptiveLimitMilliseconds": { + "title": "Adaptive limit msec", + "description": "Probe fails if response latency exceeds this number of milliseconds", + "type": "integer", + "minimum": 1, + "maximum": 10000, + "default": 1000 + }, + "adaptiveWindow": { + "title": "Adaptive window", + "description": "Time window over which the system samples latency (seconds)", + "type": "integer", + "minimum": 1, + "maximum": 1800, + "default": 180 + }, + "ciphers": { + "title": "Ciphers", + "description": "Ciphersuite selection string", + "type": "string", + "default": "DEFAULT" + }, + "clientCertificate": { + "title": "Client certificate", + "description": "BIG-IP AS3 pointer to client Certificate declaration, for TLS authentication (optional)", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "type": "object", + "properties": { + "class": { + "const": "Certificate" + } + }, + "required": [ + "class" + ] + }, + "errSchemaPath": "#/definitions/Monitor_HTTPS/properties/clientCertificate" + } + }, + "clientTLS": { + "title": "Client TLS", + "description": "BIG-IP AS3 pointer to client TLS Profile", + "allOf": [ + { + "$ref": "#/definitions/Pointer_TLS_Client" + } + ] + }, + "dscp": { + "title": "IP DSCP", + "description": "Value for IP DSCP (ex-TOS) field (default 0)", + "type": "integer", + "minimum": 0, + "maximum": 63, + "default": 0 + }, + "interval": { + "title": "Interval", + "description": "Poll interval (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 5 + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string" + }, + "passphrase": { + "title": "Passphrase", + "description": "Passphrase if any for query authentication", + "type": "object", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "f5PostProcess": { + "tag": "fetch", + "data": "object", + "errSchemaPath": "#/definitions/Monitor_HTTPS/properties/passphrase" + }, + "allOf": [ + { + "$ref": "#/definitions/Property_Passphrase" + } + ] + }, + "receive": { + "title": "Receive = up", + "description": "Mark node up upon receipt of this (backquote-expanded) string", + "type": "string", + "default": "HTTP/1.", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_HTTPS/properties/receive" + } + }, + "receiveDown": { + "title": "Receive = down", + "description": "Mark node down upon receipt of this (backquote-expanded) string (optional; must be empty when 'reverse' is true)", + "type": "string", + "default": "", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_HTTPS/properties/receiveDown" + } + }, + "reverse": { + "title": "Reverse", + "description": "If true, mark node down upon receipt of 'receive' string", + "type": "boolean", + "default": false + }, + "send": { + "title": "Send", + "description": "Send this (backquote-expanded) string to query node", + "type": "string", + "default": "HEAD / HTTP/1.0\\r\\n\\r\\n", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_HTTPS/properties/send" + } + }, + "targetAddress": { + "title": "Address", + "description": "IP address monitor should probe; if empty (default) then pool member address", + "type": "string", + "format": "f5ip", + "default": "" + }, + "targetPort": { + "title": "Port", + "description": "L4 port (if any) monitor should probe; if 0 (default) then pool member port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "timeout": { + "title": "Timeout", + "description": "Time limit for node to respond (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 900, + "default": 16 + }, + "timeUntilUp": { + "title": "Time until up", + "description": "Delay between successful probe and sending traffic to node (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 1800, + "default": 0 + }, + "transparent": { + "title": "Transparent", + "description": "If true, treat pool member address as gateway to server (node) (default false)", + "type": "boolean", + "default": false + }, + "upInterval": { + "title": "Up-Interval", + "description": "Poll interval when service is already up (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 0 + }, + "username": { + "title": "Username", + "description": "Username if any for query authentication", + "type": "string" + } + }, + "additionalProperties": true + }, + "Monitor_ICMP": { + "title": "Monitor ICMP", + "description": "Monitor ICMP definition", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "adaptive": { + "title": "Adaptive", + "description": "If true, use adaptive probe timing", + "type": "boolean", + "default": false + }, + "adaptiveDivergenceType": { + "title": "Adaptive divergence type", + "description": "Adaptive divergence, 'absolute' selects milliseconds, 'relative' (default) selects percentage", + "type": "string", + "enum": [ + "absolute", + "relative" + ], + "default": "relative" + }, + "adaptiveDivergenceMilliseconds": { + "title": "Adaptive divergence msec", + "description": "Probe fails if response latency exceeds mean by this number of milliseconds", + "type": "integer", + "minimum": 1, + "maximum": 10000, + "default": 500 + }, + "adaptiveDivergencePercentage": { + "title": "Adaptive divergence percent", + "description": "Probe fails if response latency exceeds mean by this percentage", + "type": "integer", + "minimum": 1, + "maximum": 500, + "default": 100 + }, + "adaptiveLimitMilliseconds": { + "title": "Adaptive limit msec", + "description": "Probe fails if response latency exceeds this number of milliseconds", + "type": "integer", + "minimum": 1, + "maximum": 10000, + "default": 1000 + }, + "adaptiveWindow": { + "title": "Adaptive window", + "description": "Time window over which the system samples latency (seconds)", + "type": "integer", + "minimum": 5, + "maximum": 1800, + "default": 180 + }, + "interval": { + "title": "Interval", + "description": "Poll interval (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 5 + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string" + }, + "targetAddress": { + "title": "Address", + "description": "IP address monitor should probe; if empty (default) then pool member address", + "type": "string", + "format": "f5ip", + "default": "" + }, + "targetPort": { + "title": "Port", + "description": "L4 port (if any) monitor should probe; if 0 (default) then pool member port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "timeout": { + "title": "Timeout", + "description": "Time limit for node to respond (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 900, + "default": 16 + }, + "timeUntilUp": { + "title": "Time until up", + "description": "Delay between successful probe and sending traffic to node (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 1800, + "default": 0 + }, + "transparent": { + "title": "Transparent", + "description": "If true, treat pool member address as gateway to server (node) (default false)", + "type": "boolean", + "default": false + }, + "upInterval": { + "title": "Up-Interval", + "description": "Poll interval when service is already up (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 0 + } + }, + "additionalProperties": true + }, + "Monitor_Inband": { + "title": "Monitor Inband", + "description": "Monitor Inband definition", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "failureInterval": { + "title": "Failure Interval", + "description": "Specifies an interval, in seconds. If the number of failures specified in the failures option occurs within this interval, the system marks the pool member as being unavailable.", + "type": "integer", + "default": 30, + "maximum": 1000, + "minimum": 2 + }, + "failures": { + "title": "Failures", + "description": "Specifies the number of failures that the system allows to occur, within the time period specified in the failureInterval property, before marking a pool member unavailable. The multiple tmm processes use a per-process number to calculate failures, depending on the specified load. For example, for the Round Robin load balancing method, if there are N tmm processes and M pool members, and the Failures property is set to L, then up to N*M*L+1 failures can occur before the system marks the node as down. Specifying a value of 0 disables this option. A failure can be either a failure to connect or a failure of the pool member to respond within the time specified in the responseTime property.", + "type": "integer", + "default": 3, + "maximum": 1000, + "minimum": 0 + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string" + }, + "responseTime": { + "title": "Response Time", + "description": "Specifies an amount of time, in seconds. If the pool member does not respond with data after the specified amount of time has passed, the number of failures in this interval increments by 1. Specifying a value of 0 disables this option.", + "type": "integer", + "default": 10, + "maximum": 5000, + "minimum": 0 + }, + "retryTime": { + "title": "Retry Time", + "description": "Specifies the amount of time in seconds after the pool member has been marked unavailable before the system retries to connect to the pool member. Specifying a value of 0 disables this option.", + "type": "integer", + "default": 300, + "maximum": 5000, + "minimum": 0 + } + }, + "additionalProperties": true + }, + "Monitor_LDAP": { + "title": "Monitor LDAP", + "description": "Monitor LDAP definition", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "base": { + "title": "Base", + "description": "Specifies the location in the LDAP tree from which the monitor starts the health check", + "type": "string" + }, + "chaseReferrals": { + "title": "Chase Referrals", + "description": "Specifies, whether, upon receipt of an LDAP referral entry, the referral is followed", + "type": "boolean", + "default": true + }, + "filter": { + "title": "Filter", + "description": "Specifies an LDAP key which the monitor searches", + "type": "string" + }, + "interval": { + "title": "Interval", + "description": "Poll interval (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 5 + }, + "mandatoryAttributes": { + "title": "Mandatory Attributes", + "description": "Specifies whether the target must include attributes in its response to be considered up", + "type": "boolean", + "default": false + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string" + }, + "passphrase": { + "title": "Passphrase", + "description": "Passphrase if any for query authentication", + "type": "object", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "f5PostProcess": { + "tag": "fetch", + "data": "object", + "errSchemaPath": "#/definitions/Monitor_LDAP/properties/passphrase" + }, + "allOf": [ + { + "$ref": "#/definitions/Property_Passphrase" + } + ] + }, + "security": { + "title": "Security", + "description": "Specifies the secure protocol type for communications with the target", + "type": "string", + "enum": [ + "none", + "ssl", + "tls" + ], + "default": "none" + }, + "targetAddress": { + "title": "Address", + "description": "IP address monitor should probe; if empty (default) then pool member address", + "type": "string", + "format": "f5ip", + "default": "" + }, + "targetPort": { + "title": "Port", + "description": "L4 port (if any) monitor should probe; if 0 (default) then pool member port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "timeout": { + "title": "Timeout", + "description": "Time limit for node to respond (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 900, + "default": 16 + }, + "timeUntilUp": { + "title": "Time until up", + "description": "Delay between successful probe and sending traffic to node (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 1800, + "default": 0 + }, + "upInterval": { + "title": "Up-Interval", + "description": "Poll interval when service is already up (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 0 + }, + "username": { + "title": "Username", + "description": "Username if any for query authentication", + "type": "string" + } + }, + "additionalProperties": true + }, + "Monitor_MySQL": { + "title": "Monitor MySQL", + "description": "Monitor MySQL definition", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "count": { + "title": "Count", + "description": "Number of monitor probes after which the connection to the database will be terminated. Count value of zero indicates that the connection will never be terminated.", + "type": "integer", + "minimum": 0, + "maximum": 2147483647, + "default": 0 + }, + "database": { + "title": "Database", + "description": "The name of the database with which the monitor attempts to communicate.", + "type": "string" + }, + "interval": { + "title": "Interval", + "description": "Poll interval (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 5 + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string" + }, + "passphrase": { + "title": "Passphrase", + "description": "Passphrase if any for query authentication", + "type": "object", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "f5PostProcess": { + "tag": "fetch", + "data": "object", + "errSchemaPath": "#/definitions/Monitor_MySQL/properties/passphrase" + }, + "allOf": [ + { + "$ref": "#/definitions/Property_Passphrase" + } + ] + }, + "receive": { + "title": "Receive = up", + "description": "Mark node up upon receipt of this (backquote-expanded) string", + "type": "string", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_MySQL/properties/receive" + } + }, + "receiveColumn": { + "title": "Receive Column", + "description": "Specifies the column in the database where the system expects the specified Receive String to be located. Specify this property only if you configure the Send and Receive properties.", + "type": "integer", + "minimum": 1, + "maximum": 4096 + }, + "receiveRow": { + "title": "Receive Row", + "description": "Specifies the row in the database where the system expects the specified Receive String to be located. Specify this property only if you configure the Send and Recieve properties.", + "type": "integer", + "minimum": 1, + "maximum": 65535 + }, + "send": { + "title": "Send", + "description": "Send this (backquote-expanded) string to query node", + "type": "string", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_MySQL/properties/send" + } + }, + "targetAddress": { + "title": "Address", + "description": "IP address monitor should probe; if empty (default) then pool member address", + "type": "string", + "format": "f5ip", + "default": "" + }, + "targetPort": { + "title": "Port", + "description": "L4 port (if any) monitor should probe; if 0 (default) then pool member port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "timeout": { + "title": "Timeout", + "description": "Time limit for node to respond (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 900, + "default": 16 + }, + "timeUntilUp": { + "title": "Time until up", + "description": "Delay between successful probe and sending traffic to node (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 1800, + "default": 0 + }, + "upInterval": { + "title": "Up-Interval", + "description": "Poll interval when service is already up (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 0 + }, + "username": { + "title": "Username", + "description": "Username if any for query authentication", + "type": "string" + } + }, + "dependencies": { + "receiveColumn": { + "required": [ + "send", + "receive" + ] + }, + "receiveRow": { + "required": [ + "send", + "receive" + ] + } + }, + "additionalProperties": true + }, + "Monitor_PostgreSQL": { + "title": "Monitor PostgreSQL", + "description": "Monitor PostgreSQL definition", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "count": { + "title": "Count", + "description": "Number of monitor probes after which the connection to the database will be terminated. Count value of zero indicates that the connection will never be terminated.", + "type": "integer", + "minimum": 0, + "maximum": 2147483647, + "default": 0 + }, + "database": { + "title": "Database", + "description": "The name of the database with which the monitor attempts to communicate.", + "type": "string" + }, + "interval": { + "title": "Interval", + "description": "Poll interval (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 5 + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string" + }, + "receive": { + "title": "Receive = up", + "description": "Mark node up upon receipt of this (backquote-expanded) string", + "type": "string", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_PostgreSQL/properties/receive" + } + }, + "receiveColumn": { + "title": "Receive Column", + "description": "Specifies the column in the database where the system expects the specified Receive String to be located. Specify this property only if you configure the Send and Receive properties.", + "type": "integer", + "minimum": 1, + "maximum": 1600 + }, + "receiveRow": { + "title": "Receive Row", + "description": "Specifies the row in the database where the system expects the specified Receive String to be located. Specify this property only if you configure the Send and Recieve properties.", + "type": "integer", + "minimum": 1, + "maximum": 4294967294 + }, + "passphrase": { + "title": "Passphrase", + "description": "Passphrase if any for query authentication", + "type": "object", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "f5PostProcess": { + "tag": "fetch", + "data": "object", + "errSchemaPath": "#/definitions/Monitor_PostgreSQL/properties/passphrase" + }, + "allOf": [ + { + "$ref": "#/definitions/Property_Passphrase" + } + ] + }, + "send": { + "title": "Send", + "description": "Send this (backquote-expanded) string to query node", + "type": "string", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_PostgreSQL/properties/send" + } + }, + "targetAddress": { + "title": "Address", + "description": "IP address monitor should probe; if empty (default) then pool member address", + "type": "string", + "format": "f5ip", + "default": "" + }, + "targetPort": { + "title": "Port", + "description": "L4 port (if any) monitor should probe; if 0 (default) then pool member port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "timeout": { + "title": "Timeout", + "description": "Time limit for node to respond (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 900, + "default": 16 + }, + "timeUntilUp": { + "title": "Time until up", + "description": "Delay between successful probe and sending traffic to node (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 1800, + "default": 0 + }, + "upInterval": { + "title": "Up-Interval", + "description": "Poll interval when service is already up (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 0 + }, + "username": { + "title": "Username", + "description": "Username if any for query authentication", + "type": "string" + } + }, + "dependencies": { + "receiveColumn": { + "required": [ + "send", + "receive" + ] + }, + "receiveRow": { + "required": [ + "send", + "receive" + ] + } + }, + "additionalProperties": true + }, + "Monitor_RADIUS": { + "title": "Monitor RADIUS", + "description": "Monitor RADIUS definition", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "interval": { + "title": "Interval", + "description": "Poll interval (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 5 + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string" + }, + "nasIpAddress": { + "title": "IP Address", + "description": "Specifies the networks access server's IP address (NAS IP address) for a RADIUS monitor", + "type": "string", + "format": "f5ip" + }, + "passphrase": { + "title": "Passphrase", + "description": "Passphrase if any for query authentication", + "type": "object", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "f5PostProcess": { + "tag": "fetch", + "data": "object", + "errSchemaPath": "#/definitions/Monitor_RADIUS/properties/passphrase" + }, + "allOf": [ + { + "$ref": "#/definitions/Property_Passphrase" + } + ] + }, + "secret": { + "title": "Secret", + "description": "Specifies the secret the monitor needs to access the resource", + "type": "object", + "properties": { + "allowReuse": { + "description": "If true, other declaration objects may reuse this value", + "type": "boolean", + "default": false + } + }, + "allOf": [ + { + "$ref": "#/definitions/Secret" + }, + { + "f5PostProcess": { + "tag": "fetch", + "data": "object", + "errSchemaPath": "#/definitions/Monitor_RADIUS/properties/secret/allOf/1" + } + }, + { + "f5PostProcess": { + "tag": "secret", + "errSchemaPath": "#/definitions/Monitor_RADIUS/properties/secret/allOf/2" + } + } + ] + }, + "targetAddress": { + "title": "Address", + "description": "IP address monitor should probe; if empty (default) then pool member address", + "type": "string", + "format": "f5ip", + "default": "" + }, + "targetPort": { + "title": "Port", + "description": "L4 port (if any) monitor should probe; if 0 (default) then pool member port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "timeout": { + "title": "Timeout", + "description": "Time limit for node to respond (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 900, + "default": 16 + }, + "timeUntilUp": { + "title": "Time until up", + "description": "Delay between successful probe and sending traffic to node (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 1800, + "default": 0 + }, + "upInterval": { + "title": "Up-Interval", + "description": "Poll interval when service is already up (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 0 + }, + "username": { + "title": "Username", + "description": "Specifies the user name, if the monitor target requires authentication", + "type": "string" + } + }, + "additionalProperties": true + }, + "Monitor_SIP": { + "title": "Monitor SIP", + "description": "Monitor SIP definition", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "ciphers": { + "title": "Ciphers", + "description": "Ciphersuite selection string", + "type": "string", + "default": "DEFAULT" + }, + "clientCertificate": { + "title": "Client certificate", + "description": "BIG-IP AS3 pointer to client Certificate declaration, for TLS authentication (optional)", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "type": "object", + "properties": { + "class": { + "const": "Certificate" + } + }, + "required": [ + "class" + ] + }, + "errSchemaPath": "#/definitions/Monitor_SIP/properties/clientCertificate" + } + }, + "codesDown": { + "title": "Codes = down", + "description": "List of status codes meaning service is down (0 matches any code)", + "type": "array", + "items": { + "title": "Code = down", + "type": "integer", + "minimum": 0 + }, + "uniqueItems": true + }, + "codesUp": { + "title": "Codes = up", + "description": "List of additional (to all 1/2/3xx) status codes meaning service is up (0 matches any code)", + "type": "array", + "items": { + "title": "Code = up", + "type": "integer", + "minimum": 0 + }, + "uniqueItems": true + }, + "headers": { + "title": "Headers", + "description": "SIP headers to send in probes (if any)--separate by newlines (backquote-expanded)", + "type": "string", + "default": "", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_SIP/properties/headers" + } + }, + "interval": { + "title": "Interval", + "description": "Poll interval (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 5 + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string" + }, + "protocol": { + "title": "Protocol", + "description": "SIP transport protocol", + "type": "string", + "enum": [ + "sips", + "tcp", + "tls", + "udp" + ], + "default": "udp" + }, + "request": { + "title": "Request", + "description": "SIP request to send in probes (default empty)", + "type": "string", + "default": "" + }, + "targetAddress": { + "title": "Address", + "description": "IP address monitor should probe; if empty (default) then pool member address", + "type": "string", + "format": "f5ip", + "default": "" + }, + "targetPort": { + "title": "Port", + "description": "L4 port (if any) monitor should probe; if 0 (default) then pool member port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "timeout": { + "title": "Timeout", + "description": "Time limit for node to respond (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 900, + "default": 16 + }, + "timeUntilUp": { + "title": "Time until up", + "description": "Delay between successful probe and sending traffic to node (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 1800, + "default": 0 + }, + "upInterval": { + "title": "Up-Interval", + "description": "Poll interval when service is already up (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 0 + } + }, + "dependencies": { + "clientCertificate": { + "properties": { + "protocol": { + "enum": [ + "sips", + "tls" + ] + } + } + } + }, + "additionalProperties": true + }, + "Monitor_SMTP": { + "title": "Monitor SMTP", + "description": "Monitor SMTP definition", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "domain": { + "title": "Domain", + "description": "Mail domain to check, if any (backquote-expanded)", + "type": "string", + "format": "hostname", + "default": "", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_SMTP/properties/domain" + } + }, + "interval": { + "title": "Interval", + "description": "Poll interval (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 5 + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string" + }, + "targetAddress": { + "title": "Address", + "description": "IP address monitor should probe; if empty (default) then pool member address", + "type": "string", + "format": "f5ip", + "default": "" + }, + "targetPort": { + "title": "Port", + "description": "L4 port (if any) monitor should probe; if 0 (default) then pool member port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "timeout": { + "title": "Timeout", + "description": "Time limit for node to respond (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 900, + "default": 16 + }, + "timeUntilUp": { + "title": "Time until up", + "description": "Delay between successful probe and sending traffic to node (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 1800, + "default": 0 + }, + "upInterval": { + "title": "Up-Interval", + "description": "Poll interval when service is already up (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 0 + } + }, + "additionalProperties": true + }, + "Monitor_TCP": { + "title": "Monitor TCP", + "description": "Monitor TCP definition", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "adaptive": { + "title": "Adaptive", + "description": "If true, use adaptive probe timing", + "type": "boolean", + "default": false + }, + "adaptiveDivergenceMilliseconds": { + "title": "Adaptive divergence msec", + "description": "Probe fails if response latency exceeds mean by this number of milliseconds", + "type": "integer", + "minimum": 1, + "maximum": 10000, + "default": 500 + }, + "adaptiveDivergencePercentage": { + "title": "Adaptive divergence percent", + "description": "Probe fails if response latency exceeds mean by this percentage", + "type": "integer", + "minimum": 1, + "maximum": 500, + "default": 100 + }, + "adaptiveDivergenceType": { + "title": "Adaptive divergence type", + "description": "Adaptive divergence, 'absolute' selects milliseconds, 'relative' (default) selects percentage", + "type": "string", + "enum": [ + "absolute", + "relative" + ], + "default": "relative" + }, + "adaptiveLimitMilliseconds": { + "title": "Adaptive limit msec", + "description": "Probe fails if response latency exceeds this number of milliseconds", + "type": "integer", + "minimum": 1, + "maximum": 10000, + "default": 1000 + }, + "adaptiveWindow": { + "title": "Adaptive window", + "description": "Time window over which the system samples latency (seconds)", + "type": "integer", + "minimum": 5, + "maximum": 1800, + "default": 180 + }, + "dscp": { + "title": "IP DSCP", + "description": "Value for IP DSCP (ex-TOS) field (default 0)", + "type": "integer", + "minimum": 0, + "maximum": 63, + "default": 0 + }, + "interval": { + "title": "Interval", + "description": "Poll interval (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 5 + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string" + }, + "receive": { + "title": "Receive = up", + "description": "Mark node up upon receipt of this (backquote-expanded) string", + "type": "string", + "default": "none", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_TCP/properties/receive" + } + }, + "receiveDown": { + "title": "Receive = down", + "description": "Mark node down upon receipt of this (backquote-expanded) string (optional; must be empty when 'reverse' is true)", + "type": "string", + "default": "", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_TCP/properties/receiveDown" + } + }, + "reverse": { + "title": "Reverse", + "description": "If true, mark node down upon receipt of 'receive' string", + "type": "boolean", + "default": false + }, + "send": { + "title": "Send", + "description": "Send this (backquote-expanded) string to query node", + "type": "string", + "default": "none", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_TCP/properties/send" + } + }, + "targetAddress": { + "title": "Address", + "description": "IP address monitor should probe; if empty (default) then pool member address", + "type": "string", + "format": "f5ip", + "default": "" + }, + "targetPort": { + "title": "Port", + "description": "L4 port (if any) monitor should probe; if 0 (default) then pool member port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "timeout": { + "title": "Timeout", + "description": "Time limit for node to respond (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 900, + "default": 16 + }, + "timeUntilUp": { + "title": "Time until up", + "description": "Delay between successful probe and sending traffic to node (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 1800, + "default": 0 + }, + "transparent": { + "title": "Transparent", + "description": "If true, treat pool member address as gateway to server (node) (default false)", + "type": "boolean", + "default": false + }, + "upInterval": { + "title": "Up-Interval", + "description": "Poll interval when service is already up (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 0 + } + }, + "dependencies": { + "reverse": { + "if": { + "properties": { + "reverse": { + "const": true + } + } + }, + "then": { + "properties": { + "receiveDown": { + "const": "" + } + }, + "errorMessage": "if reverse is true, receiveDown must be empty" + } + } + }, + "additionalProperties": true + }, + "Monitor_TCP_Half_Open": { + "title": "Monitor TCP Half Open", + "description": "Monitor properties available when monitorType = tcp-half-open", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "interval": { + "title": "Interval", + "description": "Poll interval (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 5 + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string" + }, + "targetAddress": { + "title": "Address", + "description": "IP address monitor should probe; if empty (default) then pool member address", + "type": "string", + "format": "f5ip", + "default": "" + }, + "targetPort": { + "title": "Port", + "description": "L4 port (if any) monitor should probe; if 0 (default) then pool member port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "timeout": { + "title": "Timeout", + "description": "Time limit for node to respond (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 900, + "default": 16 + }, + "timeUntilUp": { + "title": "Time until up", + "description": "Delay between successful probe and sending traffic to node (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 1800, + "default": 0 + }, + "transparent": { + "title": "Transparent", + "description": "If true, treat pool member address as gateway to server (node) (default false)", + "type": "boolean", + "default": false + }, + "upInterval": { + "title": "Up-Interval", + "description": "Poll interval when service is already up (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 0 + } + }, + "additionalProperties": true + }, + "Monitor_UDP": { + "title": "Monitor UDP", + "description": "Monitor UDP definition", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "Monitor" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "adaptive": { + "title": "Adaptive", + "description": "If true, use adaptive probe timing", + "type": "boolean", + "default": false + }, + "adaptiveDivergenceMilliseconds": { + "title": "Adaptive divergence msec", + "description": "Probe fails if response latency exceeds mean by this number of milliseconds", + "type": "integer", + "minimum": 1, + "maximum": 10000, + "default": 500 + }, + "adaptiveDivergencePercentage": { + "title": "Adaptive divergence percent", + "description": "Probe fails if response latency exceeds mean by this percentage", + "type": "integer", + "minimum": 1, + "maximum": 500, + "default": 100 + }, + "adaptiveDivergenceType": { + "title": "Adaptive divergence type", + "description": "Adaptive divergence, 'absolute' selects milliseconds, 'relative' (default) selects percentage", + "type": "string", + "enum": [ + "absolute", + "relative" + ], + "default": "relative" + }, + "adaptiveLimitMilliseconds": { + "title": "Adaptive limit msec", + "description": "Probe fails if response latency exceeds this number of milliseconds", + "type": "integer", + "minimum": 1, + "maximum": 10000, + "default": 1000 + }, + "adaptiveWindow": { + "title": "Adaptive window", + "description": "Time window over which the system samples latency (seconds)", + "type": "integer", + "minimum": 60, + "maximum": 1800, + "default": 180 + }, + "interval": { + "title": "Interval", + "description": "Poll interval (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 5 + }, + "monitorType": { + "title": "Monitor Type", + "description": "Specifies the type of monitor", + "type": "string" + }, + "receive": { + "title": "Receive = up", + "description": "Mark node up upon receipt of this (backquote-expanded) string", + "type": "string", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_UDP/properties/receive" + }, + "default": "none" + }, + "receiveDown": { + "title": "Receive = down", + "description": "Mark node down upon receipt of this (backquote-expanded) string (optional; must be empty when 'reverse' is true)", + "type": "string", + "default": "", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_UDP/properties/receiveDown" + } + }, + "reverse": { + "title": "Reverse", + "description": "If true, mark node down upon receipt of 'receive' string", + "type": "boolean", + "default": false + }, + "send": { + "title": "Send", + "description": "Send this (backquote-expanded) string to node", + "type": "string", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Monitor_UDP/properties/send" + }, + "default": "default send string" + }, + "targetAddress": { + "title": "Address", + "description": "IP address monitor should probe; if empty (default) then pool member address", + "type": "string", + "format": "f5ip", + "default": "" + }, + "targetPort": { + "title": "Port", + "description": "L4 port (if any) monitor should probe; if 0 (default) then pool member port", + "type": "integer", + "minimum": 0, + "maximum": 65535, + "default": 0 + }, + "timeout": { + "title": "Timeout", + "description": "Time limit for node to respond (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 900, + "default": 16 + }, + "timeUntilUp": { + "title": "Time until up", + "description": "Delay between successful probe and sending traffic to node (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 1800, + "default": 0 + }, + "transparent": { + "title": "Transparent", + "description": "If true, treat pool member address as gateway to server (node) (default false)", + "type": "boolean", + "default": false + }, + "upInterval": { + "title": "Up-Interval", + "description": "Poll interval when service is already up (seconds)", + "type": "integer", + "minimum": 0, + "maximum": 3600, + "default": 0 + } + }, + "dependencies": { + "reverse": { + "if": { + "properties": { + "reverse": { + "const": true + } + } + }, + "then": { + "properties": { + "receiveDown": { + "const": "" + } + }, + "errorMessage": "if reverse is true, receiveDown must be empty" + } + } + }, + "additionalProperties": true + }, + "Pointer_BIGIP": { + "title": "Pointer BIG-IP", + "description": "Reference for a BIG-IP object", + "type": "object", + "properties": { + "bigip": { + "description": "Path to BIG-IP object", + "type": "string", + "minLength": 1 + } + }, + "required": [ + "bigip" + ], + "additionalProperties": false + }, + "Pointer_BIGIP_Or_Use": { + "title": "Pointer BIG-IP or Use", + "description": "Reference for a BIG-IP or Use object", + "if": { + "type": "object", + "required": [ + "bigip" + ] + }, + "then": { + "allOf": [ + { + "$ref": "#/definitions/Pointer_BIGIP" + } + ] + }, + "else": { + "allOf": [ + { + "$ref": "#/definitions/Pointer_Use" + } + ] + } + }, + "Pointer_CA_Bundle": { + "title": "Pointer CA Bundle", + "description": "Reference to a Ca Bundle", + "additionalProperties": false, + "maxProperties": 1, + "minProperties": 1, + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP Ca Bundle", + "format": "f5bigip", + "type": "string" + }, + "use": { + "allOf": [ + { + "$ref": "#/definitions/Property_Use" + }, + { + "f5PostProcess": { + "tag": "pointer", + "data": { + "type": "object", + "properties": { + "class": { + "enum": [ + "CA_Bundle" + ] + } + }, + "required": [ + "class" + ] + }, + "errSchemaPath": "#/definitions/Pointer_CA_Bundle/properties/use/allOf/1" + } + } + ] + } + }, + "type": "object", + "allOf": [ + { + "f5PostProcess": { + "data": [ + "query sys file ssl-cert" + ], + "tag": "bigComponent", + "errSchemaPath": "#/definitions/Pointer_CA_Bundle/allOf/0" + } + } + ] + }, + "Pointer_Certificate_Validator_OCSP": { + "title": "Pointer Certificate Validator OCSP", + "description": "Reference to a OCSP Cert Validator", + "additionalProperties": false, + "allOf": [ + { + "f5PostProcess": { + "data": [ + "query sys crypto cert-validator ocsp" + ], + "tag": "bigComponent", + "errSchemaPath": "#/definitions/Pointer_Certificate_Validator_OCSP/allOf/0" + } + } + ], + "maxProperties": 1, + "minProperties": 1, + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP OCSP Cert Validator", + "format": "f5bigip", + "type": "string" + }, + "use": { + "description": "BIG-IP AS3 pointer to OCSP Cert Validator declaration", + "f5PostProcess": { + "data": { + "type": "object", + "properties": { + "class": { + "enum": [ + "Certificate_Validator_OCSP" + ] + } + }, + "required": [ + "class" + ] + }, + "tag": "pointer", + "errSchemaPath": "#/definitions/Pointer_Certificate_Validator_OCSP/properties/use" + }, + "minLength": 1, + "type": "string" + } + }, + "type": "object" + }, + "Pointer_Copy_From": { + "title": "Copy from pointer", + "description": "pointer to declaration object/property from which to copy value", + "type": "string" + }, + "Pointer_DNS_Resolver": { + "title": "Pointer DNS Resolver", + "description": "Reference to a DNS resolver", + "type": "object", + "allOf": [ + { + "f5PostProcess": { + "data": [ + "query net dns-resolver" + ], + "tag": "bigComponent", + "errSchemaPath": "#/definitions/Pointer_DNS_Resolver/allOf/0" + } + } + ], + "maxProperties": 1, + "minProperties": 1, + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP DNS resolver", + "format": "f5bigip", + "type": "string" + } + }, + "additionalProperties": false + }, + "Pointer_F5_String_Or_BIGIP": { + "title": "Pointer F5 String or BIG-IP", + "description": "Reference for a property or BIG-IP object", + "if": { + "type": "object", + "required": [ + "bigip" + ] + }, + "then": { + "allOf": [ + { + "$ref": "#/definitions/Pointer_BIGIP" + } + ] + }, + "else": { + "allOf": [ + { + "$ref": "#/definitions/F5_String" + } + ] + } + }, + "Pointer_HTTP_Acceleration_Profile": { + "title": "Pointer HTTP Acceleration Profile", + "additionalProperties": false, + "allOf": [ + { + "f5PostProcess": { + "data": [ + "query ltm profile web-acceleration" + ], + "tag": "bigComponent", + "errSchemaPath": "#/definitions/Pointer_HTTP_Acceleration_Profile/allOf/0" + } + } + ], + "description": "Reference to a HTTP Acceleration Profile", + "maxProperties": 1, + "minProperties": 1, + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP HTTP Acceleration Profile", + "format": "f5bigip", + "type": "string" + }, + "use": { + "description": "AS3 pointer to HTTP Acceleration Profile declaration", + "f5PostProcess": { + "data": { + "type": "object", + "properties": { + "class": { + "enum": [ + "HTTP_Acceleration_Profile" + ] + } + }, + "required": [ + "class" + ] + }, + "tag": "pointer", + "errSchemaPath": "#/definitions/Pointer_HTTP_Acceleration_Profile/properties/use" + }, + "minLength": 1, + "type": "string" + } + }, + "type": "object" + }, + "Pointer_HTTP_Profile": { + "title": "Pointer HTTP Profile", + "allOf": [ + { + "$ref": "#/definitions/Pointer_BIGIP_Or_Use" + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP HTTP Profile", + "format": "f5bigip" + }, + "use": { + "description": "AS3 pointer to HTTP Profile declaration", + "f5PostProcess": { + "tag": "pointer", + "data": { + "type": "object", + "properties": { + "class": { + "enum": [ + "HTTP_Profile" + ] + } + }, + "required": [ + "class" + ] + }, + "errSchemaPath": "#/definitions/Pointer_HTTP_Profile/allOf/1/properties/use" + }, + "minLength": 1 + } + }, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm profile http" + ], + "errSchemaPath": "#/definitions/Pointer_HTTP_Profile/allOf/1" + } + } + ], + "description": "Reference to a HTTP Profile", + "maxProperties": 1, + "minProperties": 1 + }, + "Pointer_L4_Profile": { + "title": "Pointer L4 Profile", + "description": "Reference to a fast L4 profile", + "maxProperties": 1, + "minProperties": 1, + "allOf": [ + { + "$ref": "#/definitions/Pointer_BIGIP_Or_Use" + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "use": { + "f5PostProcess": { + "tag": "pointer", + "data": { + "type": "object", + "properties": { + "class": { + "enum": [ + "L4_Profile" + ] + } + }, + "required": [ + "class" + ] + }, + "errSchemaPath": "#/definitions/Pointer_L4_Profile/allOf/1/properties/use" + } + }, + "bigip": { + "format": "f5bigip" + } + }, + "f5PostProcess": { + "data": [ + "query ltm profile fastl4" + ], + "tag": "bigComponent", + "errSchemaPath": "#/definitions/Pointer_L4_Profile/allOf/1" + } + } + ] + }, + "Pointer_Log_Destination": { + "title": "Pointer Log Destination", + "description": "Reference to a log destination", + "allOf": [ + { + "$ref": "#/definitions/Pointer_BIGIP_Or_Use" + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "use": { + "f5PostProcess": { + "tag": "pointer", + "data": { + "type": "object", + "properties": { + "class": { + "enum": [ + "Log_Destination" + ] + } + }, + "required": [ + "class" + ] + }, + "errSchemaPath": "#/definitions/Pointer_Log_Destination/allOf/1/properties/use" + } + }, + "bigip": { + "format": "f5bigip" + } + }, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys log-config destination alertd", + "query sys log-config destination arcsight", + "query sys log-config destination ipfix", + "query sys log-config destination local-database", + "query sys log-config destination local-syslog", + "query sys log-config destination management-port", + "query sys log-config destination remote-high-speed-log", + "query sys log-config destination remote-syslog", + "query sys log-config destination splunk" + ], + "errSchemaPath": "#/definitions/Pointer_Log_Destination/allOf/1" + } + } + ] + }, + "Pointer_Log_Publisher": { + "title": "Pointer Log Publisher", + "description": "Reference to a log publisher", + "allOf": [ + { + "$ref": "#/definitions/Pointer_BIGIP_Or_Use" + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "use": { + "f5PostProcess": { + "tag": "pointer", + "data": { + "type": "object", + "properties": { + "class": { + "enum": [ + "Log_Publisher" + ] + } + }, + "required": [ + "class" + ] + }, + "errSchemaPath": "#/definitions/Pointer_Log_Publisher/allOf/1/properties/use" + } + }, + "bigip": { + "format": "f5bigip" + } + }, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query sys log-config publisher" + ], + "errSchemaPath": "#/definitions/Pointer_Log_Publisher/allOf/1" + } + } + ] + }, + "Pointer_Monitor": { + "title": "Pointer Monitor", + "type": "object", + "description": "Name or path to monitor", + "additionalProperties": true, + "properties": { + "bigip": { + "title": "BIG-IP monitor", + "description": "Pathname of existing BIG-IP monitor", + "type": "string", + "format": "f5bigip" + }, + "use": { + "allOf": [ + { + "$ref": "#/definitions/Property_Use" + }, + { + "description": "BIG-IP AS3 pointer to monitor declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "type": "object", + "properties": { + "class": { + "const": "Monitor" + } + }, + "required": [ + "class" + ] + }, + "errSchemaPath": "#/definitions/Pointer_Monitor/properties/use/allOf/1" + } + } + ] + } + } + }, + "Pointer_Pool": { + "title": "Pointer Pool", + "description": "Reference to a pool", + "allOf": [ + { + "$ref": "#/definitions/Pointer_BIGIP_Or_Use" + }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "use": { + "f5PostProcess": { + "tag": "pointer", + "data": { + "type": "object", + "properties": { + "class": { + "enum": [ + "Pool" + ] + } + }, + "required": [ + "class" + ] + }, + "errSchemaPath": "#/definitions/Pointer_Pool/allOf/1/properties/use" + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP pool", + "format": "f5bigip" + } + }, + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm pool" + ], + "errSchemaPath": "#/definitions/Pointer_Pool/allOf/1" + } + } + ], + "minProperties": 1, + "maxProperties": 1 + }, + "Pointer_SNAT_Pool": { + "title": "Pointer SNAT Pool", + "description": "Reference to a snat pool", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to snat pool declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "type": "object", + "properties": { + "class": { + "enum": [ + "SNAT_Pool" + ] + } + }, + "required": [ + "class" + ] + }, + "errSchemaPath": "#/definitions/Pointer_SNAT_Pool/properties/use" + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP snat pool", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm snatpool" + ], + "errSchemaPath": "#/definitions/Pointer_SNAT_Pool/allOf/0" + } + } + ] + }, + "Pointer_SNAT_Translation": { + "title": "Pointer SNAT Translation", + "description": "Reference to a snat translation", + "type": "object", + "properties": { + "use": { + "description": "AS3 pointer to snat translation declaration", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "type": "object", + "properties": { + "class": { + "enum": [ + "SNAT_Translation" + ] + } + }, + "required": [ + "class" + ] + }, + "errSchemaPath": "#/definitions/Pointer_SNAT_Translation/properties/use" + } + }, + "bigip": { + "description": "Pathname of existing BIG-IP snat translation", + "type": "string", + "format": "f5bigip" + } + }, + "additionalProperties": false, + "minProperties": 1, + "maxProperties": 1, + "allOf": [ + { + "f5PostProcess": { + "tag": "bigComponent", + "data": [ + "query ltm snat-translation" + ], + "errSchemaPath": "#/definitions/Pointer_SNAT_Translation/allOf/0" + } + } + ] + }, + "Pointer_SSL_Certificate": { + "title": "Pointer SSL Certificate", + "description": "Reference to a SSL certificate", + "type": "object", + "allOf": [ + { + "f5PostProcess": { + "data": [ + "query sys file ssl-cert" + ], + "tag": "bigComponent", + "errSchemaPath": "#/definitions/Pointer_SSL_Certificate/allOf/0" + } + } + ], + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP SSL certificate", + "format": "f5bigip", + "type": "string" + }, + "use": { + "description": "BIG-IP AS3 pointer to SSL certificate declaration", + "f5PostProcess": { + "data": { + "type": "object", + "properties": { + "class": { + "enum": [ + "Certificate" + ] + } + }, + "required": [ + "class" + ] + }, + "tag": "pointer", + "errSchemaPath": "#/definitions/Pointer_SSL_Certificate/properties/use" + }, + "minLength": 1, + "type": "string" + } + }, + "maxProperties": 1, + "minProperties": 1, + "additionalProperties": false + }, + "Pointer_String": { + "title": "Pointer String", + "description": "Reference that is a string", + "type": "string" + }, + "Pointer_System_All": { + "title": "All system reference pointers", + "description": "All system reference pointers valid for the runtime (bigip, cm, etc.)", + "type": "object", + "if": { + "required": [ + "bigip" + ] + }, + "then": { + "$ref": "#/definitions/Pointer_BIGIP" + }, + "else": false + }, + "Pointer_System_All_Condition": { + "title": "System reference pointers condition check", + "description": "System reference pointers condition check", + "type": "object", + "oneOf": [ + { + "required": [ + "bigip" + ] + } + ] + }, + "Pointer_System_All_Or_F5_String": { + "title": "System reference pointers or F5 string", + "description": "System reference pointers (all valid for the runtime) or F5 string", + "if": { + "$ref": "#/definitions/Pointer_System_All_Condition" + }, + "then": { + "$ref": "#/definitions/Pointer_System_All" + }, + "else": { + "$ref": "#/definitions/F5_String" + } + }, + "Pointer_Use": { + "title": "Pointer Use", + "description": "Reference for use property", + "type": "object", + "properties": { + "use": { + "$ref": "#/definitions/Property_Use" + } + }, + "required": [ + "use" + ], + "additionalProperties": false + }, + "Pointer_WebSocket_Profile": { + "title": "Pointer WebSocket Profile", + "additionalProperties": false, + "allOf": [ + { + "f5PostProcess": { + "data": [ + "query ltm profile websocket" + ], + "tag": "bigComponent", + "errSchemaPath": "#/definitions/Pointer_WebSocket_Profile/allOf/0" + } + } + ], + "description": "Reference to a WebSocket Profile", + "maxProperties": 1, + "minProperties": 1, + "properties": { + "bigip": { + "description": "Pathname of existing BIG-IP WebSocket Profile", + "format": "f5bigip", + "type": "string" + }, + "use": { + "description": "AS3 pointer to WebSocket Profile declaration", + "f5PostProcess": { + "data": { + "type": "object", + "properties": { + "class": { + "enum": [ + "WebSocket_Profile" + ] + } + }, + "required": [ + "class" + ] + }, + "tag": "pointer", + "errSchemaPath": "#/definitions/Pointer_WebSocket_Profile/properties/use" + }, + "minLength": 1, + "type": "string" + } + }, + "type": "object" + }, + "Property_Base64": { + "title": "Property Base64", + "description": "A Base64-encoded value (base64 property)", + "allOf": [ + { + "$ref": "#/definitions/Resource_Base64" + } + ] + }, + "Property_Loose_Close": { + "title": "Loose close", + "description": "When true, system closes a loosely-initiated connection when the system receives the first FIN packet from either the client or the server", + "type": "boolean" + }, + "Property_Loose_Initialization": { + "title": "Loose initialization", + "description": "When true, system initializes a connection when it receives any TCP packet, rather than requiring a SYN packet for connection initiation", + "type": "boolean" + }, + "Property_Passphrase": { + "title": "Property Passphrase", + "description": "A passphrase (passphrase property)", + "allOf": [ + { + "$ref": "#/definitions/Secret" + } + ], + "f5PostProcess": { + "tag": "secret", + "errSchemaPath": "#/definitions/Property_Passphrase" + } + }, + "Property_Reset_On_Timeout": { + "title": "Reset On Timeout", + "description": "Specifies whether to reset connections on timeout", + "type": "boolean" + }, + "Property_TCP_Close_Timeout": { + "title": "TCP Close timeout", + "description": "Specifies a TCP close timeout in seconds. Value -1 means indefinite (not recommended)", + "type": "integer", + "maximum": 86400, + "minimum": -1 + }, + "Property_TCP_Handshake_Timeout": { + "title": "TCP Handshake timeout", + "description": "Specifies a TCP handshake timeout in seconds. Value -1 means indefinite (not recommended)", + "type": "integer", + "maximum": 86400, + "minimum": -1 + }, + "Property_Text": { + "title": "Property Text", + "description": "A text value (text property)", + "allOf": [ + { + "$ref": "#/definitions/Resource_Text" + } + ] + }, + "Property_Use": { + "title": "Property Use", + "description": "Path to object in declaration", + "type": "string", + "pattern": "^[A-Za-z€-￿/][0-9A-Za-z€-￿_./-]*$", + "maxLength": 573, + "minLength": 1 + }, + "Resource_Base64": { + "title": "Resource Base64", + "description": "A Base64-encoded value", + "type": "string", + "pattern": "^([0-9A-Za-z/+_-]*|[0-9A-Za-z/+_-]+={1,2})$" + }, + "Resource_Text": { + "title": "Resource Text", + "description": "UTF-8 text (in JSON string)", + "type": "string" + }, + "Resource_URL": { + "title": "Resource URL", + "description": "The URL for a required resource", + "oneOf": [ + { + "type": "string", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Resource_URL/oneOf/0" + }, + "format": "uri" + }, + { + "type": "object", + "properties": { + "authentication": { + "description": "Authentication to the remote source", + "oneOf": [ + { + "$ref": "#/definitions/Basic_Auth" + }, + { + "$ref": "#/definitions/Bearer_Token" + } + ] + }, + "ignoreChanges": { + "type": "boolean", + "description": "If false (default), the URL will be fetched in each BIG-IP AS3 declaration deployment. If true, the resource will be created on the first deployment, but not on additional deployments", + "default": false + }, + "skipCertificateCheck": { + "type": "boolean", + "description": "Skip verification of SSL certificates (default false)", + "default": false + }, + "url": { + "type": "string", + "description": "URL from which to retrieve value", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Resource_URL/oneOf/1/properties/url" + }, + "format": "uri" + } + }, + "required": [ + "url" + ], + "additionalProperties": false + } + ] + }, + "Secret": { + "title": "Secret value", + "description": "A value: (a) in a cryptogram in this object; (b) in a cryptogram elsewhere in this declaration; or (c) available from a URL", + "oneOf": [ + { + "type": "object", + "properties": { + "allowReuse": { + "title": "Allow reuse", + "description": "If true, other declaration objects may reuse this value", + "type": "boolean" + }, + "reuseFrom": { + "title": "Reuse from", + "description": "BIG-IP AS3 pointer to another JWE cryptogram in this declaration to copy", + "type": "string", + "minLength": 1, + "f5PostProcess": { + "tag": "pointer", + "data": { + "type": "object", + "required": [ + "ciphertext" + ] + }, + "errSchemaPath": "#/definitions/Secret/oneOf/0/properties/reuseFrom" + } + }, + "url": { + "title": "URL", + "description": "URL from which secret should be fetched", + "allOf": [ + { + "$ref": "#/definitions/Secret_Resource_URL" + } + ] + } + }, + "oneOf": [ + { + "required": [ + "ciphertext" + ] + }, + { + "required": [ + "reuseFrom" + ] + }, + { + "required": [ + "url" + ] + } + ], + "if": { + "required": [ + "ciphertext" + ] + }, + "then": { + "$ref": "#/definitions/JWE" + } + } + ] + }, + "Secret_Resource_URL": { + "title": "Secret Resource URL", + "description": "Describes the URL to remote resource and optional parameters", + "oneOf": [ + { + "type": "string", + "format": "uri", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Secret_Resource_URL/oneOf/0" + } + }, + { + "type": "object", + "properties": { + "url": { + "description": "URL from which to retrieve value", + "type": "string", + "format": "uri", + "f5PostProcess": { + "tag": "expand", + "errSchemaPath": "#/definitions/Secret_Resource_URL/oneOf/1/properties/url" + } + }, + "skipCertificateCheck": { + "description": "Skip verification of SSL certificates (default false)", + "type": "boolean", + "default": false + } + }, + "required": [ + "url" + ] + } + ] + }, + "SNAT_Pool": { + "title": "SNAT Pool", + "description": "SNAT pool", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "SNAT_Pool" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "snatAddresses": { + "title": "SNAT addresses", + "description": "List of SNAT addresses-- may include both IPv4 and IPv6", + "type": "array", + "items": { + "title": "SNAT address", + "type": "string", + "format": "f5ip" + }, + "minItems": 1, + "uniqueItems": true + }, + "remark": { + "$ref": "#/definitions/Remark" + } + }, + "required": [ + "class" + ], + "additionalProperties": false + }, + "SNAT_Translation": { + "title": "SNAT_Translation", + "description": "Configures explicit secure network address translation (SNAT) address", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "SNAT_Translation" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "address": { + "title": "Address", + "description": "The IP address of the SNAT translation", + "type": "string", + "format": "f5ip" + }, + "adminState": { + "title": "Administration State", + "description": "Specifies the state of the SNAT translation", + "type": "string", + "enum": [ + "enable", + "disable" + ], + "default": "enable" + }, + "arpEnabled": { + "title": "Enable ARP", + "description": "Specifies that the NAT sends ARP requests", + "type": "boolean", + "default": true + }, + "ipIdleTimeout": { + "title": "IP Idle Timeout", + "description": "Specifies time in seconds that connections to an IP address initiated using a SNAT address are allowed to remain idle before being automatically disconnected. Specifying 'indefinite' prevents the connection from timing out.", + "oneOf": [ + { + "type": "integer", + "maximum": 4294967295, + "minimum": 1 + }, + { + "type": "string", + "const": "indefinite" + } + ], + "default": "indefinite" + }, + "maxConnections": { + "title": "Maximum Connections", + "description": "Specifies a limit on the number of connections a translation address must reach before it no longer initiates a connection. A value of 0 indicates the setting is disabled.", + "type": "integer", + "minimum": 0, + "maximum": 4294967295, + "default": 0 + }, + "tcpIdleTimeout": { + "title": "TCP Idle Timeout", + "description": "Specifies time in seconds that TCP connections initiated using a SNAT address are allowed to remain idle before being automatically disconnected. Specifying 'indefinite' prevents the connection from timing out.", + "oneOf": [ + { + "type": "integer", + "maximum": 4294967295, + "minimum": 1 + }, + { + "type": "string", + "const": "indefinite" + } + ], + "default": "indefinite" + }, + "trafficGroup": { + "title": "Traffic Group", + "description": "Specifies the traffic group which the SNAT_Translation belongs", + "type": "string", + "default": "default" + }, + "udpIdleTimeout": { + "title": "UDP Idle Timeout", + "description": "Specifies time in seconds that UDP connections initiated using a SNAT address are allowed to remain idle before being automatically disconnected. Specifying 'indefinite' prevents the connection from timing out.", + "oneOf": [ + { + "type": "integer", + "maximum": 4294967295, + "minimum": 1 + }, + { + "type": "string", + "const": "indefinite" + } + ], + "default": "indefinite" + } + }, + "additionalProperties": false, + "required": [ + "class", + "address" + ] + }, + "UDP_Profile": { + "title": "UDP Profile", + "description": "Configures a User Datagram Protocol (UDP) profile", + "type": "object", + "properties": { + "class": { + "title": "Class", + "type": "string", + "const": "UDP_Profile" + }, + "label": { + "$ref": "#/definitions/Label" + }, + "remark": { + "$ref": "#/definitions/Remark" + }, + "allowNoPayload": { + "title": "Allow empty payload", + "description": "When true, forward UDP datagrams with empty payloads (default false)", + "type": "boolean", + "default": false + }, + "bufferMaxBytes": { + "title": "Buffer maximum-bytes", + "description": "Limit to number of octets which the system may buffer for a UDP flow (default 655350)", + "type": "integer", + "minimum": 65535, + "maximum": 16777215, + "default": 655350 + }, + "bufferMaxPackets": { + "title": "Buffer maximum-packets", + "description": "Limit to number of packets which the system may buffer for a UDP flow (default 0)", + "type": "integer", + "minimum": 0, + "maximum": 255, + "default": 0 + }, + "datagramLoadBalancing": { + "title": "Datagram load-balancing", + "description": "When true, process UDP datagrams independently, without recognizing flows (default false)", + "type": "boolean", + "default": false + }, + "idleTimeout": { + "title": "Idle timeout", + "description": "Number of seconds (default 60) flow may remain idle before it becomes eligible for deletion. Value 0 allows system to recover per-flow resources whenever convenient (always safe with UDP). Value -1 means indefinite (not recommended)", + "type": "integer", + "minimum": -1, + "maximum": 86400, + "default": 60 + }, + "ipDfMode": { + "title": "IP DF mode", + "description": "Controls DF (Don't Fragment) flag in outgoing datagrams. Value 'pmtu' (default) sets DF based on IP PMTU value. Value 'preserve' copies DF from received datagram. Value 'set' forces DF true in all outgoing datagrams. Value 'clear' forces DF false in all outgoing datagrams", + "type": "string", + "enum": [ + "clear", + "pmtu", + "preserve", + "set" + ], + "default": "pmtu" + }, + "ipTosToClient": { + "title": "IP TOS/DSCP to client", + "description": "Specifies the IP TOS/DSCP value in packets sent to clients (default 0). Numeric values in this property are decimal representations of eight-bit numbers, of which the leftmost six bits are the DSCP code per rfc2474 (and the rightmost two bits reserved). You may have to calculate the value of this property by multiplying a DSCP code, such as CS5+EF = 46, by four, to obtain the 'ipTosToClient' value, such as 184. Value 'pass-through' sets DSCP from the initial server-side value. Value 'mimic' copies DSCP from the most-recently received server-side packet (allowing DSCP to vary during the life of a connection)", + "oneOf": [ + { + "type": "integer", + "minimum": 0, + "maximum": 252, + "multipleOf": 4 + }, + { + "type": "string", + "enum": [ + "pass-through", + "mimic" + ] + } + ], + "default": 0 + }, + "linkQosToClient": { + "title": "Link QOS to client", + "description": "Specifies the Layer-2 QOS value in packets sent to clients (default 0). Ethernet-type networks recognize numeric codes from 0 to 7. Value 'pass-through' sets QOS from the initial server-side value", + "oneOf": [ + { + "type": "integer", + "minimum": 0, + "maximum": 7 + }, + { + "type": "string", + "const": "pass-through" + } + ], + "default": 0 + }, + "proxyMSS": { + "title": "Proxy MSS", + "description": "When true, MSS advertised on the server side will match that negotiated with the client, if permitted by MTU and other constraints (default false)", + "type": "boolean", + "default": false + }, + "ttlIPv4": { + "title": "TTL for IPv4", + "description": "TTL the system sets in outgoing IPv4 datagrams", + "type": "integer", + "minimum": 1, + "maximum": 255, + "default": 255 + }, + "ttlIPv6": { + "title": "TTL for IPv6", + "description": "TTL the system sets in outgoing IPv6 datagrams", + "type": "integer", + "minimum": 1, + "maximum": 255, + "default": 64 + }, + "ttlMode": { + "title": "TTL mode", + "description": "Controls IP TTL in outgoing datagrams. Value 'set' forces TTL to value of property 'ttlIPv4' or 'ttlIPv6' as appropriate. Value 'proxy' forces TTL to the default value for IPv4 or IPv6 as appropriate. Value 'preserve' copies TTL from received datagram. Value 'decrement' sets TTL to one less than received datagram's TTL", + "type": "string", + "enum": [ + "decrement", + "preserve", + "proxy", + "set" + ], + "default": "proxy" + }, + "useChecksum": { + "title": "Use checksum", + "description": "When true, system will validate UDP checksums for IPv4 datagrams (default false). Checksums are always validated for IPv6", + "type": "boolean", + "default": false + } + }, + "additionalProperties": false, + "required": [ + "class" + ] + } + } + } \ No newline at end of file diff --git a/pkg/tools/gen/testdata/jsonschema/complex-workflow/expect.k b/pkg/tools/gen/testdata/jsonschema/complex-workflow/expect.k index b69c048e..f27ef086 100644 --- a/pkg/tools/gen/testdata/jsonschema/complex-workflow/expect.k +++ b/pkg/tools/gen/testdata/jsonschema/complex-workflow/expect.k @@ -16,9 +16,9 @@ schema Workflow: The name of the GitHub event that triggers the workflow. You can provide a single event string, array of events, array of event types, or an event configuration map that schedules a workflow or restricts the execution of a workflow to specific files, tags, or branch changes. For a list of available events, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/events-that-trigger-workflows. env : WorkflowEnvOneOf0 | str, optional A map of environment variables that are available to all jobs and steps in the workflow. - defaults : WorkflowDefaults, optional + defaults : Defaults, optional A map of default settings that will apply to all jobs in the workflow. - concurrency : str | WorkflowConcurrencyOneOf1, optional + concurrency : str | Concurrency, optional Concurrency ensures that only a single job or workflow using the same concurrency group will run at a time. A concurrency group can be any string or expression. The expression can use any context except for the secrets context. You can also specify concurrency at the workflow level. When a concurrent job or workflow is queued, if another job or workflow using the same concurrency group in the repository is in progress, the queued job or workflow will be pending. Any previously pending job or workflow in the concurrency group will be canceled. To also cancel any currently running job or workflow in the same concurrency group, specify cancel-in-progress: true. @@ -26,21 +26,21 @@ schema Workflow: A workflow run is made up of one or more jobs. Jobs run in parallel by default. To run jobs sequentially, you can define dependencies on other jobs using the jobs..needs keyword. Each job runs in a fresh instance of the virtual environment specified by runs-on. You can run an unlimited number of jobs as long as you are within the workflow usage limits. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#usage-limits. - permissions : "read-all" | "write-all" | WorkflowPermissionsOneOf1, optional + permissions : "read-all" | "write-all" | PermissionsEvent, optional You can modify the default permissions granted to the GITHUB_TOKEN, adding or removing access as required, so that you only allow the minimum required access. """ name?: str on: "branch_protection_rule" | "check_run" | "check_suite" | "create" | "delete" | "deployment" | "deployment_status" | "discussion" | "discussion_comment" | "fork" | "gollum" | "issue_comment" | "issues" | "label" | "member" | "milestone" | "page_build" | "project" | "project_card" | "project_column" | "public" | "pull_request" | "pull_request_review" | "pull_request_review_comment" | "pull_request_target" | "push" | "registry_package" | "release" | "status" | "watch" | "workflow_call" | "workflow_dispatch" | "workflow_run" | "repository_dispatch" | ["branch_protection_rule" | "check_run" | "check_suite" | "create" | "delete" | "deployment" | "deployment_status" | "discussion" | "discussion_comment" | "fork" | "gollum" | "issue_comment" | "issues" | "label" | "member" | "milestone" | "page_build" | "project" | "project_card" | "project_column" | "public" | "pull_request" | "pull_request_review" | "pull_request_review_comment" | "pull_request_target" | "push" | "registry_package" | "release" | "status" | "watch" | "workflow_call" | "workflow_dispatch" | "workflow_run" | "repository_dispatch"] | WorkflowOnOneOf2 env?: WorkflowEnvOneOf0 | str - defaults?: WorkflowDefaults - concurrency?: str | WorkflowConcurrencyOneOf1 + defaults?: Defaults + concurrency?: str | Concurrency jobs: WorkflowJobs - permissions?: "read-all" | "write-all" | WorkflowPermissionsOneOf1 + permissions?: "read-all" | "write-all" | PermissionsEvent -schema WorkflowConcurrencyOneOf1: +schema Concurrency: r""" - WorkflowConcurrencyOneOf1 + Concurrency Attributes ---------- @@ -53,52 +53,99 @@ schema WorkflowConcurrencyOneOf1: group: str "cancel-in-progress"?: bool | str -schema WorkflowDefaults: +schema Container: r""" - A map of default settings that will apply to all jobs in the workflow. + Container Attributes ---------- - run : WorkflowDefaultsRun, optional + image : str, required + The Docker image to use as the container to run the action. The value can be the Docker Hub image name or a registry name. + credentials : WorkflowJobsPatternProperties0OneOf0ServicesAdditionalPropertiesCredentials, optional + If the image's container registry requires authentication to pull the image, you can use credentials to set a map of the username and password. The credentials are the same values that you would provide to the `docker login` command. + env : WorkflowJobsPatternProperties0OneOf0ServicesAdditionalPropertiesEnvOneOf0 | str, optional + Sets an array of environment variables in the container. + ports : [float | str], optional + Sets an array of ports to expose on the container. + volumes : [str], optional + Sets an array of volumes for the container to use. You can use volumes to share data between services or other steps in a job. You can specify named Docker volumes, anonymous Docker volumes, or bind mounts on the host. + To specify a volume, you specify the source and destination path: : + The is a volume name or an absolute path on the host machine, and is an absolute path in the container. + options : str, optional + Additional Docker container resource options. For a list of options, see https://docs.docker.com/engine/reference/commandline/create/#options. """ - run?: WorkflowDefaultsRun + image: str + credentials?: WorkflowJobsPatternProperties0OneOf0ServicesAdditionalPropertiesCredentials + env?: WorkflowJobsPatternProperties0OneOf0ServicesAdditionalPropertiesEnvOneOf0 | str + ports?: [float | str] + volumes?: [str] + options?: str + + check: + len(ports) >= 1 if ports + len(volumes) >= 1 if volumes -schema WorkflowDefaultsRun: +schema Defaults: r""" - WorkflowDefaultsRun + A map of default settings that will apply to all steps in the job. Attributes ---------- - shell : any, optional - You can override the default shell settings in the runner's operating system using the shell keyword. You can use built-in shell keywords, or you can define a custom set of shell options. - "working-directory" : str, optional - Using the working-directory keyword, you can specify the working directory of where to run the command. + run : WorkflowJobsPatternProperties0OneOf0DefaultsRun, optional """ - shell?: any - "working-directory"?: str + run?: WorkflowJobsPatternProperties0OneOf0DefaultsRun -schema WorkflowEnvOneOf0: +schema Env: r""" - WorkflowEnvOneOf0 + A map of the input parameters defined by the action. Each input parameter is a key/value pair. Input parameters are set as environment variables. The variable is prefixed with INPUT_ and converted to upper case. + + Attributes + ---------- + args : str, optional + entrypoint : str, optional """ - [...str]: str | float | bool + args?: str + entrypoint?: str -schema WorkflowJobs: +schema Environment: r""" - A workflow run is made up of one or more jobs. Jobs run in parallel by default. To run jobs sequentially, you can define dependencies on other jobs using the jobs..needs keyword. - Each job runs in a fresh instance of the virtual environment specified by runs-on. - You can run an unlimited number of jobs as long as you are within the workflow usage limits. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#usage-limits. + The environment that the job references + + Attributes + ---------- + name : str, required + The name of the environment configured in the repo. + url : str, optional + A deployment URL + """ + + name: str + url?: str + +schema EventObject: + r""" + This event occurs when a workflow run is requested or completed, and allows you to execute a workflow based on the finished result of another workflow. For example, if your pull_request workflow generates build artifacts, you can create a new workflow that uses workflow_run to analyze the results and add a comment to the original pull request. + + Attributes + ---------- + types : ["requested" | "completed"], optional, default is ["requested", "completed"] + Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. + You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. + workflows : [str], optional """ - [key: str]: WorkflowJobsPatternProperties0OneOf0 | WorkflowJobsPatternProperties0OneOf1 + types?: ["requested" | "completed"] = ["requested", "completed"] + workflows?: [str] + [...str]: any check: - regex.match(key, r"^[_a-zA-Z][a-zA-Z0-9_-]*$") + len(types) >= 1 if types + len(workflows) >= 1 if workflows -schema WorkflowJobsPatternProperties0OneOf0: +schema NormalJob: r""" Each job must have an id to associate with the job. The key job_id is a string and its value is a map of the job's configuration data. You must replace with a string that is unique to the jobs object. The must start with a letter or _ and contain only alphanumeric characters, -, or _. @@ -108,17 +155,17 @@ schema WorkflowJobsPatternProperties0OneOf0: The name of the job displayed on GitHub. needs : [str] | str, optional Identifies any jobs that must complete successfully before this job will run. It can be a string or array of strings. If a job fails, all jobs that need it are skipped unless the jobs use a conditional statement that causes the job to continue. - permissions : "read-all" | "write-all" | WorkflowJobsPatternProperties0OneOf0PermissionsOneOf1, optional + permissions : "read-all" | "write-all" | PermissionsEvent, optional You can modify the default permissions granted to the GITHUB_TOKEN, adding or removing access as required, so that you only allow the minimum required access. "runs-on" : "macos-10.15" | "macos-11" | "macos-12" | "macos-latest" | "self-hosted" | "ubuntu-18.04" | "ubuntu-20.04" | "ubuntu-22.04" | "ubuntu-latest" | "windows-2016" | "windows-2019" | "windows-2022" | "windows-latest" | any | str, required The type of machine to run the job on. The machine can be either a GitHub-hosted runner, or a self-hosted runner. - environment : str | WorkflowJobsPatternProperties0OneOf0EnvironmentOneOf1, optional + environment : str | Environment, optional The environment that the job references. outputs : WorkflowJobsPatternProperties0OneOf0Outputs, optional A map of outputs for a job. Job outputs are available to all downstream jobs that depend on this job. env : WorkflowJobsPatternProperties0OneOf0EnvOneOf0 | str, optional A map of environment variables that are available to all steps in the job. - defaults : WorkflowJobsPatternProperties0OneOf0Defaults, optional + defaults : Defaults, optional A map of default settings that will apply to all steps in the job. $if : str, optional You can use the if conditional to prevent a job from running unless a condition is met. You can use any supported context and expression to create a conditional. @@ -132,7 +179,7 @@ schema WorkflowJobsPatternProperties0OneOf0: A strategy creates a build matrix for your jobs. You can define different variations of an environment to run each job in. "continue-on-error" : bool | str, optional Prevents a workflow run from failing when a job fails. Set to true to allow a workflow run to pass when this job fails. - container : str | WorkflowJobsPatternProperties0OneOf0ContainerOneOf1, optional + container : str | Container, optional A container to run any steps in a job that don't already specify a container. If you have steps that use both script and container actions, the container actions will run as sibling containers on the same network with the same volume mounts. If you do not set a container, all steps will run directly on the host specified by runs-on unless a step refers to an action configured to run in a container. services : WorkflowJobsPatternProperties0OneOf0Services, optional @@ -140,7 +187,7 @@ schema WorkflowJobsPatternProperties0OneOf0: When you use a service container for a job or your step uses container actions, you don't need to set port information to access the service. Docker automatically exposes all ports between containers on the same network. When both the job and the action run in a container, you can directly reference the container by its hostname. The hostname is automatically mapped to the service name. When a step does not use a container action, you must access the service using localhost and bind the ports. - concurrency : str | WorkflowJobsPatternProperties0OneOf0ConcurrencyOneOf1, optional + concurrency : str | Concurrency, optional Concurrency ensures that only a single job or workflow using the same concurrency group will run at a time. A concurrency group can be any string or expression. The expression can use any context except for the secrets context. You can also specify concurrency at the workflow level. When a concurrent job or workflow is queued, if another job or workflow using the same concurrency group in the repository is in progress, the queued job or workflow will be pending. Any previously pending job or workflow in the concurrency group will be canceled. To also cancel any currently running job or workflow in the same concurrency group, specify cancel-in-progress: true. @@ -148,106 +195,178 @@ schema WorkflowJobsPatternProperties0OneOf0: name?: str needs?: [str] | str - permissions?: "read-all" | "write-all" | WorkflowJobsPatternProperties0OneOf0PermissionsOneOf1 + permissions?: "read-all" | "write-all" | PermissionsEvent "runs-on": "macos-10.15" | "macos-11" | "macos-12" | "macos-latest" | "self-hosted" | "ubuntu-18.04" | "ubuntu-20.04" | "ubuntu-22.04" | "ubuntu-latest" | "windows-2016" | "windows-2019" | "windows-2022" | "windows-latest" | any | str - environment?: str | WorkflowJobsPatternProperties0OneOf0EnvironmentOneOf1 + environment?: str | Environment outputs?: WorkflowJobsPatternProperties0OneOf0Outputs env?: WorkflowJobsPatternProperties0OneOf0EnvOneOf0 | str - defaults?: WorkflowJobsPatternProperties0OneOf0Defaults + defaults?: Defaults $if?: str steps?: [WorkflowJobsPatternProperties0OneOf0StepsItems0] "timeout-minutes"?: float = 360 strategy?: WorkflowJobsPatternProperties0OneOf0Strategy "continue-on-error"?: bool | str - container?: str | WorkflowJobsPatternProperties0OneOf0ContainerOneOf1 + container?: str | Container services?: WorkflowJobsPatternProperties0OneOf0Services - concurrency?: str | WorkflowJobsPatternProperties0OneOf0ConcurrencyOneOf1 + concurrency?: str | Concurrency check: len(steps) >= 1 if steps -schema WorkflowJobsPatternProperties0OneOf0ConcurrencyOneOf1: +schema PermissionsEvent: r""" - WorkflowJobsPatternProperties0OneOf0ConcurrencyOneOf1 + PermissionsEvent Attributes ---------- - group : str, required - When a concurrent job or workflow is queued, if another job or workflow using the same concurrency group in the repository is in progress, the queued job or workflow will be pending. Any previously pending job or workflow in the concurrency group will be canceled. - "cancel-in-progress" : bool | str, optional - To cancel any currently running job or workflow in the same concurrency group, specify cancel-in-progress: true. + actions : "read" | "write" | "none", optional + checks : "read" | "write" | "none", optional + contents : "read" | "write" | "none", optional + deployments : "read" | "write" | "none", optional + discussions : "read" | "write" | "none", optional + "id-token" : "read" | "write" | "none", optional + issues : "read" | "write" | "none", optional + packages : "read" | "write" | "none", optional + pages : "read" | "write" | "none", optional + "pull-requests" : "read" | "write" | "none", optional + "repository-projects" : "read" | "write" | "none", optional + "security-events" : "read" | "write" | "none", optional + statuses : "read" | "write" | "none", optional """ - group: str - "cancel-in-progress"?: bool | str + actions?: "read" | "write" | "none" + checks?: "read" | "write" | "none" + contents?: "read" | "write" | "none" + deployments?: "read" | "write" | "none" + discussions?: "read" | "write" | "none" + "id-token"?: "read" | "write" | "none" + issues?: "read" | "write" | "none" + packages?: "read" | "write" | "none" + pages?: "read" | "write" | "none" + "pull-requests"?: "read" | "write" | "none" + "repository-projects"?: "read" | "write" | "none" + "security-events"?: "read" | "write" | "none" + statuses?: "read" | "write" | "none" -schema WorkflowJobsPatternProperties0OneOf0ContainerOneOf1: +schema Ref: r""" - WorkflowJobsPatternProperties0OneOf0ContainerOneOf1 + Runs your workflow when someone pushes to a repository branch, which triggers the push event. + Note: The webhook payload available to GitHub Actions does not include the added, removed, and modified attributes in the commit object. You can retrieve the full commit object using the REST API. For more information, see https://developer.github.com/v3/repos/commits/#get-a-single-commit. Attributes ---------- - image : str, required - The Docker image to use as the container to run the action. The value can be the Docker Hub image name or a registry name. - credentials : WorkflowJobsPatternProperties0OneOf0ContainerOneOf1Credentials, optional - If the image's container registry requires authentication to pull the image, you can use credentials to set a map of the username and password. The credentials are the same values that you would provide to the `docker login` command. - env : WorkflowJobsPatternProperties0OneOf0ContainerOneOf1EnvOneOf0 | str, optional - Sets an array of environment variables in the container. - ports : [float | str], optional - Sets an array of ports to expose on the container. - volumes : [str], optional - Sets an array of volumes for the container to use. You can use volumes to share data between services or other steps in a job. You can specify named Docker volumes, anonymous Docker volumes, or bind mounts on the host. - To specify a volume, you specify the source and destination path: : - The is a volume name or an absolute path on the host machine, and is an absolute path in the container. - options : str, optional - Additional Docker container resource options. For a list of options, see https://docs.docker.com/engine/reference/commandline/create/#options. + branches : [str | str | str], optional + When using the push and pull_request events, you can configure a workflow to run on specific branches or tags. If you only define only tags or only branches, the workflow won't run for events affecting the undefined Git ref. + The branches, branches-ignore, tags, and tags-ignore keywords accept glob patterns that use the * and ** wildcard characters to match more than one branch or tag name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. + The patterns defined in branches and tags are evaluated against the Git ref's name. For example, defining the pattern mona/octocat in branches will match the refs/heads/mona/octocat Git ref. The pattern releases/** will match the refs/heads/releases/10 Git ref. + You can use two types of filters to prevent a workflow from running on pushes and pull requests to tags and branches: + - branches or branches-ignore - You cannot use both the branches and branches-ignore filters for the same event in a workflow. Use the branches filter when you need to filter branches for positive matches and exclude branches. Use the branches-ignore filter when you only need to exclude branch names. + - tags or tags-ignore - You cannot use both the tags and tags-ignore filters for the same event in a workflow. Use the tags filter when you need to filter tags for positive matches and exclude tags. Use the tags-ignore filter when you only need to exclude tag names. + You can exclude tags and branches using the ! character. The order that you define patterns matters. + - A matching negative pattern (prefixed with !) after a positive match will exclude the Git ref. + - A matching positive pattern after a negative match will include the Git ref again. + "branches-ignore" : [str | str | str], optional + When using the push and pull_request events, you can configure a workflow to run on specific branches or tags. If you only define only tags or only branches, the workflow won't run for events affecting the undefined Git ref. + The branches, branches-ignore, tags, and tags-ignore keywords accept glob patterns that use the * and ** wildcard characters to match more than one branch or tag name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. + The patterns defined in branches and tags are evaluated against the Git ref's name. For example, defining the pattern mona/octocat in branches will match the refs/heads/mona/octocat Git ref. The pattern releases/** will match the refs/heads/releases/10 Git ref. + You can use two types of filters to prevent a workflow from running on pushes and pull requests to tags and branches: + - branches or branches-ignore - You cannot use both the branches and branches-ignore filters for the same event in a workflow. Use the branches filter when you need to filter branches for positive matches and exclude branches. Use the branches-ignore filter when you only need to exclude branch names. + - tags or tags-ignore - You cannot use both the tags and tags-ignore filters for the same event in a workflow. Use the tags filter when you need to filter tags for positive matches and exclude tags. Use the tags-ignore filter when you only need to exclude tag names. + You can exclude tags and branches using the ! character. The order that you define patterns matters. + - A matching negative pattern (prefixed with !) after a positive match will exclude the Git ref. + - A matching positive pattern after a negative match will include the Git ref again. + tags : [str | str | str], optional + When using the push and pull_request events, you can configure a workflow to run on specific branches or tags. If you only define only tags or only branches, the workflow won't run for events affecting the undefined Git ref. + The branches, branches-ignore, tags, and tags-ignore keywords accept glob patterns that use the * and ** wildcard characters to match more than one branch or tag name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. + The patterns defined in branches and tags are evaluated against the Git ref's name. For example, defining the pattern mona/octocat in branches will match the refs/heads/mona/octocat Git ref. The pattern releases/** will match the refs/heads/releases/10 Git ref. + You can use two types of filters to prevent a workflow from running on pushes and pull requests to tags and branches: + - branches or branches-ignore - You cannot use both the branches and branches-ignore filters for the same event in a workflow. Use the branches filter when you need to filter branches for positive matches and exclude branches. Use the branches-ignore filter when you only need to exclude branch names. + - tags or tags-ignore - You cannot use both the tags and tags-ignore filters for the same event in a workflow. Use the tags filter when you need to filter tags for positive matches and exclude tags. Use the tags-ignore filter when you only need to exclude tag names. + You can exclude tags and branches using the ! character. The order that you define patterns matters. + - A matching negative pattern (prefixed with !) after a positive match will exclude the Git ref. + - A matching positive pattern after a negative match will include the Git ref again. + "tags-ignore" : [str | str | str], optional + When using the push and pull_request events, you can configure a workflow to run on specific branches or tags. If you only define only tags or only branches, the workflow won't run for events affecting the undefined Git ref. + The branches, branches-ignore, tags, and tags-ignore keywords accept glob patterns that use the * and ** wildcard characters to match more than one branch or tag name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. + The patterns defined in branches and tags are evaluated against the Git ref's name. For example, defining the pattern mona/octocat in branches will match the refs/heads/mona/octocat Git ref. The pattern releases/** will match the refs/heads/releases/10 Git ref. + You can use two types of filters to prevent a workflow from running on pushes and pull requests to tags and branches: + - branches or branches-ignore - You cannot use both the branches and branches-ignore filters for the same event in a workflow. Use the branches filter when you need to filter branches for positive matches and exclude branches. Use the branches-ignore filter when you only need to exclude branch names. + - tags or tags-ignore - You cannot use both the tags and tags-ignore filters for the same event in a workflow. Use the tags filter when you need to filter tags for positive matches and exclude tags. Use the tags-ignore filter when you only need to exclude tag names. + You can exclude tags and branches using the ! character. The order that you define patterns matters. + - A matching negative pattern (prefixed with !) after a positive match will exclude the Git ref. + - A matching positive pattern after a negative match will include the Git ref again. + paths : [str | str | str], optional + When using the push and pull_request events, you can configure a workflow to run when at least one file does not match paths-ignore or at least one modified file matches the configured paths. Path filters are not evaluated for pushes to tags. + The paths-ignore and paths keywords accept glob patterns that use the * and ** wildcard characters to match more than one path name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. + You can exclude paths using two types of filters. You cannot use both of these filters for the same event in a workflow. + - paths-ignore - Use the paths-ignore filter when you only need to exclude path names. + - paths - Use the paths filter when you need to filter paths for positive matches and exclude paths. + "paths-ignore" : [str | str | str], optional + When using the push and pull_request events, you can configure a workflow to run when at least one file does not match paths-ignore or at least one modified file matches the configured paths. Path filters are not evaluated for pushes to tags. + The paths-ignore and paths keywords accept glob patterns that use the * and ** wildcard characters to match more than one path name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. + You can exclude paths using two types of filters. You cannot use both of these filters for the same event in a workflow. + - paths-ignore - Use the paths-ignore filter when you only need to exclude path names. + - paths - Use the paths filter when you need to filter paths for positive matches and exclude paths. """ - image: str - credentials?: WorkflowJobsPatternProperties0OneOf0ContainerOneOf1Credentials - env?: WorkflowJobsPatternProperties0OneOf0ContainerOneOf1EnvOneOf0 | str - ports?: [float | str] - volumes?: [str] - options?: str + branches?: [str | str | str] + "branches-ignore"?: [str | str | str] + tags?: [str | str | str] + "tags-ignore"?: [str | str | str] + paths?: [str | str | str] + "paths-ignore"?: [str | str | str] + [key: str]: [str] check: - len(ports) >= 1 if ports - len(volumes) >= 1 if volumes + len(branches) >= 1 if branches + len("branches-ignore") >= 1 if "branches-ignore" + len(tags) >= 1 if tags + len("tags-ignore") >= 1 if "tags-ignore" + len(paths) >= 1 if paths + len("paths-ignore") >= 1 if "paths-ignore" + regex.match(key, r"^(branche|tag|path)s(-ignore)?$") -schema WorkflowJobsPatternProperties0OneOf0ContainerOneOf1Credentials: +schema ReusableWorkflowCallJob: r""" - If the image's container registry requires authentication to pull the image, you can use credentials to set a map of the username and password. The credentials are the same values that you would provide to the `docker login` command. + Each job must have an id to associate with the job. The key job_id is a string and its value is a map of the job's configuration data. You must replace with a string that is unique to the jobs object. The must start with a letter or _ and contain only alphanumeric characters, -, or _. Attributes ---------- - username : str, optional - password : str, optional - """ - - username?: str - password?: str - -schema WorkflowJobsPatternProperties0OneOf0ContainerOneOf1EnvOneOf0: - r""" - WorkflowJobsPatternProperties0OneOf0ContainerOneOf1EnvOneOf0 + name : str, optional + The name of the job displayed on GitHub. + needs : [str] | str, optional + Identifies any jobs that must complete successfully before this job will run. It can be a string or array of strings. If a job fails, all jobs that need it are skipped unless the jobs use a conditional statement that causes the job to continue. + permissions : PermissionsEvent, optional + $if : str, optional + You can use the if conditional to prevent a job from running unless a condition is met. You can use any supported context and expression to create a conditional. + Expressions in an if conditional do not require the ${{ }} syntax. For more information, see https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions. + uses : str, required + The location and version of a reusable workflow file to run as a job, of the form './{path/to}/{localfile}.yml' or '{owner}/{repo}/{path}/{filename}@{ref}'. {ref} can be a SHA, a release tag, or a branch name. Using the commit SHA is the safest for stability and security. + with : WorkflowJobsPatternProperties0OneOf1WithOneOf0 | str, optional + A map of inputs that are passed to the called workflow. Any inputs that you pass must match the input specifications defined in the called workflow. Unlike 'jobs..steps[*].with', the inputs you pass with 'jobs..with' are not be available as environment variables in the called workflow. Instead, you can reference the inputs by using the inputs context. + secrets : WorkflowJobsPatternProperties0OneOf1SecretsOneOf0OneOf0 | str | "inherit", optional + When a job is used to call a reusable workflow, you can use 'secrets' to provide a map of secrets that are passed to the called workflow. Any secrets that you pass must match the names defined in the called workflow. + concurrency : str | Concurrency, optional + Concurrency ensures that only a single job or workflow using the same concurrency group will run at a time. A concurrency group can be any string or expression. The expression can use any context except for the secrets context. + You can also specify concurrency at the workflow level. + When a concurrent job or workflow is queued, if another job or workflow using the same concurrency group in the repository is in progress, the queued job or workflow will be pending. Any previously pending job or workflow in the concurrency group will be canceled. To also cancel any currently running job or workflow in the same concurrency group, specify cancel-in-progress: true. """ - [...str]: str | float | bool - -schema WorkflowJobsPatternProperties0OneOf0Defaults: - r""" - A map of default settings that will apply to all steps in the job. - - Attributes - ---------- - run : WorkflowJobsPatternProperties0OneOf0DefaultsRun, optional - """ + name?: str + needs?: [str] | str + permissions?: PermissionsEvent + $if?: str + uses: str + with?: WorkflowJobsPatternProperties0OneOf1WithOneOf0 | str + secrets?: WorkflowJobsPatternProperties0OneOf1SecretsOneOf0OneOf0 | str | "inherit" + concurrency?: str | Concurrency - run?: WorkflowJobsPatternProperties0OneOf0DefaultsRun + check: + regex.match(uses, r"^(.+/)+(.+)\.(ya?ml)(@.+)?$") -schema WorkflowJobsPatternProperties0OneOf0DefaultsRun: +schema WorkflowDefaultsRun: r""" - WorkflowJobsPatternProperties0OneOf0DefaultsRun + WorkflowDefaultsRun Attributes ---------- @@ -260,112 +379,83 @@ schema WorkflowJobsPatternProperties0OneOf0DefaultsRun: shell?: any "working-directory"?: str -schema WorkflowJobsPatternProperties0OneOf0EnvOneOf0: +schema WorkflowEnvOneOf0: r""" - WorkflowJobsPatternProperties0OneOf0EnvOneOf0 + WorkflowEnvOneOf0 """ [...str]: str | float | bool -schema WorkflowJobsPatternProperties0OneOf0EnvironmentOneOf1: +schema WorkflowJobs: r""" - The environment that the job references - - Attributes - ---------- - name : str, required - The name of the environment configured in the repo. - url : str, optional - A deployment URL + A workflow run is made up of one or more jobs. Jobs run in parallel by default. To run jobs sequentially, you can define dependencies on other jobs using the jobs..needs keyword. + Each job runs in a fresh instance of the virtual environment specified by runs-on. + You can run an unlimited number of jobs as long as you are within the workflow usage limits. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#usage-limits. """ - name: str - url?: str - -schema WorkflowJobsPatternProperties0OneOf0Outputs: - r""" - A map of outputs for a job. Job outputs are available to all downstream jobs that depend on this job. - """ + [key: str]: NormalJob | ReusableWorkflowCallJob - [...str]: str + check: + regex.match(key, r"^[_a-zA-Z][a-zA-Z0-9_-]*$") -schema WorkflowJobsPatternProperties0OneOf0PermissionsOneOf1: +schema WorkflowJobsPatternProperties0OneOf0ContainerOneOf1Credentials: r""" - WorkflowJobsPatternProperties0OneOf0PermissionsOneOf1 + If the image's container registry requires authentication to pull the image, you can use credentials to set a map of the username and password. The credentials are the same values that you would provide to the `docker login` command. Attributes ---------- - actions : "read" | "write" | "none", optional - checks : "read" | "write" | "none", optional - contents : "read" | "write" | "none", optional - deployments : "read" | "write" | "none", optional - discussions : "read" | "write" | "none", optional - "id-token" : "read" | "write" | "none", optional - issues : "read" | "write" | "none", optional - packages : "read" | "write" | "none", optional - pages : "read" | "write" | "none", optional - "pull-requests" : "read" | "write" | "none", optional - "repository-projects" : "read" | "write" | "none", optional - "security-events" : "read" | "write" | "none", optional - statuses : "read" | "write" | "none", optional + username : str, optional + password : str, optional """ - actions?: "read" | "write" | "none" - checks?: "read" | "write" | "none" - contents?: "read" | "write" | "none" - deployments?: "read" | "write" | "none" - discussions?: "read" | "write" | "none" - "id-token"?: "read" | "write" | "none" - issues?: "read" | "write" | "none" - packages?: "read" | "write" | "none" - pages?: "read" | "write" | "none" - "pull-requests"?: "read" | "write" | "none" - "repository-projects"?: "read" | "write" | "none" - "security-events"?: "read" | "write" | "none" - statuses?: "read" | "write" | "none" + username?: str + password?: str -schema WorkflowJobsPatternProperties0OneOf0Services: +schema WorkflowJobsPatternProperties0OneOf0ContainerOneOf1EnvOneOf0: r""" - Additional containers to host services for a job in a workflow. These are useful for creating databases or cache services like redis. The runner on the virtual machine will automatically create a network and manage the life cycle of the service containers. - When you use a service container for a job or your step uses container actions, you don't need to set port information to access the service. Docker automatically exposes all ports between containers on the same network. - When both the job and the action run in a container, you can directly reference the container by its hostname. The hostname is automatically mapped to the service name. - When a step does not use a container action, you must access the service using localhost and bind the ports. + WorkflowJobsPatternProperties0OneOf0ContainerOneOf1EnvOneOf0 """ - [...str]: WorkflowJobsPatternProperties0OneOf0ServicesAdditionalProperties + [...str]: str | float | bool -schema WorkflowJobsPatternProperties0OneOf0ServicesAdditionalProperties: +schema WorkflowJobsPatternProperties0OneOf0DefaultsRun: r""" - WorkflowJobsPatternProperties0OneOf0ServicesAdditionalProperties + WorkflowJobsPatternProperties0OneOf0DefaultsRun Attributes ---------- - image : str, required - The Docker image to use as the container to run the action. The value can be the Docker Hub image name or a registry name. - credentials : WorkflowJobsPatternProperties0OneOf0ServicesAdditionalPropertiesCredentials, optional - If the image's container registry requires authentication to pull the image, you can use credentials to set a map of the username and password. The credentials are the same values that you would provide to the `docker login` command. - env : WorkflowJobsPatternProperties0OneOf0ServicesAdditionalPropertiesEnvOneOf0 | str, optional - Sets an array of environment variables in the container. - ports : [float | str], optional - Sets an array of ports to expose on the container. - volumes : [str], optional - Sets an array of volumes for the container to use. You can use volumes to share data between services or other steps in a job. You can specify named Docker volumes, anonymous Docker volumes, or bind mounts on the host. - To specify a volume, you specify the source and destination path: : - The is a volume name or an absolute path on the host machine, and is an absolute path in the container. - options : str, optional - Additional Docker container resource options. For a list of options, see https://docs.docker.com/engine/reference/commandline/create/#options. + shell : any, optional + You can override the default shell settings in the runner's operating system using the shell keyword. You can use built-in shell keywords, or you can define a custom set of shell options. + "working-directory" : str, optional + Using the working-directory keyword, you can specify the working directory of where to run the command. """ - image: str - credentials?: WorkflowJobsPatternProperties0OneOf0ServicesAdditionalPropertiesCredentials - env?: WorkflowJobsPatternProperties0OneOf0ServicesAdditionalPropertiesEnvOneOf0 | str - ports?: [float | str] - volumes?: [str] - options?: str + shell?: any + "working-directory"?: str - check: - len(ports) >= 1 if ports - len(volumes) >= 1 if volumes +schema WorkflowJobsPatternProperties0OneOf0EnvOneOf0: + r""" + WorkflowJobsPatternProperties0OneOf0EnvOneOf0 + """ + + [...str]: str | float | bool + +schema WorkflowJobsPatternProperties0OneOf0Outputs: + r""" + A map of outputs for a job. Job outputs are available to all downstream jobs that depend on this job. + """ + + [...str]: str + +schema WorkflowJobsPatternProperties0OneOf0Services: + r""" + Additional containers to host services for a job in a workflow. These are useful for creating databases or cache services like redis. The runner on the virtual machine will automatically create a network and manage the life cycle of the service containers. + When you use a service container for a job or your step uses container actions, you don't need to set port information to access the service. Docker automatically exposes all ports between containers on the same network. + When both the job and the action run in a container, you can directly reference the container by its hostname. The hostname is automatically mapped to the service name. + When a step does not use a container action, you must access the service using localhost and bind the ports. + """ + + [...str]: Container schema WorkflowJobsPatternProperties0OneOf0ServicesAdditionalPropertiesCredentials: r""" @@ -416,7 +506,7 @@ schema WorkflowJobsPatternProperties0OneOf0StepsItems0: Using the working-directory keyword, you can specify the working directory of where to run the command. shell : any, optional You can override the default shell settings in the runner's operating system using the shell keyword. You can use built-in shell keywords, or you can define a custom set of shell options. - with : WorkflowJobsPatternProperties0OneOf0StepsItems0WithOneOf0 | str | WorkflowJobsPatternProperties0OneOf0StepsItems0With, optional + with : WorkflowJobsPatternProperties0OneOf0StepsItems0WithOneOf0 | str | Env, optional A map of the input parameters defined by the action. Each input parameter is a key/value pair. Input parameters are set as environment variables. The variable is prefixed with INPUT_ and converted to upper case. env : WorkflowJobsPatternProperties0OneOf0StepsItems0EnvOneOf0 | str, optional Sets environment variables for steps to use in the virtual environment. You can also set environment variables for the entire workflow or a job. @@ -433,7 +523,7 @@ schema WorkflowJobsPatternProperties0OneOf0StepsItems0: run?: str "working-directory"?: str shell?: any - with?: WorkflowJobsPatternProperties0OneOf0StepsItems0WithOneOf0 | str | WorkflowJobsPatternProperties0OneOf0StepsItems0With + with?: WorkflowJobsPatternProperties0OneOf0StepsItems0WithOneOf0 | str | Env env?: WorkflowJobsPatternProperties0OneOf0StepsItems0EnvOneOf0 | str "continue-on-error"?: bool | str = False "timeout-minutes"?: float @@ -445,19 +535,6 @@ schema WorkflowJobsPatternProperties0OneOf0StepsItems0EnvOneOf0: [...str]: str | float | bool -schema WorkflowJobsPatternProperties0OneOf0StepsItems0With: - r""" - A map of the input parameters defined by the action. Each input parameter is a key/value pair. Input parameters are set as environment variables. The variable is prefixed with INPUT_ and converted to upper case. - - Attributes - ---------- - args : str, optional - entrypoint : str, optional - """ - - args?: str - entrypoint?: str - schema WorkflowJobsPatternProperties0OneOf0StepsItems0WithOneOf0: r""" WorkflowJobsPatternProperties0OneOf0StepsItems0WithOneOf0 @@ -522,94 +599,6 @@ schema WorkflowJobsPatternProperties0OneOf0StrategyMatrixPatternProperties0Items [...str]: str | float | bool | any | [str | float | bool | any | any] -schema WorkflowJobsPatternProperties0OneOf1: - r""" - Each job must have an id to associate with the job. The key job_id is a string and its value is a map of the job's configuration data. You must replace with a string that is unique to the jobs object. The must start with a letter or _ and contain only alphanumeric characters, -, or _. - - Attributes - ---------- - name : str, optional - The name of the job displayed on GitHub. - needs : [str] | str, optional - Identifies any jobs that must complete successfully before this job will run. It can be a string or array of strings. If a job fails, all jobs that need it are skipped unless the jobs use a conditional statement that causes the job to continue. - permissions : WorkflowJobsPatternProperties0OneOf1Permissions, optional - $if : str, optional - You can use the if conditional to prevent a job from running unless a condition is met. You can use any supported context and expression to create a conditional. - Expressions in an if conditional do not require the ${{ }} syntax. For more information, see https://help.github.com/en/articles/contexts-and-expression-syntax-for-github-actions. - uses : str, required - The location and version of a reusable workflow file to run as a job, of the form './{path/to}/{localfile}.yml' or '{owner}/{repo}/{path}/{filename}@{ref}'. {ref} can be a SHA, a release tag, or a branch name. Using the commit SHA is the safest for stability and security. - with : WorkflowJobsPatternProperties0OneOf1WithOneOf0 | str, optional - A map of inputs that are passed to the called workflow. Any inputs that you pass must match the input specifications defined in the called workflow. Unlike 'jobs..steps[*].with', the inputs you pass with 'jobs..with' are not be available as environment variables in the called workflow. Instead, you can reference the inputs by using the inputs context. - secrets : WorkflowJobsPatternProperties0OneOf1SecretsOneOf0OneOf0 | str | "inherit", optional - When a job is used to call a reusable workflow, you can use 'secrets' to provide a map of secrets that are passed to the called workflow. Any secrets that you pass must match the names defined in the called workflow. - concurrency : str | WorkflowJobsPatternProperties0OneOf1ConcurrencyOneOf1, optional - Concurrency ensures that only a single job or workflow using the same concurrency group will run at a time. A concurrency group can be any string or expression. The expression can use any context except for the secrets context. - You can also specify concurrency at the workflow level. - When a concurrent job or workflow is queued, if another job or workflow using the same concurrency group in the repository is in progress, the queued job or workflow will be pending. Any previously pending job or workflow in the concurrency group will be canceled. To also cancel any currently running job or workflow in the same concurrency group, specify cancel-in-progress: true. - """ - - name?: str - needs?: [str] | str - permissions?: WorkflowJobsPatternProperties0OneOf1Permissions - $if?: str - uses: str - with?: WorkflowJobsPatternProperties0OneOf1WithOneOf0 | str - secrets?: WorkflowJobsPatternProperties0OneOf1SecretsOneOf0OneOf0 | str | "inherit" - concurrency?: str | WorkflowJobsPatternProperties0OneOf1ConcurrencyOneOf1 - - check: - regex.match(uses, r"^(.+/)+(.+)\.(ya?ml)(@.+)?$") - -schema WorkflowJobsPatternProperties0OneOf1ConcurrencyOneOf1: - r""" - WorkflowJobsPatternProperties0OneOf1ConcurrencyOneOf1 - - Attributes - ---------- - group : str, required - When a concurrent job or workflow is queued, if another job or workflow using the same concurrency group in the repository is in progress, the queued job or workflow will be pending. Any previously pending job or workflow in the concurrency group will be canceled. - "cancel-in-progress" : bool | str, optional - To cancel any currently running job or workflow in the same concurrency group, specify cancel-in-progress: true. - """ - - group: str - "cancel-in-progress"?: bool | str - -schema WorkflowJobsPatternProperties0OneOf1Permissions: - r""" - WorkflowJobsPatternProperties0OneOf1Permissions - - Attributes - ---------- - actions : "read" | "write" | "none", optional - checks : "read" | "write" | "none", optional - contents : "read" | "write" | "none", optional - deployments : "read" | "write" | "none", optional - discussions : "read" | "write" | "none", optional - "id-token" : "read" | "write" | "none", optional - issues : "read" | "write" | "none", optional - packages : "read" | "write" | "none", optional - pages : "read" | "write" | "none", optional - "pull-requests" : "read" | "write" | "none", optional - "repository-projects" : "read" | "write" | "none", optional - "security-events" : "read" | "write" | "none", optional - statuses : "read" | "write" | "none", optional - """ - - actions?: "read" | "write" | "none" - checks?: "read" | "write" | "none" - contents?: "read" | "write" | "none" - deployments?: "read" | "write" | "none" - discussions?: "read" | "write" | "none" - "id-token"?: "read" | "write" | "none" - issues?: "read" | "write" | "none" - packages?: "read" | "write" | "none" - pages?: "read" | "write" | "none" - "pull-requests"?: "read" | "write" | "none" - "repository-projects"?: "read" | "write" | "none" - "security-events"?: "read" | "write" | "none" - statuses?: "read" | "write" | "none" - schema WorkflowJobsPatternProperties0OneOf1SecretsOneOf0OneOf0: r""" WorkflowJobsPatternProperties0OneOf1SecretsOneOf0OneOf0 @@ -630,86 +619,86 @@ schema WorkflowOnOneOf2: Attributes ---------- - branch_protection_rule : WorkflowOnOneOf2BranchProtectionRuleOneOf0 | str | WorkflowOnOneOf2BranchProtectionRule, optional + branch_protection_rule : WorkflowOnOneOf2BranchProtectionRuleOneOf0 | EventObject, optional Runs your workflow anytime the branch_protection_rule event occurs. More than one activity type triggers this event. - check_run : WorkflowOnOneOf2CheckRunOneOf0 | str | WorkflowOnOneOf2CheckRun, optional + check_run : WorkflowOnOneOf2CheckRunOneOf0 | EventObject, optional Runs your workflow anytime the check_run event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/checks/runs. - check_suite : WorkflowOnOneOf2CheckSuiteOneOf0 | str | WorkflowOnOneOf2CheckSuite, optional + check_suite : WorkflowOnOneOf2CheckSuiteOneOf0 | EventObject, optional Runs your workflow anytime the check_suite event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/checks/suites/. - create : WorkflowOnOneOf2CreateOneOf0 | str, optional + create : WorkflowOnOneOf2CreateOneOf0, optional Runs your workflow anytime someone creates a branch or tag, which triggers the create event. For information about the REST API, see https://developer.github.com/v3/git/refs/#create-a-reference. - delete : WorkflowOnOneOf2DeleteOneOf0 | str, optional + delete : WorkflowOnOneOf2DeleteOneOf0, optional Runs your workflow anytime someone deletes a branch or tag, which triggers the delete event. For information about the REST API, see https://developer.github.com/v3/git/refs/#delete-a-reference. - deployment : WorkflowOnOneOf2DeploymentOneOf0 | str, optional + deployment : WorkflowOnOneOf2DeploymentOneOf0, optional Runs your workflow anytime someone creates a deployment, which triggers the deployment event. Deployments created with a commit SHA may not have a Git ref. For information about the REST API, see https://developer.github.com/v3/repos/deployments/. - deployment_status : WorkflowOnOneOf2DeploymentStatusOneOf0 | str, optional + deployment_status : WorkflowOnOneOf2DeploymentStatusOneOf0, optional Runs your workflow anytime a third party provides a deployment status, which triggers the deployment_status event. Deployments created with a commit SHA may not have a Git ref. For information about the REST API, see https://developer.github.com/v3/repos/deployments/#create-a-deployment-status. - discussion : WorkflowOnOneOf2DiscussionOneOf0 | str | WorkflowOnOneOf2Discussion, optional + discussion : WorkflowOnOneOf2DiscussionOneOf0 | EventObject, optional Runs your workflow anytime the discussion event occurs. More than one activity type triggers this event. For information about the GraphQL API, see https://docs.github.com/en/graphql/guides/using-the-graphql-api-for-discussions - discussion_comment : WorkflowOnOneOf2DiscussionCommentOneOf0 | str | WorkflowOnOneOf2DiscussionComment, optional + discussion_comment : WorkflowOnOneOf2DiscussionCommentOneOf0 | EventObject, optional Runs your workflow anytime the discussion_comment event occurs. More than one activity type triggers this event. For information about the GraphQL API, see https://docs.github.com/en/graphql/guides/using-the-graphql-api-for-discussions - fork : WorkflowOnOneOf2ForkOneOf0 | str, optional + fork : WorkflowOnOneOf2ForkOneOf0, optional Runs your workflow anytime when someone forks a repository, which triggers the fork event. For information about the REST API, see https://developer.github.com/v3/repos/forks/#create-a-fork. - gollum : WorkflowOnOneOf2GollumOneOf0 | str, optional + gollum : WorkflowOnOneOf2GollumOneOf0, optional Runs your workflow when someone creates or updates a Wiki page, which triggers the gollum event. - issue_comment : WorkflowOnOneOf2IssueCommentOneOf0 | str | WorkflowOnOneOf2IssueComment, optional + issue_comment : WorkflowOnOneOf2IssueCommentOneOf0 | EventObject, optional Runs your workflow anytime the issue_comment event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/issues/comments/. - issues : WorkflowOnOneOf2IssuesOneOf0 | str | WorkflowOnOneOf2Issues, optional + issues : WorkflowOnOneOf2IssuesOneOf0 | EventObject, optional Runs your workflow anytime the issues event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/issues. - label : WorkflowOnOneOf2LabelOneOf0 | str | WorkflowOnOneOf2Label, optional + label : WorkflowOnOneOf2LabelOneOf0 | EventObject, optional Runs your workflow anytime the label event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/issues/labels/. - member : WorkflowOnOneOf2MemberOneOf0 | str | WorkflowOnOneOf2Member, optional + member : WorkflowOnOneOf2MemberOneOf0 | EventObject, optional Runs your workflow anytime the member event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/repos/collaborators/. - milestone : WorkflowOnOneOf2MilestoneOneOf0 | str | WorkflowOnOneOf2Milestone, optional + milestone : WorkflowOnOneOf2MilestoneOneOf0 | EventObject, optional Runs your workflow anytime the milestone event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/issues/milestones/. - page_build : WorkflowOnOneOf2PageBuildOneOf0 | str, optional + page_build : WorkflowOnOneOf2PageBuildOneOf0, optional Runs your workflow anytime someone pushes to a GitHub Pages-enabled branch, which triggers the page_build event. For information about the REST API, see https://developer.github.com/v3/repos/pages/. - project : WorkflowOnOneOf2ProjectOneOf0 | str | WorkflowOnOneOf2Project, optional + project : WorkflowOnOneOf2ProjectOneOf0 | EventObject, optional Runs your workflow anytime the project event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/projects/. - project_card : WorkflowOnOneOf2ProjectCardOneOf0 | str | WorkflowOnOneOf2ProjectCard, optional + project_card : WorkflowOnOneOf2ProjectCardOneOf0 | EventObject, optional Runs your workflow anytime the project_card event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/projects/cards. - project_column : WorkflowOnOneOf2ProjectColumnOneOf0 | str | WorkflowOnOneOf2ProjectColumn, optional + project_column : WorkflowOnOneOf2ProjectColumnOneOf0 | EventObject, optional Runs your workflow anytime the project_column event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/projects/columns. - public : WorkflowOnOneOf2PublicOneOf0 | str, optional + public : WorkflowOnOneOf2PublicOneOf0, optional Runs your workflow anytime someone makes a private repository public, which triggers the public event. For information about the REST API, see https://developer.github.com/v3/repos/#edit. - pull_request : WorkflowOnOneOf2PullRequestOneOf0 | str | WorkflowOnOneOf2PullRequest, optional + pull_request : WorkflowOnOneOf2PullRequestOneOf0 | Ref, optional Runs your workflow anytime the pull_request event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/pulls. Note: Workflows do not run on private base repositories when you open a pull request from a forked repository. When you create a pull request from a forked repository to the base repository, GitHub sends the pull_request event to the base repository and no pull request events occur on the forked repository. Workflows don't run on forked repositories by default. You must enable GitHub Actions in the Actions tab of the forked repository. The permissions for the GITHUB_TOKEN in forked repositories is read-only. For more information about the GITHUB_TOKEN, see https://help.github.com/en/articles/virtual-environments-for-github-actions. - pull_request_review : WorkflowOnOneOf2PullRequestReviewOneOf0 | str | WorkflowOnOneOf2PullRequestReview, optional + pull_request_review : WorkflowOnOneOf2PullRequestReviewOneOf0 | EventObject, optional Runs your workflow anytime the pull_request_review event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/pulls/reviews. Note: Workflows do not run on private base repositories when you open a pull request from a forked repository. When you create a pull request from a forked repository to the base repository, GitHub sends the pull_request event to the base repository and no pull request events occur on the forked repository. Workflows don't run on forked repositories by default. You must enable GitHub Actions in the Actions tab of the forked repository. The permissions for the GITHUB_TOKEN in forked repositories is read-only. For more information about the GITHUB_TOKEN, see https://help.github.com/en/articles/virtual-environments-for-github-actions. - pull_request_review_comment : WorkflowOnOneOf2PullRequestReviewCommentOneOf0 | str | WorkflowOnOneOf2PullRequestReviewComment, optional + pull_request_review_comment : WorkflowOnOneOf2PullRequestReviewCommentOneOf0 | EventObject, optional Runs your workflow anytime a comment on a pull request's unified diff is modified, which triggers the pull_request_review_comment event. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/pulls/comments. Note: Workflows do not run on private base repositories when you open a pull request from a forked repository. When you create a pull request from a forked repository to the base repository, GitHub sends the pull_request event to the base repository and no pull request events occur on the forked repository. Workflows don't run on forked repositories by default. You must enable GitHub Actions in the Actions tab of the forked repository. The permissions for the GITHUB_TOKEN in forked repositories is read-only. For more information about the GITHUB_TOKEN, see https://help.github.com/en/articles/virtual-environments-for-github-actions. - pull_request_target : WorkflowOnOneOf2PullRequestTargetOneOf0 | str | WorkflowOnOneOf2PullRequestTarget, optional + pull_request_target : WorkflowOnOneOf2PullRequestTargetOneOf0 | Ref, optional This event is similar to pull_request, except that it runs in the context of the base repository of the pull request, rather than in the merge commit. This means that you can more safely make your secrets available to the workflows triggered by the pull request, because only workflows defined in the commit on the base repository are run. For example, this event allows you to create workflows that label and comment on pull requests, based on the contents of the event payload. - push : WorkflowOnOneOf2PushOneOf0 | str | WorkflowOnOneOf2Push, optional + push : WorkflowOnOneOf2PushOneOf0 | Ref, optional Runs your workflow when someone pushes to a repository branch, which triggers the push event. Note: The webhook payload available to GitHub Actions does not include the added, removed, and modified attributes in the commit object. You can retrieve the full commit object using the REST API. For more information, see https://developer.github.com/v3/repos/commits/#get-a-single-commit. - registry_package : WorkflowOnOneOf2RegistryPackageOneOf0 | str | WorkflowOnOneOf2RegistryPackage, optional + registry_package : WorkflowOnOneOf2RegistryPackageOneOf0 | EventObject, optional Runs your workflow anytime a package is published or updated. For more information, see https://help.github.com/en/github/managing-packages-with-github-packages. - release : WorkflowOnOneOf2ReleaseOneOf0 | str | WorkflowOnOneOf2Release, optional + release : WorkflowOnOneOf2ReleaseOneOf0 | EventObject, optional Runs your workflow anytime the release event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/repos/releases/ in the GitHub Developer documentation. - status : WorkflowOnOneOf2StatusOneOf0 | str, optional + status : WorkflowOnOneOf2StatusOneOf0, optional Runs your workflow anytime the status of a Git commit changes, which triggers the status event. For information about the REST API, see https://developer.github.com/v3/repos/statuses/. - watch : WorkflowOnOneOf2WatchOneOf0 | str, optional + watch : WorkflowOnOneOf2WatchOneOf0, optional Runs your workflow anytime the watch event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/activity/starring/. workflow_call : WorkflowOnOneOf2WorkflowCall, optional Allows workflows to be reused by other workflows. workflow_dispatch : WorkflowOnOneOf2WorkflowDispatch, optional You can now create workflows that are manually triggered with the new workflow_dispatch event. You will then see a 'Run workflow' button on the Actions tab, enabling you to easily trigger a run. - workflow_run : WorkflowOnOneOf2WorkflowRunOneOf0 | str | WorkflowOnOneOf2WorkflowRun, optional + workflow_run : WorkflowOnOneOf2WorkflowRunOneOf0 | EventObject, optional This event occurs when a workflow run is requested or completed, and allows you to execute a workflow based on the finished result of another workflow. For example, if your pull_request workflow generates build artifacts, you can create a new workflow that uses workflow_run to analyze the results and add a comment to the original pull request. - repository_dispatch : WorkflowOnOneOf2RepositoryDispatchOneOf0 | str, optional + repository_dispatch : WorkflowOnOneOf2RepositoryDispatchOneOf0, optional You can use the GitHub API to trigger a webhook event called repository_dispatch when you want to trigger a workflow for activity that happens outside of GitHub. For more information, see https://developer.github.com/v3/repos/#create-a-repository-dispatch-event. To trigger the custom repository_dispatch webhook event, you must send a POST request to a GitHub API endpoint and provide an event_type name to describe the activity type. To trigger a workflow run, you must also configure your workflow to use the repository_dispatch event. schedule : [WorkflowOnOneOf2ScheduleItems0], optional @@ -718,62 +707,45 @@ schema WorkflowOnOneOf2: You can use crontab guru (https://crontab.guru/). to help generate your cron syntax and confirm what time it will run. To help you get started, there is also a list of crontab guru examples (https://crontab.guru/examples.html). """ - branch_protection_rule?: WorkflowOnOneOf2BranchProtectionRuleOneOf0 | str | WorkflowOnOneOf2BranchProtectionRule - check_run?: WorkflowOnOneOf2CheckRunOneOf0 | str | WorkflowOnOneOf2CheckRun - check_suite?: WorkflowOnOneOf2CheckSuiteOneOf0 | str | WorkflowOnOneOf2CheckSuite - create?: WorkflowOnOneOf2CreateOneOf0 | str - delete?: WorkflowOnOneOf2DeleteOneOf0 | str - deployment?: WorkflowOnOneOf2DeploymentOneOf0 | str - deployment_status?: WorkflowOnOneOf2DeploymentStatusOneOf0 | str - discussion?: WorkflowOnOneOf2DiscussionOneOf0 | str | WorkflowOnOneOf2Discussion - discussion_comment?: WorkflowOnOneOf2DiscussionCommentOneOf0 | str | WorkflowOnOneOf2DiscussionComment - fork?: WorkflowOnOneOf2ForkOneOf0 | str - gollum?: WorkflowOnOneOf2GollumOneOf0 | str - issue_comment?: WorkflowOnOneOf2IssueCommentOneOf0 | str | WorkflowOnOneOf2IssueComment - issues?: WorkflowOnOneOf2IssuesOneOf0 | str | WorkflowOnOneOf2Issues - label?: WorkflowOnOneOf2LabelOneOf0 | str | WorkflowOnOneOf2Label - member?: WorkflowOnOneOf2MemberOneOf0 | str | WorkflowOnOneOf2Member - milestone?: WorkflowOnOneOf2MilestoneOneOf0 | str | WorkflowOnOneOf2Milestone - page_build?: WorkflowOnOneOf2PageBuildOneOf0 | str - project?: WorkflowOnOneOf2ProjectOneOf0 | str | WorkflowOnOneOf2Project - project_card?: WorkflowOnOneOf2ProjectCardOneOf0 | str | WorkflowOnOneOf2ProjectCard - project_column?: WorkflowOnOneOf2ProjectColumnOneOf0 | str | WorkflowOnOneOf2ProjectColumn - public?: WorkflowOnOneOf2PublicOneOf0 | str - pull_request?: WorkflowOnOneOf2PullRequestOneOf0 | str | WorkflowOnOneOf2PullRequest - pull_request_review?: WorkflowOnOneOf2PullRequestReviewOneOf0 | str | WorkflowOnOneOf2PullRequestReview - pull_request_review_comment?: WorkflowOnOneOf2PullRequestReviewCommentOneOf0 | str | WorkflowOnOneOf2PullRequestReviewComment - pull_request_target?: WorkflowOnOneOf2PullRequestTargetOneOf0 | str | WorkflowOnOneOf2PullRequestTarget - push?: WorkflowOnOneOf2PushOneOf0 | str | WorkflowOnOneOf2Push - registry_package?: WorkflowOnOneOf2RegistryPackageOneOf0 | str | WorkflowOnOneOf2RegistryPackage - release?: WorkflowOnOneOf2ReleaseOneOf0 | str | WorkflowOnOneOf2Release - status?: WorkflowOnOneOf2StatusOneOf0 | str - watch?: WorkflowOnOneOf2WatchOneOf0 | str + branch_protection_rule?: WorkflowOnOneOf2BranchProtectionRuleOneOf0 | EventObject + check_run?: WorkflowOnOneOf2CheckRunOneOf0 | EventObject + check_suite?: WorkflowOnOneOf2CheckSuiteOneOf0 | EventObject + create?: WorkflowOnOneOf2CreateOneOf0 + delete?: WorkflowOnOneOf2DeleteOneOf0 + deployment?: WorkflowOnOneOf2DeploymentOneOf0 + deployment_status?: WorkflowOnOneOf2DeploymentStatusOneOf0 + discussion?: WorkflowOnOneOf2DiscussionOneOf0 | EventObject + discussion_comment?: WorkflowOnOneOf2DiscussionCommentOneOf0 | EventObject + fork?: WorkflowOnOneOf2ForkOneOf0 + gollum?: WorkflowOnOneOf2GollumOneOf0 + issue_comment?: WorkflowOnOneOf2IssueCommentOneOf0 | EventObject + issues?: WorkflowOnOneOf2IssuesOneOf0 | EventObject + label?: WorkflowOnOneOf2LabelOneOf0 | EventObject + member?: WorkflowOnOneOf2MemberOneOf0 | EventObject + milestone?: WorkflowOnOneOf2MilestoneOneOf0 | EventObject + page_build?: WorkflowOnOneOf2PageBuildOneOf0 + project?: WorkflowOnOneOf2ProjectOneOf0 | EventObject + project_card?: WorkflowOnOneOf2ProjectCardOneOf0 | EventObject + project_column?: WorkflowOnOneOf2ProjectColumnOneOf0 | EventObject + public?: WorkflowOnOneOf2PublicOneOf0 + pull_request?: WorkflowOnOneOf2PullRequestOneOf0 | Ref + pull_request_review?: WorkflowOnOneOf2PullRequestReviewOneOf0 | EventObject + pull_request_review_comment?: WorkflowOnOneOf2PullRequestReviewCommentOneOf0 | EventObject + pull_request_target?: WorkflowOnOneOf2PullRequestTargetOneOf0 | Ref + push?: WorkflowOnOneOf2PushOneOf0 | Ref + registry_package?: WorkflowOnOneOf2RegistryPackageOneOf0 | EventObject + release?: WorkflowOnOneOf2ReleaseOneOf0 | EventObject + status?: WorkflowOnOneOf2StatusOneOf0 + watch?: WorkflowOnOneOf2WatchOneOf0 workflow_call?: WorkflowOnOneOf2WorkflowCall workflow_dispatch?: WorkflowOnOneOf2WorkflowDispatch - workflow_run?: WorkflowOnOneOf2WorkflowRunOneOf0 | str | WorkflowOnOneOf2WorkflowRun - repository_dispatch?: WorkflowOnOneOf2RepositoryDispatchOneOf0 | str + workflow_run?: WorkflowOnOneOf2WorkflowRunOneOf0 | EventObject + repository_dispatch?: WorkflowOnOneOf2RepositoryDispatchOneOf0 schedule?: [WorkflowOnOneOf2ScheduleItems0] check: len(schedule) >= 1 if schedule -schema WorkflowOnOneOf2BranchProtectionRule: - r""" - Runs your workflow anytime the branch_protection_rule event occurs. More than one activity type triggers this event. - - Attributes - ---------- - types : ["created" | "edited" | "deleted"], optional, default is ["created", "edited", "deleted"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - """ - - types?: ["created" | "edited" | "deleted"] = ["created", "edited", "deleted"] - [...str]: any - - check: - len(types) >= 1 if types - schema WorkflowOnOneOf2BranchProtectionRuleOneOf0: r""" WorkflowOnOneOf2BranchProtectionRuleOneOf0 @@ -781,23 +753,6 @@ schema WorkflowOnOneOf2BranchProtectionRuleOneOf0: [...str]: any -schema WorkflowOnOneOf2CheckRun: - r""" - Runs your workflow anytime the check_run event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/checks/runs. - - Attributes - ---------- - types : ["created" | "rerequested" | "completed" | "requested_action"], optional, default is ["created", "rerequested", "completed", "requested_action"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - """ - - types?: ["created" | "rerequested" | "completed" | "requested_action"] = ["created", "rerequested", "completed", "requested_action"] - [...str]: any - - check: - len(types) >= 1 if types - schema WorkflowOnOneOf2CheckRunOneOf0: r""" WorkflowOnOneOf2CheckRunOneOf0 @@ -805,23 +760,6 @@ schema WorkflowOnOneOf2CheckRunOneOf0: [...str]: any -schema WorkflowOnOneOf2CheckSuite: - r""" - Runs your workflow anytime the check_suite event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/checks/suites/. - - Attributes - ---------- - types : ["completed" | "requested" | "rerequested"], optional, default is ["completed", "requested", "rerequested"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - """ - - types?: ["completed" | "requested" | "rerequested"] = ["completed", "requested", "rerequested"] - [...str]: any - - check: - len(types) >= 1 if types - schema WorkflowOnOneOf2CheckSuiteOneOf0: r""" WorkflowOnOneOf2CheckSuiteOneOf0 @@ -857,40 +795,6 @@ schema WorkflowOnOneOf2DeploymentStatusOneOf0: [...str]: any -schema WorkflowOnOneOf2Discussion: - r""" - Runs your workflow anytime the discussion event occurs. More than one activity type triggers this event. For information about the GraphQL API, see https://docs.github.com/en/graphql/guides/using-the-graphql-api-for-discussions - - Attributes - ---------- - types : ["created" | "edited" | "deleted" | "transferred" | "pinned" | "unpinned" | "labeled" | "unlabeled" | "locked" | "unlocked" | "category_changed" | "answered" | "unanswered"], optional, default is ["created", "edited", "deleted", "transferred", "pinned", "unpinned", "labeled", "unlabeled", "locked", "unlocked", "category_changed", "answered", "unanswered"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - """ - - types?: ["created" | "edited" | "deleted" | "transferred" | "pinned" | "unpinned" | "labeled" | "unlabeled" | "locked" | "unlocked" | "category_changed" | "answered" | "unanswered"] = ["created", "edited", "deleted", "transferred", "pinned", "unpinned", "labeled", "unlabeled", "locked", "unlocked", "category_changed", "answered", "unanswered"] - [...str]: any - - check: - len(types) >= 1 if types - -schema WorkflowOnOneOf2DiscussionComment: - r""" - Runs your workflow anytime the discussion_comment event occurs. More than one activity type triggers this event. For information about the GraphQL API, see https://docs.github.com/en/graphql/guides/using-the-graphql-api-for-discussions - - Attributes - ---------- - types : ["created" | "edited" | "deleted"], optional, default is ["created", "edited", "deleted"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - """ - - types?: ["created" | "edited" | "deleted"] = ["created", "edited", "deleted"] - [...str]: any - - check: - len(types) >= 1 if types - schema WorkflowOnOneOf2DiscussionCommentOneOf0: r""" WorkflowOnOneOf2DiscussionCommentOneOf0 @@ -919,23 +823,6 @@ schema WorkflowOnOneOf2GollumOneOf0: [...str]: any -schema WorkflowOnOneOf2IssueComment: - r""" - Runs your workflow anytime the issue_comment event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/issues/comments/. - - Attributes - ---------- - types : ["created" | "edited" | "deleted"], optional, default is ["created", "edited", "deleted"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - """ - - types?: ["created" | "edited" | "deleted"] = ["created", "edited", "deleted"] - [...str]: any - - check: - len(types) >= 1 if types - schema WorkflowOnOneOf2IssueCommentOneOf0: r""" WorkflowOnOneOf2IssueCommentOneOf0 @@ -943,23 +830,6 @@ schema WorkflowOnOneOf2IssueCommentOneOf0: [...str]: any -schema WorkflowOnOneOf2Issues: - r""" - Runs your workflow anytime the issues event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/issues. - - Attributes - ---------- - types : ["opened" | "edited" | "deleted" | "transferred" | "pinned" | "unpinned" | "closed" | "reopened" | "assigned" | "unassigned" | "labeled" | "unlabeled" | "locked" | "unlocked" | "milestoned" | "demilestoned"], optional, default is ["opened", "edited", "deleted", "transferred", "pinned", "unpinned", "closed", "reopened", "assigned", "unassigned", "labeled", "unlabeled", "locked", "unlocked", "milestoned", "demilestoned"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - """ - - types?: ["opened" | "edited" | "deleted" | "transferred" | "pinned" | "unpinned" | "closed" | "reopened" | "assigned" | "unassigned" | "labeled" | "unlabeled" | "locked" | "unlocked" | "milestoned" | "demilestoned"] = ["opened", "edited", "deleted", "transferred", "pinned", "unpinned", "closed", "reopened", "assigned", "unassigned", "labeled", "unlabeled", "locked", "unlocked", "milestoned", "demilestoned"] - [...str]: any - - check: - len(types) >= 1 if types - schema WorkflowOnOneOf2IssuesOneOf0: r""" WorkflowOnOneOf2IssuesOneOf0 @@ -967,23 +837,6 @@ schema WorkflowOnOneOf2IssuesOneOf0: [...str]: any -schema WorkflowOnOneOf2Label: - r""" - Runs your workflow anytime the label event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/issues/labels/. - - Attributes - ---------- - types : ["created" | "edited" | "deleted"], optional, default is ["created", "edited", "deleted"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - """ - - types?: ["created" | "edited" | "deleted"] = ["created", "edited", "deleted"] - [...str]: any - - check: - len(types) >= 1 if types - schema WorkflowOnOneOf2LabelOneOf0: r""" WorkflowOnOneOf2LabelOneOf0 @@ -991,23 +844,6 @@ schema WorkflowOnOneOf2LabelOneOf0: [...str]: any -schema WorkflowOnOneOf2Member: - r""" - Runs your workflow anytime the member event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/repos/collaborators/. - - Attributes - ---------- - types : ["added" | "edited" | "deleted"], optional, default is ["added", "edited", "deleted"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - """ - - types?: ["added" | "edited" | "deleted"] = ["added", "edited", "deleted"] - [...str]: any - - check: - len(types) >= 1 if types - schema WorkflowOnOneOf2MemberOneOf0: r""" WorkflowOnOneOf2MemberOneOf0 @@ -1015,23 +851,6 @@ schema WorkflowOnOneOf2MemberOneOf0: [...str]: any -schema WorkflowOnOneOf2Milestone: - r""" - Runs your workflow anytime the milestone event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/issues/milestones/. - - Attributes - ---------- - types : ["created" | "closed" | "opened" | "edited" | "deleted"], optional, default is ["created", "closed", "opened", "edited", "deleted"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - """ - - types?: ["created" | "closed" | "opened" | "edited" | "deleted"] = ["created", "closed", "opened", "edited", "deleted"] - [...str]: any - - check: - len(types) >= 1 if types - schema WorkflowOnOneOf2MilestoneOneOf0: r""" WorkflowOnOneOf2MilestoneOneOf0 @@ -1046,40 +865,6 @@ schema WorkflowOnOneOf2PageBuildOneOf0: [...str]: any -schema WorkflowOnOneOf2Project: - r""" - Runs your workflow anytime the project event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/projects/. - - Attributes - ---------- - types : ["created" | "updated" | "closed" | "reopened" | "edited" | "deleted"], optional, default is ["created", "updated", "closed", "reopened", "edited", "deleted"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - """ - - types?: ["created" | "updated" | "closed" | "reopened" | "edited" | "deleted"] = ["created", "updated", "closed", "reopened", "edited", "deleted"] - [...str]: any - - check: - len(types) >= 1 if types - -schema WorkflowOnOneOf2ProjectCard: - r""" - Runs your workflow anytime the project_card event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/projects/cards. - - Attributes - ---------- - types : ["created" | "moved" | "converted" | "edited" | "deleted"], optional, default is ["created", "moved", "converted", "edited", "deleted"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - """ - - types?: ["created" | "moved" | "converted" | "edited" | "deleted"] = ["created", "moved", "converted", "edited", "deleted"] - [...str]: any - - check: - len(types) >= 1 if types - schema WorkflowOnOneOf2ProjectCardOneOf0: r""" WorkflowOnOneOf2ProjectCardOneOf0 @@ -1087,408 +872,69 @@ schema WorkflowOnOneOf2ProjectCardOneOf0: [...str]: any -schema WorkflowOnOneOf2ProjectColumn: - r""" - Runs your workflow anytime the project_column event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/projects/columns. - - Attributes - ---------- - types : ["created" | "updated" | "moved" | "deleted"], optional, default is ["created", "updated", "moved", "deleted"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - """ - - types?: ["created" | "updated" | "moved" | "deleted"] = ["created", "updated", "moved", "deleted"] - [...str]: any - - check: - len(types) >= 1 if types - schema WorkflowOnOneOf2ProjectColumnOneOf0: r""" - WorkflowOnOneOf2ProjectColumnOneOf0 - """ - - [...str]: any - -schema WorkflowOnOneOf2ProjectOneOf0: - r""" - WorkflowOnOneOf2ProjectOneOf0 - """ - - [...str]: any - -schema WorkflowOnOneOf2PublicOneOf0: - r""" - WorkflowOnOneOf2PublicOneOf0 - """ - - [...str]: any - -schema WorkflowOnOneOf2PullRequest: - r""" - Runs your workflow anytime the pull_request event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/pulls. - Note: Workflows do not run on private base repositories when you open a pull request from a forked repository. - When you create a pull request from a forked repository to the base repository, GitHub sends the pull_request event to the base repository and no pull request events occur on the forked repository. - Workflows don't run on forked repositories by default. You must enable GitHub Actions in the Actions tab of the forked repository. - The permissions for the GITHUB_TOKEN in forked repositories is read-only. For more information about the GITHUB_TOKEN, see https://help.github.com/en/articles/virtual-environments-for-github-actions. - - Attributes - ---------- - types : ["assigned" | "unassigned" | "labeled" | "unlabeled" | "opened" | "edited" | "closed" | "reopened" | "synchronize" | "converted_to_draft" | "ready_for_review" | "locked" | "unlocked" | "review_requested" | "review_request_removed" | "auto_merge_enabled" | "auto_merge_disabled"], optional, default is ["opened", "synchronize", "reopened"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - branches : [str], optional - When using the push and pull_request events, you can configure a workflow to run on specific branches or tags. If you only define only tags or only branches, the workflow won't run for events affecting the undefined Git ref. - The branches, branches-ignore, tags, and tags-ignore keywords accept glob patterns that use the * and ** wildcard characters to match more than one branch or tag name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - The patterns defined in branches and tags are evaluated against the Git ref's name. For example, defining the pattern mona/octocat in branches will match the refs/heads/mona/octocat Git ref. The pattern releases/** will match the refs/heads/releases/10 Git ref. - You can use two types of filters to prevent a workflow from running on pushes and pull requests to tags and branches: - - branches or branches-ignore - You cannot use both the branches and branches-ignore filters for the same event in a workflow. Use the branches filter when you need to filter branches for positive matches and exclude branches. Use the branches-ignore filter when you only need to exclude branch names. - - tags or tags-ignore - You cannot use both the tags and tags-ignore filters for the same event in a workflow. Use the tags filter when you need to filter tags for positive matches and exclude tags. Use the tags-ignore filter when you only need to exclude tag names. - You can exclude tags and branches using the ! character. The order that you define patterns matters. - - A matching negative pattern (prefixed with !) after a positive match will exclude the Git ref. - - A matching positive pattern after a negative match will include the Git ref again. - "branches-ignore" : [str], optional - When using the push and pull_request events, you can configure a workflow to run on specific branches or tags. If you only define only tags or only branches, the workflow won't run for events affecting the undefined Git ref. - The branches, branches-ignore, tags, and tags-ignore keywords accept glob patterns that use the * and ** wildcard characters to match more than one branch or tag name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - The patterns defined in branches and tags are evaluated against the Git ref's name. For example, defining the pattern mona/octocat in branches will match the refs/heads/mona/octocat Git ref. The pattern releases/** will match the refs/heads/releases/10 Git ref. - You can use two types of filters to prevent a workflow from running on pushes and pull requests to tags and branches: - - branches or branches-ignore - You cannot use both the branches and branches-ignore filters for the same event in a workflow. Use the branches filter when you need to filter branches for positive matches and exclude branches. Use the branches-ignore filter when you only need to exclude branch names. - - tags or tags-ignore - You cannot use both the tags and tags-ignore filters for the same event in a workflow. Use the tags filter when you need to filter tags for positive matches and exclude tags. Use the tags-ignore filter when you only need to exclude tag names. - You can exclude tags and branches using the ! character. The order that you define patterns matters. - - A matching negative pattern (prefixed with !) after a positive match will exclude the Git ref. - - A matching positive pattern after a negative match will include the Git ref again. - tags : [str], optional - When using the push and pull_request events, you can configure a workflow to run on specific branches or tags. If you only define only tags or only branches, the workflow won't run for events affecting the undefined Git ref. - The branches, branches-ignore, tags, and tags-ignore keywords accept glob patterns that use the * and ** wildcard characters to match more than one branch or tag name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - The patterns defined in branches and tags are evaluated against the Git ref's name. For example, defining the pattern mona/octocat in branches will match the refs/heads/mona/octocat Git ref. The pattern releases/** will match the refs/heads/releases/10 Git ref. - You can use two types of filters to prevent a workflow from running on pushes and pull requests to tags and branches: - - branches or branches-ignore - You cannot use both the branches and branches-ignore filters for the same event in a workflow. Use the branches filter when you need to filter branches for positive matches and exclude branches. Use the branches-ignore filter when you only need to exclude branch names. - - tags or tags-ignore - You cannot use both the tags and tags-ignore filters for the same event in a workflow. Use the tags filter when you need to filter tags for positive matches and exclude tags. Use the tags-ignore filter when you only need to exclude tag names. - You can exclude tags and branches using the ! character. The order that you define patterns matters. - - A matching negative pattern (prefixed with !) after a positive match will exclude the Git ref. - - A matching positive pattern after a negative match will include the Git ref again. - "tags-ignore" : [str], optional - When using the push and pull_request events, you can configure a workflow to run on specific branches or tags. If you only define only tags or only branches, the workflow won't run for events affecting the undefined Git ref. - The branches, branches-ignore, tags, and tags-ignore keywords accept glob patterns that use the * and ** wildcard characters to match more than one branch or tag name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - The patterns defined in branches and tags are evaluated against the Git ref's name. For example, defining the pattern mona/octocat in branches will match the refs/heads/mona/octocat Git ref. The pattern releases/** will match the refs/heads/releases/10 Git ref. - You can use two types of filters to prevent a workflow from running on pushes and pull requests to tags and branches: - - branches or branches-ignore - You cannot use both the branches and branches-ignore filters for the same event in a workflow. Use the branches filter when you need to filter branches for positive matches and exclude branches. Use the branches-ignore filter when you only need to exclude branch names. - - tags or tags-ignore - You cannot use both the tags and tags-ignore filters for the same event in a workflow. Use the tags filter when you need to filter tags for positive matches and exclude tags. Use the tags-ignore filter when you only need to exclude tag names. - You can exclude tags and branches using the ! character. The order that you define patterns matters. - - A matching negative pattern (prefixed with !) after a positive match will exclude the Git ref. - - A matching positive pattern after a negative match will include the Git ref again. - paths : [str], optional - When using the push and pull_request events, you can configure a workflow to run when at least one file does not match paths-ignore or at least one modified file matches the configured paths. Path filters are not evaluated for pushes to tags. - The paths-ignore and paths keywords accept glob patterns that use the * and ** wildcard characters to match more than one path name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - You can exclude paths using two types of filters. You cannot use both of these filters for the same event in a workflow. - - paths-ignore - Use the paths-ignore filter when you only need to exclude path names. - - paths - Use the paths filter when you need to filter paths for positive matches and exclude paths. - "paths-ignore" : [str], optional - When using the push and pull_request events, you can configure a workflow to run when at least one file does not match paths-ignore or at least one modified file matches the configured paths. Path filters are not evaluated for pushes to tags. - The paths-ignore and paths keywords accept glob patterns that use the * and ** wildcard characters to match more than one path name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - You can exclude paths using two types of filters. You cannot use both of these filters for the same event in a workflow. - - paths-ignore - Use the paths-ignore filter when you only need to exclude path names. - - paths - Use the paths filter when you need to filter paths for positive matches and exclude paths. - """ - - types?: ["assigned" | "unassigned" | "labeled" | "unlabeled" | "opened" | "edited" | "closed" | "reopened" | "synchronize" | "converted_to_draft" | "ready_for_review" | "locked" | "unlocked" | "review_requested" | "review_request_removed" | "auto_merge_enabled" | "auto_merge_disabled"] = ["opened", "synchronize", "reopened"] - branches?: [str] - "branches-ignore"?: [str] - tags?: [str] - "tags-ignore"?: [str] - paths?: [str] - "paths-ignore"?: [str] - [key: str]: any - - check: - len(types) >= 1 if types - len(branches) >= 1 if branches - len("branches-ignore") >= 1 if "branches-ignore" - len(tags) >= 1 if tags - len("tags-ignore") >= 1 if "tags-ignore" - len(paths) >= 1 if paths - len("paths-ignore") >= 1 if "paths-ignore" - regex.match(key, r"^(branche|tag|path)s(-ignore)?$") - -schema WorkflowOnOneOf2PullRequestOneOf0: - r""" - WorkflowOnOneOf2PullRequestOneOf0 - """ - - [...str]: any - -schema WorkflowOnOneOf2PullRequestReview: - r""" - Runs your workflow anytime the pull_request_review event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/pulls/reviews. - Note: Workflows do not run on private base repositories when you open a pull request from a forked repository. - When you create a pull request from a forked repository to the base repository, GitHub sends the pull_request event to the base repository and no pull request events occur on the forked repository. - Workflows don't run on forked repositories by default. You must enable GitHub Actions in the Actions tab of the forked repository. - The permissions for the GITHUB_TOKEN in forked repositories is read-only. For more information about the GITHUB_TOKEN, see https://help.github.com/en/articles/virtual-environments-for-github-actions. - - Attributes - ---------- - types : ["submitted" | "edited" | "dismissed"], optional, default is ["submitted", "edited", "dismissed"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - """ - - types?: ["submitted" | "edited" | "dismissed"] = ["submitted", "edited", "dismissed"] - [...str]: any - - check: - len(types) >= 1 if types - -schema WorkflowOnOneOf2PullRequestReviewComment: - r""" - Runs your workflow anytime a comment on a pull request's unified diff is modified, which triggers the pull_request_review_comment event. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/pulls/comments. - Note: Workflows do not run on private base repositories when you open a pull request from a forked repository. - When you create a pull request from a forked repository to the base repository, GitHub sends the pull_request event to the base repository and no pull request events occur on the forked repository. - Workflows don't run on forked repositories by default. You must enable GitHub Actions in the Actions tab of the forked repository. - The permissions for the GITHUB_TOKEN in forked repositories is read-only. For more information about the GITHUB_TOKEN, see https://help.github.com/en/articles/virtual-environments-for-github-actions. - - Attributes - ---------- - types : ["created" | "edited" | "deleted"], optional, default is ["created", "edited", "deleted"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - """ - - types?: ["created" | "edited" | "deleted"] = ["created", "edited", "deleted"] - [...str]: any - - check: - len(types) >= 1 if types - -schema WorkflowOnOneOf2PullRequestReviewCommentOneOf0: - r""" - WorkflowOnOneOf2PullRequestReviewCommentOneOf0 + WorkflowOnOneOf2ProjectColumnOneOf0 """ [...str]: any -schema WorkflowOnOneOf2PullRequestReviewOneOf0: +schema WorkflowOnOneOf2ProjectOneOf0: r""" - WorkflowOnOneOf2PullRequestReviewOneOf0 + WorkflowOnOneOf2ProjectOneOf0 """ [...str]: any -schema WorkflowOnOneOf2PullRequestTarget: +schema WorkflowOnOneOf2PublicOneOf0: r""" - This event is similar to pull_request, except that it runs in the context of the base repository of the pull request, rather than in the merge commit. This means that you can more safely make your secrets available to the workflows triggered by the pull request, because only workflows defined in the commit on the base repository are run. For example, this event allows you to create workflows that label and comment on pull requests, based on the contents of the event payload. - - Attributes - ---------- - types : ["assigned" | "unassigned" | "labeled" | "unlabeled" | "opened" | "edited" | "closed" | "reopened" | "synchronize" | "converted_to_draft" | "ready_for_review" | "locked" | "unlocked" | "review_requested" | "review_request_removed" | "auto_merge_enabled" | "auto_merge_disabled"], optional, default is ["opened", "synchronize", "reopened"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - branches : [str | str], optional - When using the push and pull_request events, you can configure a workflow to run on specific branches or tags. If you only define only tags or only branches, the workflow won't run for events affecting the undefined Git ref. - The branches, branches-ignore, tags, and tags-ignore keywords accept glob patterns that use the * and ** wildcard characters to match more than one branch or tag name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - The patterns defined in branches and tags are evaluated against the Git ref's name. For example, defining the pattern mona/octocat in branches will match the refs/heads/mona/octocat Git ref. The pattern releases/** will match the refs/heads/releases/10 Git ref. - You can use two types of filters to prevent a workflow from running on pushes and pull requests to tags and branches: - - branches or branches-ignore - You cannot use both the branches and branches-ignore filters for the same event in a workflow. Use the branches filter when you need to filter branches for positive matches and exclude branches. Use the branches-ignore filter when you only need to exclude branch names. - - tags or tags-ignore - You cannot use both the tags and tags-ignore filters for the same event in a workflow. Use the tags filter when you need to filter tags for positive matches and exclude tags. Use the tags-ignore filter when you only need to exclude tag names. - You can exclude tags and branches using the ! character. The order that you define patterns matters. - - A matching negative pattern (prefixed with !) after a positive match will exclude the Git ref. - - A matching positive pattern after a negative match will include the Git ref again. - "branches-ignore" : [str | str], optional - When using the push and pull_request events, you can configure a workflow to run on specific branches or tags. If you only define only tags or only branches, the workflow won't run for events affecting the undefined Git ref. - The branches, branches-ignore, tags, and tags-ignore keywords accept glob patterns that use the * and ** wildcard characters to match more than one branch or tag name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - The patterns defined in branches and tags are evaluated against the Git ref's name. For example, defining the pattern mona/octocat in branches will match the refs/heads/mona/octocat Git ref. The pattern releases/** will match the refs/heads/releases/10 Git ref. - You can use two types of filters to prevent a workflow from running on pushes and pull requests to tags and branches: - - branches or branches-ignore - You cannot use both the branches and branches-ignore filters for the same event in a workflow. Use the branches filter when you need to filter branches for positive matches and exclude branches. Use the branches-ignore filter when you only need to exclude branch names. - - tags or tags-ignore - You cannot use both the tags and tags-ignore filters for the same event in a workflow. Use the tags filter when you need to filter tags for positive matches and exclude tags. Use the tags-ignore filter when you only need to exclude tag names. - You can exclude tags and branches using the ! character. The order that you define patterns matters. - - A matching negative pattern (prefixed with !) after a positive match will exclude the Git ref. - - A matching positive pattern after a negative match will include the Git ref again. - tags : [str | str], optional - When using the push and pull_request events, you can configure a workflow to run on specific branches or tags. If you only define only tags or only branches, the workflow won't run for events affecting the undefined Git ref. - The branches, branches-ignore, tags, and tags-ignore keywords accept glob patterns that use the * and ** wildcard characters to match more than one branch or tag name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - The patterns defined in branches and tags are evaluated against the Git ref's name. For example, defining the pattern mona/octocat in branches will match the refs/heads/mona/octocat Git ref. The pattern releases/** will match the refs/heads/releases/10 Git ref. - You can use two types of filters to prevent a workflow from running on pushes and pull requests to tags and branches: - - branches or branches-ignore - You cannot use both the branches and branches-ignore filters for the same event in a workflow. Use the branches filter when you need to filter branches for positive matches and exclude branches. Use the branches-ignore filter when you only need to exclude branch names. - - tags or tags-ignore - You cannot use both the tags and tags-ignore filters for the same event in a workflow. Use the tags filter when you need to filter tags for positive matches and exclude tags. Use the tags-ignore filter when you only need to exclude tag names. - You can exclude tags and branches using the ! character. The order that you define patterns matters. - - A matching negative pattern (prefixed with !) after a positive match will exclude the Git ref. - - A matching positive pattern after a negative match will include the Git ref again. - "tags-ignore" : [str | str], optional - When using the push and pull_request events, you can configure a workflow to run on specific branches or tags. If you only define only tags or only branches, the workflow won't run for events affecting the undefined Git ref. - The branches, branches-ignore, tags, and tags-ignore keywords accept glob patterns that use the * and ** wildcard characters to match more than one branch or tag name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - The patterns defined in branches and tags are evaluated against the Git ref's name. For example, defining the pattern mona/octocat in branches will match the refs/heads/mona/octocat Git ref. The pattern releases/** will match the refs/heads/releases/10 Git ref. - You can use two types of filters to prevent a workflow from running on pushes and pull requests to tags and branches: - - branches or branches-ignore - You cannot use both the branches and branches-ignore filters for the same event in a workflow. Use the branches filter when you need to filter branches for positive matches and exclude branches. Use the branches-ignore filter when you only need to exclude branch names. - - tags or tags-ignore - You cannot use both the tags and tags-ignore filters for the same event in a workflow. Use the tags filter when you need to filter tags for positive matches and exclude tags. Use the tags-ignore filter when you only need to exclude tag names. - You can exclude tags and branches using the ! character. The order that you define patterns matters. - - A matching negative pattern (prefixed with !) after a positive match will exclude the Git ref. - - A matching positive pattern after a negative match will include the Git ref again. - paths : [str | str], optional - When using the push and pull_request events, you can configure a workflow to run when at least one file does not match paths-ignore or at least one modified file matches the configured paths. Path filters are not evaluated for pushes to tags. - The paths-ignore and paths keywords accept glob patterns that use the * and ** wildcard characters to match more than one path name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - You can exclude paths using two types of filters. You cannot use both of these filters for the same event in a workflow. - - paths-ignore - Use the paths-ignore filter when you only need to exclude path names. - - paths - Use the paths filter when you need to filter paths for positive matches and exclude paths. - "paths-ignore" : [str | str], optional - When using the push and pull_request events, you can configure a workflow to run when at least one file does not match paths-ignore or at least one modified file matches the configured paths. Path filters are not evaluated for pushes to tags. - The paths-ignore and paths keywords accept glob patterns that use the * and ** wildcard characters to match more than one path name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - You can exclude paths using two types of filters. You cannot use both of these filters for the same event in a workflow. - - paths-ignore - Use the paths-ignore filter when you only need to exclude path names. - - paths - Use the paths filter when you need to filter paths for positive matches and exclude paths. + WorkflowOnOneOf2PublicOneOf0 """ - types?: ["assigned" | "unassigned" | "labeled" | "unlabeled" | "opened" | "edited" | "closed" | "reopened" | "synchronize" | "converted_to_draft" | "ready_for_review" | "locked" | "unlocked" | "review_requested" | "review_request_removed" | "auto_merge_enabled" | "auto_merge_disabled"] = ["opened", "synchronize", "reopened"] - branches?: [str | str] - "branches-ignore"?: [str | str] - tags?: [str | str] - "tags-ignore"?: [str | str] - paths?: [str | str] - "paths-ignore"?: [str | str] - [key: str]: any - - check: - len(types) >= 1 if types - len(branches) >= 1 if branches - len("branches-ignore") >= 1 if "branches-ignore" - len(tags) >= 1 if tags - len("tags-ignore") >= 1 if "tags-ignore" - len(paths) >= 1 if paths - len("paths-ignore") >= 1 if "paths-ignore" - regex.match(key, r"^(branche|tag|path)s(-ignore)?$") + [...str]: any -schema WorkflowOnOneOf2PullRequestTargetOneOf0: +schema WorkflowOnOneOf2PullRequestOneOf0: r""" - WorkflowOnOneOf2PullRequestTargetOneOf0 + WorkflowOnOneOf2PullRequestOneOf0 """ [...str]: any -schema WorkflowOnOneOf2Push: +schema WorkflowOnOneOf2PullRequestReviewCommentOneOf0: r""" - Runs your workflow when someone pushes to a repository branch, which triggers the push event. - Note: The webhook payload available to GitHub Actions does not include the added, removed, and modified attributes in the commit object. You can retrieve the full commit object using the REST API. For more information, see https://developer.github.com/v3/repos/commits/#get-a-single-commit. - - Attributes - ---------- - branches : [str | str | str], optional - When using the push and pull_request events, you can configure a workflow to run on specific branches or tags. If you only define only tags or only branches, the workflow won't run for events affecting the undefined Git ref. - The branches, branches-ignore, tags, and tags-ignore keywords accept glob patterns that use the * and ** wildcard characters to match more than one branch or tag name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - The patterns defined in branches and tags are evaluated against the Git ref's name. For example, defining the pattern mona/octocat in branches will match the refs/heads/mona/octocat Git ref. The pattern releases/** will match the refs/heads/releases/10 Git ref. - You can use two types of filters to prevent a workflow from running on pushes and pull requests to tags and branches: - - branches or branches-ignore - You cannot use both the branches and branches-ignore filters for the same event in a workflow. Use the branches filter when you need to filter branches for positive matches and exclude branches. Use the branches-ignore filter when you only need to exclude branch names. - - tags or tags-ignore - You cannot use both the tags and tags-ignore filters for the same event in a workflow. Use the tags filter when you need to filter tags for positive matches and exclude tags. Use the tags-ignore filter when you only need to exclude tag names. - You can exclude tags and branches using the ! character. The order that you define patterns matters. - - A matching negative pattern (prefixed with !) after a positive match will exclude the Git ref. - - A matching positive pattern after a negative match will include the Git ref again. - "branches-ignore" : [str | str | str], optional - When using the push and pull_request events, you can configure a workflow to run on specific branches or tags. If you only define only tags or only branches, the workflow won't run for events affecting the undefined Git ref. - The branches, branches-ignore, tags, and tags-ignore keywords accept glob patterns that use the * and ** wildcard characters to match more than one branch or tag name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - The patterns defined in branches and tags are evaluated against the Git ref's name. For example, defining the pattern mona/octocat in branches will match the refs/heads/mona/octocat Git ref. The pattern releases/** will match the refs/heads/releases/10 Git ref. - You can use two types of filters to prevent a workflow from running on pushes and pull requests to tags and branches: - - branches or branches-ignore - You cannot use both the branches and branches-ignore filters for the same event in a workflow. Use the branches filter when you need to filter branches for positive matches and exclude branches. Use the branches-ignore filter when you only need to exclude branch names. - - tags or tags-ignore - You cannot use both the tags and tags-ignore filters for the same event in a workflow. Use the tags filter when you need to filter tags for positive matches and exclude tags. Use the tags-ignore filter when you only need to exclude tag names. - You can exclude tags and branches using the ! character. The order that you define patterns matters. - - A matching negative pattern (prefixed with !) after a positive match will exclude the Git ref. - - A matching positive pattern after a negative match will include the Git ref again. - tags : [str | str | str], optional - When using the push and pull_request events, you can configure a workflow to run on specific branches or tags. If you only define only tags or only branches, the workflow won't run for events affecting the undefined Git ref. - The branches, branches-ignore, tags, and tags-ignore keywords accept glob patterns that use the * and ** wildcard characters to match more than one branch or tag name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - The patterns defined in branches and tags are evaluated against the Git ref's name. For example, defining the pattern mona/octocat in branches will match the refs/heads/mona/octocat Git ref. The pattern releases/** will match the refs/heads/releases/10 Git ref. - You can use two types of filters to prevent a workflow from running on pushes and pull requests to tags and branches: - - branches or branches-ignore - You cannot use both the branches and branches-ignore filters for the same event in a workflow. Use the branches filter when you need to filter branches for positive matches and exclude branches. Use the branches-ignore filter when you only need to exclude branch names. - - tags or tags-ignore - You cannot use both the tags and tags-ignore filters for the same event in a workflow. Use the tags filter when you need to filter tags for positive matches and exclude tags. Use the tags-ignore filter when you only need to exclude tag names. - You can exclude tags and branches using the ! character. The order that you define patterns matters. - - A matching negative pattern (prefixed with !) after a positive match will exclude the Git ref. - - A matching positive pattern after a negative match will include the Git ref again. - "tags-ignore" : [str | str | str], optional - When using the push and pull_request events, you can configure a workflow to run on specific branches or tags. If you only define only tags or only branches, the workflow won't run for events affecting the undefined Git ref. - The branches, branches-ignore, tags, and tags-ignore keywords accept glob patterns that use the * and ** wildcard characters to match more than one branch or tag name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - The patterns defined in branches and tags are evaluated against the Git ref's name. For example, defining the pattern mona/octocat in branches will match the refs/heads/mona/octocat Git ref. The pattern releases/** will match the refs/heads/releases/10 Git ref. - You can use two types of filters to prevent a workflow from running on pushes and pull requests to tags and branches: - - branches or branches-ignore - You cannot use both the branches and branches-ignore filters for the same event in a workflow. Use the branches filter when you need to filter branches for positive matches and exclude branches. Use the branches-ignore filter when you only need to exclude branch names. - - tags or tags-ignore - You cannot use both the tags and tags-ignore filters for the same event in a workflow. Use the tags filter when you need to filter tags for positive matches and exclude tags. Use the tags-ignore filter when you only need to exclude tag names. - You can exclude tags and branches using the ! character. The order that you define patterns matters. - - A matching negative pattern (prefixed with !) after a positive match will exclude the Git ref. - - A matching positive pattern after a negative match will include the Git ref again. - paths : [str | str | str], optional - When using the push and pull_request events, you can configure a workflow to run when at least one file does not match paths-ignore or at least one modified file matches the configured paths. Path filters are not evaluated for pushes to tags. - The paths-ignore and paths keywords accept glob patterns that use the * and ** wildcard characters to match more than one path name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - You can exclude paths using two types of filters. You cannot use both of these filters for the same event in a workflow. - - paths-ignore - Use the paths-ignore filter when you only need to exclude path names. - - paths - Use the paths filter when you need to filter paths for positive matches and exclude paths. - "paths-ignore" : [str | str | str], optional - When using the push and pull_request events, you can configure a workflow to run when at least one file does not match paths-ignore or at least one modified file matches the configured paths. Path filters are not evaluated for pushes to tags. - The paths-ignore and paths keywords accept glob patterns that use the * and ** wildcard characters to match more than one path name. For more information, see https://help.github.com/en/github/automating-your-workflow-with-github-actions/workflow-syntax-for-github-actions#filter-pattern-cheat-sheet. - You can exclude paths using two types of filters. You cannot use both of these filters for the same event in a workflow. - - paths-ignore - Use the paths-ignore filter when you only need to exclude path names. - - paths - Use the paths filter when you need to filter paths for positive matches and exclude paths. + WorkflowOnOneOf2PullRequestReviewCommentOneOf0 """ - branches?: [str | str | str] - "branches-ignore"?: [str | str | str] - tags?: [str | str | str] - "tags-ignore"?: [str | str | str] - paths?: [str | str | str] - "paths-ignore"?: [str | str | str] - [key: str]: [str] - - check: - len(branches) >= 1 if branches - len("branches-ignore") >= 1 if "branches-ignore" - len(tags) >= 1 if tags - len("tags-ignore") >= 1 if "tags-ignore" - len(paths) >= 1 if paths - len("paths-ignore") >= 1 if "paths-ignore" - regex.match(key, r"^(branche|tag|path)s(-ignore)?$") + [...str]: any -schema WorkflowOnOneOf2PushOneOf0: +schema WorkflowOnOneOf2PullRequestReviewOneOf0: r""" - WorkflowOnOneOf2PushOneOf0 + WorkflowOnOneOf2PullRequestReviewOneOf0 """ [...str]: any -schema WorkflowOnOneOf2RegistryPackage: +schema WorkflowOnOneOf2PullRequestTargetOneOf0: r""" - Runs your workflow anytime a package is published or updated. For more information, see https://help.github.com/en/github/managing-packages-with-github-packages. - - Attributes - ---------- - types : ["published" | "updated"], optional, default is ["published", "updated"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. + WorkflowOnOneOf2PullRequestTargetOneOf0 """ - types?: ["published" | "updated"] = ["published", "updated"] [...str]: any - check: - len(types) >= 1 if types - -schema WorkflowOnOneOf2RegistryPackageOneOf0: +schema WorkflowOnOneOf2PushOneOf0: r""" - WorkflowOnOneOf2RegistryPackageOneOf0 + WorkflowOnOneOf2PushOneOf0 """ [...str]: any -schema WorkflowOnOneOf2Release: +schema WorkflowOnOneOf2RegistryPackageOneOf0: r""" - Runs your workflow anytime the release event occurs. More than one activity type triggers this event. For information about the REST API, see https://developer.github.com/v3/repos/releases/ in the GitHub Developer documentation. - - Attributes - ---------- - types : ["published" | "unpublished" | "created" | "edited" | "deleted" | "prereleased" | "released"], optional, default is ["published", "unpublished", "created", "edited", "deleted", "prereleased", "released"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. + WorkflowOnOneOf2RegistryPackageOneOf0 """ - types?: ["published" | "unpublished" | "created" | "edited" | "deleted" | "prereleased" | "released"] = ["published", "unpublished", "created", "edited", "deleted", "prereleased", "released"] [...str]: any - check: - len(types) >= 1 if types - schema WorkflowOnOneOf2ReleaseOneOf0: r""" WorkflowOnOneOf2ReleaseOneOf0 @@ -1657,26 +1103,6 @@ schema WorkflowOnOneOf2WorkflowDispatchInputsPatternProperties0: check: len(options) >= 1 if options -schema WorkflowOnOneOf2WorkflowRun: - r""" - This event occurs when a workflow run is requested or completed, and allows you to execute a workflow based on the finished result of another workflow. For example, if your pull_request workflow generates build artifacts, you can create a new workflow that uses workflow_run to analyze the results and add a comment to the original pull request. - - Attributes - ---------- - types : ["requested" | "completed"], optional, default is ["requested", "completed"] - Selects the types of activity that will trigger a workflow run. Most GitHub events are triggered by more than one type of activity. For example, the event for the release resource is triggered when a release is published, unpublished, created, edited, deleted, or prereleased. The types keyword enables you to narrow down activity that causes the workflow to run. When only one activity type triggers a webhook event, the types keyword is unnecessary. - You can use an array of event types. For more information about each event and their activity types, see https://help.github.com/en/articles/events-that-trigger-workflows#webhook-events. - workflows : [str], optional - """ - - types?: ["requested" | "completed"] = ["requested", "completed"] - workflows?: [str] - [...str]: any - - check: - len(types) >= 1 if types - len(workflows) >= 1 if workflows - schema WorkflowOnOneOf2WorkflowRunOneOf0: r""" WorkflowOnOneOf2WorkflowRunOneOf0 @@ -1684,64 +1110,3 @@ schema WorkflowOnOneOf2WorkflowRunOneOf0: [...str]: any -schema WorkflowPermissionsOneOf1: - r""" - WorkflowPermissionsOneOf1 - - Attributes - ---------- - actions : "read" | "write" | "none", optional - checks : "read" | "write" | "none", optional - contents : "read" | "write" | "none", optional - deployments : "read" | "write" | "none", optional - discussions : "read" | "write" | "none", optional - "id-token" : "read" | "write" | "none", optional - issues : "read" | "write" | "none", optional - packages : "read" | "write" | "none", optional - pages : "read" | "write" | "none", optional - "pull-requests" : "read" | "write" | "none", optional - "repository-projects" : "read" | "write" | "none", optional - "security-events" : "read" | "write" | "none", optional - statuses : "read" | "write" | "none", optional - actions : "read" | "write" | "none", optional - checks : "read" | "write" | "none", optional - contents : "read" | "write" | "none", optional - deployments : "read" | "write" | "none", optional - discussions : "read" | "write" | "none", optional - "id-token" : "read" | "write" | "none", optional - issues : "read" | "write" | "none", optional - packages : "read" | "write" | "none", optional - pages : "read" | "write" | "none", optional - "pull-requests" : "read" | "write" | "none", optional - "repository-projects" : "read" | "write" | "none", optional - "security-events" : "read" | "write" | "none", optional - statuses : "read" | "write" | "none", optional - """ - - actions?: "read" | "write" | "none" - checks?: "read" | "write" | "none" - contents?: "read" | "write" | "none" - deployments?: "read" | "write" | "none" - discussions?: "read" | "write" | "none" - "id-token"?: "read" | "write" | "none" - issues?: "read" | "write" | "none" - packages?: "read" | "write" | "none" - pages?: "read" | "write" | "none" - "pull-requests"?: "read" | "write" | "none" - "repository-projects"?: "read" | "write" | "none" - "security-events"?: "read" | "write" | "none" - statuses?: "read" | "write" | "none" - actions?: "read" | "write" | "none" - checks?: "read" | "write" | "none" - contents?: "read" | "write" | "none" - deployments?: "read" | "write" | "none" - discussions?: "read" | "write" | "none" - "id-token"?: "read" | "write" | "none" - issues?: "read" | "write" | "none" - packages?: "read" | "write" | "none" - pages?: "read" | "write" | "none" - "pull-requests"?: "read" | "write" | "none" - "repository-projects"?: "read" | "write" | "none" - "security-events"?: "read" | "write" | "none" - statuses?: "read" | "write" | "none" - diff --git a/pkg/tools/gen/testdata/jsonschema/ref/expect.k b/pkg/tools/gen/testdata/jsonschema/ref/expect.k index e0adab5d..206d9870 100644 --- a/pkg/tools/gen/testdata/jsonschema/ref/expect.k +++ b/pkg/tools/gen/testdata/jsonschema/ref/expect.k @@ -10,28 +10,28 @@ schema Customer: Attributes ---------- name : str, optional - address : CustomerAddress, optional + address : Address, optional """ name?: str - address?: CustomerAddress + address?: Address -schema CustomerAddress: +schema Address: r""" - CustomerAddress + Address Attributes ---------- city : str, optional - state : CustomerAddressState, optional + state : State, optional """ city?: str - state?: CustomerAddressState + state?: State -schema CustomerAddressState: +schema State: r""" - CustomerAddressState + State Attributes ---------- diff --git a/pkg/tools/gen/types.go b/pkg/tools/gen/types.go index dc11a721..dd98faab 100644 --- a/pkg/tools/gen/types.go +++ b/pkg/tools/gen/types.go @@ -31,7 +31,6 @@ func getKclTypeName(typ *pb.KclType) string { if isLit, _, litValue := IsLitType(typ); isLit { return litValue } - switch typ.Type { case typSchema: return typ.SchemaName @@ -47,7 +46,6 @@ func getKclTypeName(typ *pb.KclType) string { return "float" case typBool: return "bool" - case typAny: return "any" case typUnion: @@ -167,12 +165,13 @@ type schema struct { // property is a kcl schema property definition. type property struct { - Name string - Required bool - Description string - Type typeInterface - HasDefault bool - DefaultValue interface{} + Name string + Required bool + Description string + Type typeInterface + isJsonNullType bool + HasDefault bool + DefaultValue interface{} } // validation is a kcl schema validation definition. @@ -194,9 +193,9 @@ type validation struct { // indexSignature is a kcl schema index signature definition. // It can be used to construct a dict with type. type indexSignature struct { - Alias string - Type typeInterface - validation *validation + Alias string + Type typeInterface + Validations []validation } // data is a kcl data definition.