-
Notifications
You must be signed in to change notification settings - Fork 81
/
deploy_strategy_struct.go
70 lines (61 loc) · 2.63 KB
/
deploy_strategy_struct.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
// Copyright 2022 The kubegems.io 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 application
import (
"encoding/json"
rolloutsv1alpha1 "github.com/argoproj/argo-rollouts/pkg/apis/rollouts/v1alpha1"
istionetworkingv1alpha3 "istio.io/api/networking/v1alpha3"
)
// ExtendCanaryStrategy 用于扩展原canary策略中 virtualservice 匹配的字段
type ExtendCanaryStrategy struct {
rolloutsv1alpha1.CanaryStrategy
// TrafficRouting hosts all the supported service meshes supported to enable more fine-grained traffic routing
TrafficRouting *RolloutTrafficRouting `json:"trafficRouting,omitempty" protobuf:"bytes,4,opt,name=trafficRouting"`
}
func (s *ExtendCanaryStrategy) ToCanaryStrategy() *rolloutsv1alpha1.CanaryStrategy {
if s == nil {
return nil
}
content, _ := json.Marshal(s)
canaryStrategy := &rolloutsv1alpha1.CanaryStrategy{}
json.Unmarshal(content, canaryStrategy)
return canaryStrategy
}
func ExtendCanaryStrategyFromCanaryStrategy(from *rolloutsv1alpha1.CanaryStrategy) *ExtendCanaryStrategy {
if from == nil {
return nil
}
s := &ExtendCanaryStrategy{}
content, _ := json.Marshal(from)
json.Unmarshal(content, s)
return s
}
// RolloutTrafficRouting hosts all the different configuration for supported service meshes to enable more fine-grained traffic routing
type RolloutTrafficRouting struct {
rolloutsv1alpha1.RolloutTrafficRouting
// Istio holds Istio specific configuration to route traffic
Istio *IstioTrafficRouting `json:"istio,omitempty" protobuf:"bytes,1,opt,name=istio"`
}
type IstioTrafficRouting struct {
rolloutsv1alpha1.IstioTrafficRouting
// VirtualService references an Istio VirtualService to modify to shape traffic
VirtualService IstioVirtualService `json:"virtualService" protobuf:"bytes,1,opt,name=virtualService"`
}
// 根据header进行灰度
type IstioVirtualService struct {
rolloutsv1alpha1.IstioVirtualService
Uri *istionetworkingv1alpha3.StringMatch `json:"uri,omitempty"`
Headers map[string]*istionetworkingv1alpha3.StringMatch `json:"headers,omitempty"`
IgnoreUriCase bool `json:"ignoreUriCase,omitempty"`
}