mirror of
https://github.com/fluxcd/flagger.git
synced 2026-04-15 06:57:34 +00:00
Merge pull request #1052 from zeot/append-ownerreferences-configmaps-and-secrets
Append to list of ownerReferences for primary configmaps and secrets
This commit is contained in:
@@ -299,22 +299,38 @@ func (ct *ConfigTracker) CreatePrimaryConfigs(cd *flaggerv1.Canary, refs map[str
|
||||
case ConfigRefMap:
|
||||
config, err := ct.KubeClient.CoreV1().ConfigMaps(cd.Namespace).Get(context.TODO(), ref.Name, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
return fmt.Errorf("configmap %s.%s get query failed : %w", ref.Name, cd.Name, err)
|
||||
return fmt.Errorf("configmap %s.%s get query failed : %w", ref.Name, cd.Namespace, err)
|
||||
}
|
||||
primaryName := fmt.Sprintf("%s-primary", config.GetName())
|
||||
ownerReferences := []metav1.OwnerReference{
|
||||
*metav1.NewControllerRef(cd, schema.GroupVersionKind{
|
||||
Group: flaggerv1.SchemeGroupVersion.Group,
|
||||
Version: flaggerv1.SchemeGroupVersion.Version,
|
||||
Kind: flaggerv1.CanaryKind,
|
||||
}),
|
||||
}
|
||||
|
||||
oldPrimary, err := ct.KubeClient.CoreV1().ConfigMaps(cd.Namespace).Get(context.TODO(), primaryName, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
if !errors.IsNotFound(err) {
|
||||
return fmt.Errorf("configmap %s.%s get query failed : %w", primaryName, cd.Namespace, err)
|
||||
}
|
||||
} else {
|
||||
for _, ownerRef := range oldPrimary.OwnerReferences {
|
||||
if ownerRef.Kind != flaggerv1.CanaryKind || ownerRef.Name != cd.Name {
|
||||
ownerRef.Controller = new(bool)
|
||||
ownerReferences = append(ownerReferences, ownerRef)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
labels := includeLabelsByPrefix(config.Labels, includeLabelPrefix)
|
||||
primaryConfigMap := &corev1.ConfigMap{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: primaryName,
|
||||
Namespace: cd.Namespace,
|
||||
Labels: labels,
|
||||
OwnerReferences: []metav1.OwnerReference{
|
||||
*metav1.NewControllerRef(cd, schema.GroupVersionKind{
|
||||
Group: flaggerv1.SchemeGroupVersion.Group,
|
||||
Version: flaggerv1.SchemeGroupVersion.Version,
|
||||
Kind: flaggerv1.CanaryKind,
|
||||
}),
|
||||
},
|
||||
Name: primaryName,
|
||||
Namespace: cd.Namespace,
|
||||
Labels: labels,
|
||||
OwnerReferences: ownerReferences,
|
||||
},
|
||||
Data: config.Data,
|
||||
}
|
||||
@@ -337,22 +353,37 @@ func (ct *ConfigTracker) CreatePrimaryConfigs(cd *flaggerv1.Canary, refs map[str
|
||||
case ConfigRefSecret:
|
||||
secret, err := ct.KubeClient.CoreV1().Secrets(cd.Namespace).Get(context.TODO(), ref.Name, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
return fmt.Errorf("secret %s.%s get query failed : %w", ref.Name, cd.Name, err)
|
||||
return fmt.Errorf("secret %s.%s get query failed : %w", ref.Name, cd.Namespace, err)
|
||||
}
|
||||
primaryName := fmt.Sprintf("%s-primary", secret.GetName())
|
||||
ownerReferences := []metav1.OwnerReference{
|
||||
*metav1.NewControllerRef(cd, schema.GroupVersionKind{
|
||||
Group: flaggerv1.SchemeGroupVersion.Group,
|
||||
Version: flaggerv1.SchemeGroupVersion.Version,
|
||||
Kind: flaggerv1.CanaryKind,
|
||||
}),
|
||||
}
|
||||
|
||||
oldPrimary, err := ct.KubeClient.CoreV1().Secrets(cd.Namespace).Get(context.TODO(), primaryName, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
if !errors.IsNotFound(err) {
|
||||
return fmt.Errorf("secret %s.%s get query failed : %w", primaryName, cd.Namespace, err)
|
||||
}
|
||||
} else {
|
||||
for _, ownerRef := range oldPrimary.OwnerReferences {
|
||||
if ownerRef.Kind != flaggerv1.CanaryKind || ownerRef.Name != cd.Name {
|
||||
ownerRef.Controller = new(bool)
|
||||
ownerReferences = append(ownerReferences, ownerRef)
|
||||
}
|
||||
}
|
||||
}
|
||||
labels := includeLabelsByPrefix(secret.Labels, includeLabelPrefix)
|
||||
primarySecret := &corev1.Secret{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Name: primaryName,
|
||||
Namespace: cd.Namespace,
|
||||
Labels: labels,
|
||||
OwnerReferences: []metav1.OwnerReference{
|
||||
*metav1.NewControllerRef(cd, schema.GroupVersionKind{
|
||||
Group: flaggerv1.SchemeGroupVersion.Group,
|
||||
Version: flaggerv1.SchemeGroupVersion.Version,
|
||||
Kind: flaggerv1.CanaryKind,
|
||||
}),
|
||||
},
|
||||
Name: primaryName,
|
||||
Namespace: cd.Namespace,
|
||||
Labels: labels,
|
||||
OwnerReferences: ownerReferences,
|
||||
},
|
||||
Type: secret.Type,
|
||||
Data: secret.Data,
|
||||
|
||||
@@ -399,3 +399,27 @@ func Test_fieldIsMandatory(t *testing.T) {
|
||||
assert.Equal(t, tt.expected, actual)
|
||||
}
|
||||
}
|
||||
|
||||
func TestConfigTracker_ConfigOwnerMultiDeployment(t *testing.T) {
|
||||
t.Run("deployment", func(t *testing.T) {
|
||||
dc := deploymentConfigs{name: "podinfo", label: "name", labelValue: "podinfo"}
|
||||
mocks := newDeploymentFixture(dc)
|
||||
mocks.initializeCanary(t)
|
||||
|
||||
dep := newDeploymentControllerTest(dc)
|
||||
dep.Name = "podinfo2"
|
||||
canary := newDeploymentControllerTestCanary(canaryConfigs{targetName: "podinfo2"})
|
||||
canary.Name = "podinfo2"
|
||||
canary.Spec.TargetRef.Name = dep.Name
|
||||
mocks.kubeClient.AppsV1().Deployments("default").Create(context.TODO(), dep, metav1.CreateOptions{})
|
||||
mocks.controller.Initialize(canary)
|
||||
|
||||
configMapPrimary, err := mocks.kubeClient.CoreV1().ConfigMaps("default").Get(context.TODO(), "podinfo-config-env-primary", metav1.GetOptions{})
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, configMapPrimary.OwnerReferences, 2)
|
||||
|
||||
secretPrimary, err := mocks.kubeClient.CoreV1().Secrets("default").Get(context.TODO(), "podinfo-secret-env-primary", metav1.GetOptions{})
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, secretPrimary.OwnerReferences, 2)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user