Patch canary service selector from PodTemplateMetadata (#243)
* patch canary service selector Signed-off-by: Megrez Lu <lujiajing1126@gmail.com> * check null Signed-off-by: Megrez Lu <lujiajing1126@gmail.com> * fix nil check Signed-off-by: Megrez Lu <lujiajing1126@gmail.com> * remove len check Signed-off-by: Megrez Lu <lujiajing1126@gmail.com> --------- Signed-off-by: Megrez Lu <lujiajing1126@gmail.com>
This commit is contained in:
parent
3f66aae0ae
commit
056c77dbd2
|
|
@ -600,11 +600,16 @@ func newTrafficRoutingContext(c *RolloutContext) *trafficrouting.TrafficRoutingC
|
|||
if c.Workload != nil {
|
||||
revisionLabelKey = c.Workload.RevisionLabelKey
|
||||
}
|
||||
var selectorPatch map[string]string
|
||||
if !c.Rollout.Spec.Strategy.DisableGenerateCanaryService() && c.Rollout.Spec.Strategy.Canary.PatchPodTemplateMetadata != nil {
|
||||
selectorPatch = c.Rollout.Spec.Strategy.Canary.PatchPodTemplateMetadata.Labels
|
||||
}
|
||||
return &trafficrouting.TrafficRoutingContext{
|
||||
Key: fmt.Sprintf("Rollout(%s/%s)", c.Rollout.Namespace, c.Rollout.Name),
|
||||
Namespace: c.Rollout.Namespace,
|
||||
ObjectRef: c.Rollout.Spec.Strategy.GetTrafficRouting(),
|
||||
Strategy: currentStep.TrafficRoutingStrategy,
|
||||
CanaryServiceSelectorPatch: selectorPatch,
|
||||
OwnerRef: *metav1.NewControllerRef(c.Rollout, rolloutControllerKind),
|
||||
RevisionLabelKey: revisionLabelKey,
|
||||
StableRevision: c.NewStatus.GetSubStatus().StableRevision,
|
||||
|
|
|
|||
|
|
@ -28,11 +28,14 @@ const (
|
|||
RolloutHistoryGate featuregate.Feature = "RolloutHistory"
|
||||
// AdvancedDeploymentGate enable advanced deployment controller.
|
||||
AdvancedDeploymentGate featuregate.Feature = "AdvancedDeployment"
|
||||
// AppendServiceSelectorGate enable appending pod labels from PodTemplateMetadata to the canary service selector.
|
||||
AppendServiceSelectorGate featuregate.Feature = "AppendPodSelector"
|
||||
)
|
||||
|
||||
var defaultFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{
|
||||
RolloutHistoryGate: {Default: false, PreRelease: featuregate.Alpha},
|
||||
AdvancedDeploymentGate: {Default: false, PreRelease: featuregate.Alpha},
|
||||
RolloutHistoryGate: {Default: false, PreRelease: featuregate.Alpha},
|
||||
AdvancedDeploymentGate: {Default: false, PreRelease: featuregate.Alpha},
|
||||
AppendServiceSelectorGate: {Default: false, PreRelease: featuregate.Alpha},
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
|
|
|||
|
|
@ -21,13 +21,6 @@ import (
|
|||
"fmt"
|
||||
"time"
|
||||
|
||||
"github.com/openkruise/rollouts/api/v1beta1"
|
||||
"github.com/openkruise/rollouts/pkg/trafficrouting/network"
|
||||
custom "github.com/openkruise/rollouts/pkg/trafficrouting/network/customNetworkProvider"
|
||||
"github.com/openkruise/rollouts/pkg/trafficrouting/network/gateway"
|
||||
"github.com/openkruise/rollouts/pkg/trafficrouting/network/ingress"
|
||||
"github.com/openkruise/rollouts/pkg/util"
|
||||
"github.com/openkruise/rollouts/pkg/util/grace"
|
||||
corev1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/api/errors"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
|
@ -36,6 +29,16 @@ import (
|
|||
"k8s.io/utils/integer"
|
||||
utilpointer "k8s.io/utils/pointer"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
|
||||
"github.com/openkruise/rollouts/api/v1beta1"
|
||||
"github.com/openkruise/rollouts/pkg/feature"
|
||||
"github.com/openkruise/rollouts/pkg/trafficrouting/network"
|
||||
custom "github.com/openkruise/rollouts/pkg/trafficrouting/network/customNetworkProvider"
|
||||
"github.com/openkruise/rollouts/pkg/trafficrouting/network/gateway"
|
||||
"github.com/openkruise/rollouts/pkg/trafficrouting/network/ingress"
|
||||
"github.com/openkruise/rollouts/pkg/util"
|
||||
utilfeature "github.com/openkruise/rollouts/pkg/util/feature"
|
||||
"github.com/openkruise/rollouts/pkg/util/grace"
|
||||
)
|
||||
|
||||
var (
|
||||
|
|
@ -44,10 +47,11 @@ var (
|
|||
|
||||
type TrafficRoutingContext struct {
|
||||
// only for log info
|
||||
Key string
|
||||
Namespace string
|
||||
ObjectRef []v1beta1.TrafficRoutingRef
|
||||
Strategy v1beta1.TrafficRoutingStrategy
|
||||
Key string
|
||||
Namespace string
|
||||
ObjectRef []v1beta1.TrafficRoutingRef
|
||||
Strategy v1beta1.TrafficRoutingStrategy
|
||||
CanaryServiceSelectorPatch map[string]string
|
||||
// OnlyTrafficRouting
|
||||
OnlyTrafficRouting bool
|
||||
OwnerRef metav1.OwnerReference
|
||||
|
|
@ -447,6 +451,13 @@ func (m *Manager) createCanaryService(c *TrafficRoutingContext, cService string,
|
|||
for i := range canaryService.Spec.Ports {
|
||||
canaryService.Spec.Ports[i].NodePort = 0
|
||||
}
|
||||
for key, val := range c.CanaryServiceSelectorPatch {
|
||||
if _, ok := canaryService.Spec.Selector[key]; ok {
|
||||
canaryService.Spec.Selector[key] = val
|
||||
} else if utilfeature.DefaultFeatureGate.Enabled(feature.AppendServiceSelectorGate) {
|
||||
canaryService.Spec.Selector[key] = val
|
||||
}
|
||||
}
|
||||
err := m.Create(context.TODO(), canaryService)
|
||||
if err != nil && !errors.IsAlreadyExists(err) {
|
||||
klog.Errorf("%s create canary service(%s) failed: %s", c.Key, cService, err.Error())
|
||||
|
|
|
|||
Loading…
Reference in New Issue