3.8 KiB
title | headline | sidenav | bodyclass | layout | type |
---|---|---|---|---|---|
Writing Configuration | Writing Configuration | doc-side-concepts-nav.html | docs | docs | markdown |
{% capture overview %} This document describes how to write configuration that conforms to Istio's schemas. All configuration schemas in Istio are defined as protobuf messages. When in doubt, search for the protos. {% endcapture %}
{% capture body %}
Translating to YAML
There is no canonical mapping between protobufs and YAML; instead protobuf defines a canonical mapping to JSON, and YAML defines a canonical mapping to JSON. To ingest YAML as a proto we convert it to JSON then to protobuf.
Important things to note:
- YAML fields are implicitly strings
- Proto
repeated
fields map to YAML lists; each element in a YAML list is prefixed by a dash (-
) - Proto
message
s map to JSON objects; in YAML objects are field names all at the same indentation level - YAML is whitespace sensitive and must use spaces; tabs are never allowed
map
and message
fields
Proto | YAML |
---|---|
message Metric { string descriptor_name = 1; string value = 2; map labels = 3; } |
descriptorName: request_count value: "1" labels: source: origin.ip target: target.service |
Note that when numeric literals are used as strings (like value
above) they must be enclosed in quotes. Quotation marks ("
) are optional for normal strings.
repeated
fields
Proto | YAML |
---|---|
message Metric { string descriptor_name = 1; string value = 2; map labels = 3; } |
metrics: - descriptorName: request_count value: "1" labels: source: origin.ip target: target.service - descriptorName: request_latency value: response.duration labels: source: origin.ip target: target.service
|
enum
fields
Proto | YAML |
---|---|
enum ValueType { STRING = 1; INT64 = 2; DOUBLE = 3; // more values omitted } |
name: request.duration value_type: INT64 or name: request.duration valueType: INT64
|
Note that YAML parsing will handle both snake_case
and lowerCamelCase
field names. lowerCamelCase
is the canonical version in YAML.
Nested message
fields
Proto | YAML |
---|---|
enum ValueType { STRING = 1; INT64 = 2; DOUBLE = 3; // more values omitted } |
name: My Monitored Resource labels: - name: label one valueType: STRING - name: second label valueType: DOUBLE
|
{% endcapture %}
{% capture whatsnext %}
- TODO: link to overall mixer config concept guide (how the config pieces fit together) {% endcapture %}
{% include templates/concept.md %}