forked from istio/istio
-
Notifications
You must be signed in to change notification settings - Fork 0
/
snapshot.go
254 lines (195 loc) · 6.16 KB
/
snapshot.go
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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
// Copyright 2018 Istio Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package config
import (
"github.com/gogo/protobuf/proto"
"github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
"github.com/gogo/protobuf/types"
adptTmpl "istio.io/api/mixer/adapter/model/v1beta1"
"istio.io/api/policy/v1beta1"
"istio.io/istio/mixer/pkg/adapter"
"istio.io/istio/mixer/pkg/lang/ast"
"istio.io/istio/mixer/pkg/protobuf/yaml/dynamic"
"istio.io/istio/mixer/pkg/template"
)
type (
// Snapshot view of configuration.
Snapshot struct {
ID int64
// Static information
Templates map[string]*template.Info
Adapters map[string]*adapter.Info
// Config store based information
Attributes ast.AttributeDescriptorFinder
HandlersStatic map[string]*HandlerStatic
InstancesStatic map[string]*InstanceStatic
// TemplateMetadatas contains template descriptors loaded from the store
TemplateMetadatas map[string]*Template
// AdapterMetadatas contains adapter metadata loaded from the store
AdapterMetadatas map[string]*Adapter
HandlersDynamic map[string]*HandlerDynamic
InstancesDynamic map[string]*InstanceDynamic
Rules []*Rule
// Perf Counters relevant to configuration.
Counters Counters
}
// HandlerDynamic configuration for dynamically loaded, grpc adapters. Fully resolved.
HandlerDynamic struct {
Name string
Adapter *Adapter
// AdapterConfig used to construct the Handler. This is passed in verbatim to the remote adapter.
AdapterConfig *types.Any
// Connection information for the handler.
Connection *v1beta1.Connection
}
// HandlerStatic configuration for compiled in adapters. Fully resolved.
HandlerStatic struct {
// Name of the Handler. Fully qualified.
Name string
// Associated adapter. Always resolved.
Adapter *adapter.Info
// parameters used to construct the Handler.
Params proto.Message
}
// InstanceDynamic configuration for dynamically loaded templates. Fully resolved.
InstanceDynamic struct {
Name string
Template *Template
// Encoder to create request instance bytes from attributes
Encoder dynamic.Encoder
// Params of the instance; used to to create the config SHA.
Params map[string]interface{}
}
// InstanceStatic configuration for compiled templates. Fully resolved.
InstanceStatic struct {
// Name of the instance. Fully qualified.
Name string
// Associated template. Always resolved.
Template *template.Info
// parameters used to construct the instance.
Params proto.Message
// inferred type for the instance.
InferredType proto.Message
}
// Rule configuration. Fully resolved.
Rule struct {
// Name of the rule
Name string
// Namespace of the rule
Namespace string
// Match condition
Match string
ActionsDynamic []*ActionDynamic
ActionsStatic []*ActionStatic
}
// ActionDynamic configuration. Fully resolved.
ActionDynamic struct {
// Handler that this action is resolved to.
Handler *HandlerDynamic
// Instances that should be generated as part of invoking action.
Instances []*InstanceDynamic
}
// ActionStatic configuration. Fully resolved.
ActionStatic struct {
// Handler that this action is resolved to.
Handler *HandlerStatic
// Instances that should be generated as part of invoking action.
Instances []*InstanceStatic
}
// Template contains info about a template
Template struct {
// Name of the template.
//
// Note this is the template's resource name and not the template's internal name that adapter developer
// uses to implement adapter service.
Name string
// Variety of this template
Variety adptTmpl.TemplateVariety
// InternalPackageDerivedName is the name of the template from adapter developer point of view.
// The service and functions implemented by the adapter is based on this name
// NOTE: This name derived from template proto package and not the resource name.
InternalPackageDerivedName string
// Template's file descriptor set.
FileDescSet *descriptor.FileDescriptorSet
// package name of the `Template` message
PackageName string
}
// Adapter contains info about an adapter
Adapter struct {
Name string
// Adapter's file descriptor set.
ConfigDescSet *descriptor.FileDescriptorSet
// package name of the `Params` message
PackageName string
SupportedTemplates []*Template
SessionBased bool
Description string
}
)
// Empty returns a new, empty configuration snapshot.
func Empty() *Snapshot {
return &Snapshot{
ID: -1,
Rules: []*Rule{},
Counters: newCounters(-1),
}
}
// GetName gets name
func (h HandlerStatic) GetName() string {
return h.Name
}
// AdapterName gets adapter name
func (h HandlerStatic) AdapterName() string {
return h.Adapter.Name
}
// AdapterParams gets AdapterParams
func (h HandlerStatic) AdapterParams() interface{} {
return h.Params
}
// GetName gets name
func (i InstanceStatic) GetName() string {
return i.Name
}
// TemplateName gets TemplateName
func (i InstanceStatic) TemplateName() string {
return i.Template.Name
}
// TemplateParams gets TemplateParams
func (i InstanceStatic) TemplateParams() interface{} {
return i.Params
}
// GetName gets name
func (h HandlerDynamic) GetName() string {
return h.Name
}
// AdapterName gets adapter name
func (h HandlerDynamic) AdapterName() string {
return h.Adapter.Name
}
// AdapterParams gets AdapterParams
func (h HandlerDynamic) AdapterParams() interface{} {
return h.AdapterConfig
}
// GetName gets name
func (i InstanceDynamic) GetName() string {
return i.Name
}
// TemplateName gets TemplateName
func (i InstanceDynamic) TemplateName() string {
return i.Template.Name
}
// TemplateParams gets TemplateParams
func (i InstanceDynamic) TemplateParams() interface{} {
return i.Params
}