istio

Форк
0
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
16
package ambient
17

18
import (
19
	"google.golang.org/protobuf/proto"
20
	v1 "k8s.io/api/core/v1"
21

22
	meshapi "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

29
type MeshConfig struct {
30
	*meshapi.MeshConfig
31
}
32

33
func (m MeshConfig) ResourceName() string { return " " }
34

35
func (m MeshConfig) Equals(other MeshConfig) bool { return proto.Equal(m.MeshConfig, other.MeshConfig) }
36

37
func MeshConfigCollection(ConfigMaps krt.Collection[*v1.ConfigMap], options Options) krt.Singleton[MeshConfig] {
38
	cmName := "istio"
39
	if options.Revision != "" && options.Revision != "default" {
40
		cmName = cmName + "-" + options.Revision
41
	}
42
	return krt.NewSingleton[MeshConfig](
43
		func(ctx krt.HandlerContext) *MeshConfig {
44
			meshCfg := mesh.DefaultMeshConfig()
45
			cms := []*v1.ConfigMap{}
46
			if features.SharedMeshConfig != "" {
47
				cms = AppendNonNil(cms, krt.FetchOne(ctx, ConfigMaps, krt.FilterName(features.SharedMeshConfig, options.SystemNamespace)))
48
			}
49
			cms = AppendNonNil(cms, krt.FetchOne(ctx, ConfigMaps, krt.FilterName(cmName, options.SystemNamespace)))
50

51
			for _, c := range cms {
52
				n, err := mesh.ApplyMeshConfig(meshConfigMapData(c), meshCfg)
53
				if err != nil {
54
					log.Error(err)
55
					continue
56
				}
57
				meshCfg = n
58
			}
59
			return &MeshConfig{meshCfg}
60
		}, krt.WithName("MeshConfig"),
61
	)
62
}
63

64
func meshConfigMapData(cm *v1.ConfigMap) string {
65
	if cm == nil {
66
		return ""
67
	}
68

69
	cfgYaml, exists := cm.Data["mesh"]
70
	if !exists {
71
		return ""
72
	}
73

74
	return cfgYaml
75
}
76

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.