mirror of
https://github.com/fluxcd/flagger.git
synced 2026-02-26 07:43:49 +00:00
- set canaries.flagger.app version to v1alpha1 - replace old Canary spec with CanaryDeployment
80 lines
2.0 KiB
Go
80 lines
2.0 KiB
Go
package controller
|
|
|
|
import (
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
"fmt"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
"github.com/google/go-cmp/cmp/cmpopts"
|
|
flaggerv1 "github.com/stefanprodan/flagger/pkg/apis/flagger/v1alpha1"
|
|
appsv1 "k8s.io/api/apps/v1"
|
|
corev1 "k8s.io/api/core/v1"
|
|
"k8s.io/apimachinery/pkg/api/resource"
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
)
|
|
|
|
func (c *Controller) saveDeploymentSpec(cd *flaggerv1.Canary, dep *appsv1.Deployment) error {
|
|
specJson, err := json.Marshal(dep.Spec.Template.Spec)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
specEnc := base64.StdEncoding.EncodeToString(specJson)
|
|
cd.Status.CanaryRevision = specEnc
|
|
cd, err = c.rolloutClient.FlaggerV1alpha1().Canaries(cd.Namespace).Update(cd)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (c *Controller) diffDeploymentSpec(cd *flaggerv1.Canary, dep *appsv1.Deployment) (bool, error) {
|
|
if cd.Status.CanaryRevision == "" {
|
|
return true, nil
|
|
}
|
|
|
|
newSpec := &dep.Spec.Template.Spec
|
|
oldSpecJson, err := base64.StdEncoding.DecodeString(cd.Status.CanaryRevision)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
oldSpec := &corev1.PodSpec{}
|
|
err = json.Unmarshal(oldSpecJson, oldSpec)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
|
|
if diff := cmp.Diff(*newSpec, *oldSpec, cmpopts.IgnoreUnexported(resource.Quantity{})); diff != "" {
|
|
fmt.Println(diff)
|
|
return true, nil
|
|
}
|
|
|
|
return false, nil
|
|
}
|
|
|
|
func (c *Controller) getDeploymentSpec(name string, namespace string) (string, error) {
|
|
dep, err := c.kubeClient.AppsV1().Deployments(namespace).Get(name, v1.GetOptions{})
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
specJson, err := json.Marshal(dep.Spec.Template.Spec)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
specEnc := base64.StdEncoding.EncodeToString(specJson)
|
|
return specEnc, nil
|
|
}
|
|
|
|
func (c *Controller) getDeploymentSpecEnc(dep *appsv1.Deployment) (string, error) {
|
|
specJson, err := json.Marshal(dep.Spec.Template.Spec)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
specEnc := base64.StdEncoding.EncodeToString(specJson)
|
|
return specEnc, nil
|
|
}
|