-
Notifications
You must be signed in to change notification settings - Fork 42
/
features_schema.json
146 lines (146 loc) · 7.8 KB
/
features_schema.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
{
"$id": "istio.io/features",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "Defines the maturity of features in Istio",
"type": "object",
"properties": {
"features": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description":"A unique machine-readable identifier for the feature"
},
"name": {
"type": "string",
"description": "The name of the feature."
},
"link": {
"type": "string",
"description": "A primary link that users can navigate to in order to find out more about a feature. This link may be provided to users by tooling consuming features.yaml."
},
"area": {
"type": "string",
"description": "The area of the feature.",
"enum": [
"Traffic Management",
"Observability",
"Extensibility",
"Security and policy enforcement",
"Core",
"Ambient mode"
]
},
"level": {
"type": "object",
"properties": {
"checklist": {
"type": "string",
"description": "The path to the checklist to track a feature's maturity."
},
"maturity": {
"type": "string",
"description": "The current maturity level of the feature. This can be experimental, alpha, beta, or stable. Experimental is an optional maturity level that can be skipped. For alpha, beta, and stable, all requirements for the previous levels must be met before a feature can meet the next level (i.e. a stable feature has met the requirements of both alpha and beta). There may be features for which a requirement is not applicable.",
"enum": [
"Experimental",
"Alpha",
"Beta",
"Stable"
]
},
"maturityNotes": {
"type": "string",
"description": "Specific notes that may be needed alongside a maturity level."
},
"nextExpectedPromotion": {
"type": "string",
"description": "The Istio release by which the next promotion of a feature is expected. Up until a feature is stable, a feature is expected to continuously mature. If a feature doesn't get promoted, this should be extended or the feature should be deprecated. In some rare circumstances, features will be permanently in a state below stable and never expected to be promoted. For those circumstances, this field can be marked never."
}
},
"required": [
"checklist",
"maturity"
]
},
"deprecation": {
"type": "object",
"properties": {
"state": {
"type": "string",
"description": "This can be deprecated or retired. When a feature is deprecated, users should consider migrating to a replacement as retired features may be removed. Deprecation time varies depending on the current maturity level.",
"enum": [
"deprecated",
"retired"
]
},
"details": {
"type": "object",
"description": "Should be set when a feature moves out of the active state.",
"properties": {
"replacement": {
"type": "string",
"description": "Should specify the checklist(s) for any feature replacing this deprecated feature."
},
"next": {
"type": "string",
"description": "Indicates the release in which the feature will be retired."
}
},
"required": [
"next"
]
}
},
"required": [
"state",
"details"
]
},
"apis": {
"type": "array",
"description": "The contract between this feature and the user. These are the set of APIs that the feature exposes to the user. Note that these need not be Kubernetes resources; they can be a set of metric names, annotations, protocols, etc.",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name of the API."
},
"link": {
"type": "string",
"description": "A primary link that users can navigate to in order to find out more about an API. This link may be provided to users by tooling consuming features.yaml."
},
"maturity": {
"type": "string",
"description": "The current maturity level of the API. This can be experimental, alpha, beta, or stable. Experimental is an optional maturity level that can be skipped. For alpha, beta, and stable, all requirements for the previous levels must be met before a feature can meet the next level (i.e. a stable feature has met the requirements of both alpha and beta). There may be features for which a requirement is not applicable.",
"enum": [
"Experimental",
"Alpha",
"Beta",
"Stable"
]
}
},
"required": [
"name",
"link",
"maturity"
]
}
}
},
"required": [
"name",
"level",
"area",
"id"
]
}
}
},
"required": [
"features"
]
}