{ "openapi": "3.0.0", "info": { "title": "Configuration state for the Mixer client library.", "version": "client" }, "components": { "schemas": { "istio.mixer.v1.config.client.HTTPAPISpec": { "description": "HTTPAPISpec defines the canonical configuration for generating API-related attributes from HTTP requests based on the method and uri templated path matches. It is sufficient for defining the API surface of a service for the purposes of API attribute generation. It is not intended to represent auth, quota, documentation, or other information commonly found in other API specifications, e.g. OpenAPI.", "type": "object", "properties": { "attributes": { "$ref": "#/components/schemas/istio.mixer.v1.Attributes" }, "patterns": { "description": "List of HTTP patterns to match.", "type": "array", "items": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.HTTPAPISpecPattern" } }, "apiKeys": { "description": "List of APIKey that describes how to extract an API-KEY from an HTTP request. The first API-Key match found in the list is used, i.e. 'OR' semantics.", "type": "array", "items": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.APIKey" } } } }, "istio.mixer.v1.config.client.HTTPAPISpecPattern": { "description": "HTTPAPISpecPattern defines a single pattern to match against incoming HTTP requests. The per-pattern list of attributes is generated if both the http_method and uri_template match. In addition, the top-level list of attributes in the HTTPAPISpec is also generated.", "type": "object", "properties": { "attributes": { "$ref": "#/components/schemas/istio.mixer.v1.Attributes" }, "httpMethod": { "description": "HTTP request method to match against as defined by [rfc7231](https://tools.ietf.org/html/rfc7231#page-21). For example: GET, HEAD, POST, PUT, DELETE.", "type": "string", "format": "string" } }, "oneOf": [ { "not": { "anyOf": [ { "required": [ "uriTemplate" ], "properties": { "uriTemplate": { "description": "URI template to match against as defined by [rfc6570](https://tools.ietf.org/html/rfc6570). For example, the following are valid URI templates: /pets /pets/{id} /dictionary/{term:1}/{term} /search{?q*,lang}", "type": "string", "format": "string" } } }, { "required": [ "regex" ], "properties": { "regex": { "description": "RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax)", "type": "string", "format": "string" } } } ] } }, { "required": [ "uriTemplate" ], "properties": { "uriTemplate": { "description": "URI template to match against as defined by [rfc6570](https://tools.ietf.org/html/rfc6570). For example, the following are valid URI templates: /pets /pets/{id} /dictionary/{term:1}/{term} /search{?q*,lang}", "type": "string", "format": "string" } } }, { "required": [ "regex" ], "properties": { "regex": { "description": "RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax)", "type": "string", "format": "string" } } } ] }, "istio.mixer.v1.config.client.APIKey": { "description": "APIKey defines the explicit configuration for generating the `request.api_key` attribute from HTTP requests.", "type": "object", "oneOf": [ { "not": { "anyOf": [ { "required": [ "query" ], "properties": { "query": { "description": "API Key is sent as a query parameter. `query` represents the query string parameter name.", "type": "string", "format": "string" } } }, { "required": [ "header" ], "properties": { "header": { "description": "API key is sent in a request header. `header` represents the header name.", "type": "string", "format": "string" } } }, { "required": [ "cookie" ], "properties": { "cookie": { "description": "API key is sent in a [cookie](https://swagger.io/docs/specification/authentication/cookie-authentication),", "type": "string", "format": "string" } } } ] } }, { "required": [ "query" ], "properties": { "query": { "description": "API Key is sent as a query parameter. `query` represents the query string parameter name.", "type": "string", "format": "string" } } }, { "required": [ "header" ], "properties": { "header": { "description": "API key is sent in a request header. `header` represents the header name.", "type": "string", "format": "string" } } }, { "required": [ "cookie" ], "properties": { "cookie": { "description": "API key is sent in a [cookie](https://swagger.io/docs/specification/authentication/cookie-authentication),", "type": "string", "format": "string" } } } ] }, "istio.mixer.v1.config.client.HTTPAPISpecReference": { "description": "HTTPAPISpecReference defines a reference to an HTTPAPISpec. This is typically used for establishing bindings between an HTTPAPISpec and an IstioService. For example, the following defines an HTTPAPISpecReference for service `foo` in namespace `bar`.", "type": "object", "properties": { "name": { "description": "The short name of the HTTPAPISpec. This is the resource name defined by the metadata name field.", "type": "string", "format": "string" }, "namespace": { "description": "Optional namespace of the HTTPAPISpec. Defaults to the encompassing HTTPAPISpecBinding's metadata namespace field.", "type": "string", "format": "string" } } }, "istio.mixer.v1.config.client.HTTPAPISpecBinding": { "description": "HTTPAPISpecBinding defines the binding between HTTPAPISpecs and one or more IstioService. For example, the following establishes a binding between the HTTPAPISpec `petstore` and service `foo` in namespace `bar`.", "type": "object", "properties": { "services": { "description": "One or more services to map the listed HTTPAPISpec onto.", "type": "array", "items": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.IstioService" } }, "apiSpecs": { "description": "One or more HTTPAPISpec references that should be mapped to the specified service(s). The aggregate collection of match conditions defined in the HTTPAPISpecs should not overlap.", "type": "array", "items": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.HTTPAPISpecReference" } } } }, "istio.mixer.v1.config.client.IstioService": { "description": "IstioService identifies a service and optionally service version. The FQDN of the service is composed from the name, namespace, and implementation-specific domain suffix (e.g. on Kubernetes, \"reviews\" + \"default\" + \"svc.cluster.local\" -\u003e \"reviews.default.svc.cluster.local\").", "type": "object", "properties": { "name": { "description": "The short name of the service such as \"foo\".", "type": "string", "format": "string" }, "namespace": { "description": "Optional namespace of the service. Defaults to value of metadata namespace field.", "type": "string", "format": "string" }, "domain": { "description": "Domain suffix used to construct the service FQDN in implementations that support such specification.", "type": "string", "format": "string" }, "service": { "description": "The service FQDN.", "type": "string", "format": "string" }, "labels": { "description": "Optional one or more labels that uniquely identify the service version.", "type": "object", "additionalProperties": { "type": "string", "format": "string" } } } }, "istio.mixer.v1.config.client.NetworkFailPolicy": { "description": "Specifies the behavior when the client is unable to connect to Mixer.", "type": "object", "properties": { "policy": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.NetworkFailPolicy.FailPolicy" }, "maxRetry": { "description": "Max retries on transport error.", "type": "integer" }, "baseRetryWait": { "description": "Base time to wait between retries. Will be adjusted by exponential backoff and jitter.", "type": "string" }, "maxRetryWait": { "description": "Max time to wait between retries.", "type": "string" } } }, "istio.mixer.v1.config.client.NetworkFailPolicy.FailPolicy": { "description": "Describes the policy.", "type": "string", "enum": [ "FAIL_OPEN", "FAIL_CLOSE" ] }, "istio.mixer.v1.config.client.ServiceConfig": { "description": "Defines the per-service client configuration.", "type": "object", "properties": { "disableCheckCalls": { "description": "If true, do not call Mixer Check.", "type": "boolean" }, "disableReportCalls": { "description": "If true, do not call Mixer Report.", "type": "boolean" }, "mixerAttributes": { "$ref": "#/components/schemas/istio.mixer.v1.Attributes" }, "httpApiSpec": { "description": "HTTP API specifications to generate API attributes.", "type": "array", "items": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.HTTPAPISpec" } }, "quotaSpec": { "description": "Quota specifications to generate quota requirements.", "type": "array", "items": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.QuotaSpec" } }, "networkFailPolicy": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.NetworkFailPolicy" }, "forwardAttributes": { "$ref": "#/components/schemas/istio.mixer.v1.Attributes" } } }, "istio.mixer.v1.config.client.QuotaSpec": { "description": "Determines the quotas used for individual requests.", "type": "object", "properties": { "rules": { "description": "A list of Quota rules.", "type": "array", "items": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.QuotaRule" } } } }, "istio.mixer.v1.config.client.TransportConfig": { "description": "Defines the transport config on how to call Mixer.", "type": "object", "properties": { "networkFailPolicy": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.NetworkFailPolicy" }, "disableCheckCache": { "description": "The flag to disable check cache.", "type": "boolean" }, "disableQuotaCache": { "description": "The flag to disable quota cache.", "type": "boolean" }, "disableReportBatch": { "description": "The flag to disable report batch.", "type": "boolean" }, "statsUpdateInterval": { "description": "Specify refresh interval to write Mixer client statistics to Envoy share memory. If not specified, the interval is 10 seconds.", "type": "string" }, "checkCluster": { "description": "Name of the cluster that will forward check calls to a pool of mixer servers. Defaults to \"mixer_server\". By using different names for checkCluster and reportCluster, it is possible to have one set of Mixer servers handle check calls, while another set of Mixer servers handle report calls.", "type": "string", "format": "string" }, "reportCluster": { "description": "Name of the cluster that will forward report calls to a pool of mixer servers. Defaults to \"mixer_server\". By using different names for checkCluster and reportCluster, it is possible to have one set of Mixer servers handle check calls, while another set of Mixer servers handle report calls.", "type": "string", "format": "string" }, "attributesForMixerProxy": { "$ref": "#/components/schemas/istio.mixer.v1.Attributes" }, "reportBatchMaxEntries": { "description": "When disable_report_batch is false, this value specifies the maximum number of requests that are batched in report. If left unspecified, the default value of report_batch_max_entries == 0 will use the hardcoded defaults of istio::mixerclient::ReportOptions.", "type": "integer" }, "reportBatchMaxTime": { "description": "When disable_report_batch is false, this value specifies the maximum elapsed time a batched report will be sent after a user request is processed. If left unspecified, the default report_batch_max_time == 0 will use the hardcoded defaults of istio::mixerclient::ReportOptions.", "type": "string" } } }, "istio.mixer.v1.config.client.HttpClientConfig": { "description": "Defines the client config for HTTP.", "type": "object", "properties": { "mixerAttributes": { "$ref": "#/components/schemas/istio.mixer.v1.Attributes" }, "forwardAttributes": { "$ref": "#/components/schemas/istio.mixer.v1.Attributes" }, "transport": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.TransportConfig" }, "serviceConfigs": { "description": "Map of control configuration indexed by destination.service. This is used to support per-service configuration for cases where a mixerclient serves multiple services.", "type": "object", "additionalProperties": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.ServiceConfig" } }, "defaultDestinationService": { "description": "Default destination service name if none was specified in the client request.", "type": "string", "format": "string" }, "ignoreForwardedAttributes": { "description": "Whether or not to use attributes forwarded in the request headers to create the attribute bag to send to mixer. For intra-mesh traffic, this should be set to \"false\". For ingress/egress gateways, this should be set to \"true\".", "type": "boolean" } } }, "istio.mixer.v1.config.client.TcpClientConfig": { "description": "Defines the client config for TCP.", "type": "object", "properties": { "disableCheckCalls": { "description": "If set to true, disables Mixer check calls.", "type": "boolean" }, "disableReportCalls": { "description": "If set to true, disables Mixer check calls.", "type": "boolean" }, "mixerAttributes": { "$ref": "#/components/schemas/istio.mixer.v1.Attributes" }, "transport": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.TransportConfig" }, "connectionQuotaSpec": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.QuotaSpec" }, "reportInterval": { "description": "Specify report interval to send periodical reports for long TCP connections. If not specified, the interval is 10 seconds. This interval should not be less than 1 second, otherwise it will be reset to 1 second.", "type": "string" } } }, "istio.mixer.v1.config.client.QuotaRule": { "description": "Specifies a rule with list of matches and list of quotas. If any clause matched, the list of quotas will be used.", "type": "object", "properties": { "quotas": { "description": "The list of quotas to charge.", "type": "array", "items": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.Quota" } }, "match": { "description": "If empty, match all request. If any of match is true, it is matched.", "type": "array", "items": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.AttributeMatch" } } } }, "istio.mixer.v1.config.client.AttributeMatch": { "description": "Specifies a match clause to match Istio attributes", "type": "object", "properties": { "clause": { "description": "Map of attribute names to StringMatch type. Each map element specifies one condition to match.", "type": "object", "additionalProperties": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.StringMatch" } } } }, "istio.mixer.v1.config.client.Quota": { "description": "Specifies a quota to use with quota name and amount.", "type": "object", "properties": { "quota": { "description": "The quota name to charge", "type": "string", "format": "string" }, "charge": { "description": "The quota amount to charge", "type": "integer", "format": "int32" } } }, "istio.mixer.v1.config.client.StringMatch": { "description": "Describes how to match a given string in HTTP headers. Match is case-sensitive.", "type": "object", "oneOf": [ { "not": { "anyOf": [ { "required": [ "exact" ], "properties": { "exact": { "description": "exact string match", "type": "string", "format": "string" } } }, { "required": [ "prefix" ], "properties": { "prefix": { "description": "prefix-based match", "type": "string", "format": "string" } } }, { "required": [ "regex" ], "properties": { "regex": { "description": "RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).", "type": "string", "format": "string" } } } ] } }, { "required": [ "exact" ], "properties": { "exact": { "description": "exact string match", "type": "string", "format": "string" } } }, { "required": [ "prefix" ], "properties": { "prefix": { "description": "prefix-based match", "type": "string", "format": "string" } } }, { "required": [ "regex" ], "properties": { "regex": { "description": "RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax).", "type": "string", "format": "string" } } } ] }, "istio.mixer.v1.config.client.QuotaSpecBinding": { "description": "QuotaSpecBinding defines the binding between QuotaSpecs and one or more IstioService.", "type": "object", "properties": { "services": { "description": "One or more services to map the listed QuotaSpec onto.", "type": "array", "items": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.IstioService" } }, "quotaSpecs": { "description": "One or more QuotaSpec references that should be mapped to the specified service(s). The aggregate collection of match conditions defined in the QuotaSpecs should not overlap.", "type": "array", "items": { "$ref": "#/components/schemas/istio.mixer.v1.config.client.QuotaSpecBinding.QuotaSpecReference" } } } }, "istio.mixer.v1.config.client.QuotaSpecBinding.QuotaSpecReference": { "description": "QuotaSpecReference uniquely identifies the QuotaSpec used in the Binding.", "type": "object", "properties": { "name": { "description": "The short name of the QuotaSpec. This is the resource name defined by the metadata name field.", "type": "string", "format": "string" }, "namespace": { "description": "Optional namespace of the QuotaSpec. Defaults to the value of the metadata namespace field.", "type": "string", "format": "string" } } }, "istio.mixer.v1.Attributes": { "description": "Default attributes to send to Mixer in both Check and Report. This typically includes \"destination.ip\" and \"destination.uid\" attributes.", "type": "object", "properties": { "attributes": { "description": "A map of attribute name to its value.", "type": "object", "additionalProperties": { "$ref": "#/components/schemas/istio.mixer.v1.Attributes.AttributeValue" } } } }, "istio.mixer.v1.Attributes.AttributeValue": { "type": "object", "oneOf": [ { "not": { "anyOf": [ { "required": [ "stringValue" ], "properties": { "stringValue": { "description": "Used for values of type STRING, DNS_NAME, EMAIL_ADDRESS, and URI", "type": "string", "format": "string" } } }, { "required": [ "int64Value" ], "properties": { "int64Value": { "description": "Used for values of type INT64", "type": "integer", "format": "int64" } } }, { "required": [ "doubleValue" ], "properties": { "doubleValue": { "description": "Used for values of type DOUBLE", "type": "number", "format": "double" } } }, { "required": [ "boolValue" ], "properties": { "boolValue": { "description": "Used for values of type BOOL", "type": "boolean" } } }, { "required": [ "bytesValue" ], "properties": { "bytesValue": { "description": "Used for values of type BYTES", "type": "string", "format": "binary" } } }, { "required": [ "timestampValue" ], "properties": { "timestampValue": { "description": "Used for values of type TIMESTAMP", "type": "string", "format": "dateTime" } } }, { "required": [ "durationValue" ], "properties": { "durationValue": { "description": "Used for values of type DURATION", "type": "string" } } }, { "required": [ "stringMapValue" ], "properties": { "stringMapValue": { "$ref": "#/components/schemas/istio.mixer.v1.Attributes.StringMap" } } } ] } }, { "required": [ "stringValue" ], "properties": { "stringValue": { "description": "Used for values of type STRING, DNS_NAME, EMAIL_ADDRESS, and URI", "type": "string", "format": "string" } } }, { "required": [ "int64Value" ], "properties": { "int64Value": { "description": "Used for values of type INT64", "type": "integer", "format": "int64" } } }, { "required": [ "doubleValue" ], "properties": { "doubleValue": { "description": "Used for values of type DOUBLE", "type": "number", "format": "double" } } }, { "required": [ "boolValue" ], "properties": { "boolValue": { "description": "Used for values of type BOOL", "type": "boolean" } } }, { "required": [ "bytesValue" ], "properties": { "bytesValue": { "description": "Used for values of type BYTES", "type": "string", "format": "binary" } } }, { "required": [ "timestampValue" ], "properties": { "timestampValue": { "description": "Used for values of type TIMESTAMP", "type": "string", "format": "dateTime" } } }, { "required": [ "durationValue" ], "properties": { "durationValue": { "description": "Used for values of type DURATION", "type": "string" } } }, { "required": [ "stringMapValue" ], "properties": { "stringMapValue": { "$ref": "#/components/schemas/istio.mixer.v1.Attributes.StringMap" } } } ] }, "istio.mixer.v1.Attributes.StringMap": { "description": "Used for values of type STRING_MAP", "type": "object", "properties": { "entries": { "description": "Holds a set of name/value pairs.", "type": "object", "additionalProperties": { "type": "string", "format": "string" } } } } } } }