istio
75 строк · 2.1 Кб
1// Copyright Istio Authors
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15// nolint: gocritic
16package ambient
17
18import (
19"google.golang.org/protobuf/proto"
20v1 "k8s.io/api/core/v1"
21
22meshapi "istio.io/api/mesh/v1alpha1"
23"istio.io/istio/pilot/pkg/features"
24"istio.io/istio/pkg/config/mesh"
25"istio.io/istio/pkg/kube/krt"
26"istio.io/istio/pkg/log"
27)
28
29type MeshConfig struct {
30*meshapi.MeshConfig
31}
32
33func (m MeshConfig) ResourceName() string { return " " }
34
35func (m MeshConfig) Equals(other MeshConfig) bool { return proto.Equal(m.MeshConfig, other.MeshConfig) }
36
37func MeshConfigCollection(ConfigMaps krt.Collection[*v1.ConfigMap], options Options) krt.Singleton[MeshConfig] {
38cmName := "istio"
39if options.Revision != "" && options.Revision != "default" {
40cmName = cmName + "-" + options.Revision
41}
42return krt.NewSingleton[MeshConfig](
43func(ctx krt.HandlerContext) *MeshConfig {
44meshCfg := mesh.DefaultMeshConfig()
45cms := []*v1.ConfigMap{}
46if features.SharedMeshConfig != "" {
47cms = AppendNonNil(cms, krt.FetchOne(ctx, ConfigMaps, krt.FilterName(features.SharedMeshConfig, options.SystemNamespace)))
48}
49cms = AppendNonNil(cms, krt.FetchOne(ctx, ConfigMaps, krt.FilterName(cmName, options.SystemNamespace)))
50
51for _, c := range cms {
52n, err := mesh.ApplyMeshConfig(meshConfigMapData(c), meshCfg)
53if err != nil {
54log.Error(err)
55continue
56}
57meshCfg = n
58}
59return &MeshConfig{meshCfg}
60}, krt.WithName("MeshConfig"),
61)
62}
63
64func meshConfigMapData(cm *v1.ConfigMap) string {
65if cm == nil {
66return ""
67}
68
69cfgYaml, exists := cm.Data["mesh"]
70if !exists {
71return ""
72}
73
74return cfgYaml
75}
76