Skip to content

Commit 720e0ec

Browse files
committed
Handle deletion of shadow deployments
Delete shadow deployments when original gets deleted.
1 parent 9c77dbc commit 720e0ec

File tree

2 files changed

+36
-3
lines changed

2 files changed

+36
-3
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ $ go run cmd/controller-manager/main.go --kubeconfig=~/.kube/config
4040
$ go run cmd/initializer-controller/main.go --kubeconfig=~/.kube/config
4141
4242
# add initializer config
43-
$ kubect create -f sample/initializer-configuration.yaml
43+
$ kubectl create -f sample/initializer-configuration.yaml
4444
4545
# create harvester, refinery and test deployment
4646
$ kubectl create -f sample/harvester.yaml

pkg/controller/harvester/controller.go

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"fmt"
55
"log"
66
"strconv"
7+
"strings"
78

89
"github.com/kubernetes-sigs/kubebuilder/pkg/controller"
910
"github.com/kubernetes-sigs/kubebuilder/pkg/controller/types"
@@ -27,7 +28,7 @@ import (
2728
const controllerAgentName = "kubereplay-harvester-controller"
2829

2930
func (bc *HarvesterController) reconcileDeployment(green *appsv1beta.Deployment, blue *appsv1beta.Deployment, blueReplicas int32, greenReplicas int32) {
30-
log.Printf("reconciling deployment %s v1to %d/%d", green.Name, blueReplicas, greenReplicas)
31+
log.Printf("reconciling deployment %s to %d/%d", green.Name, blueReplicas, greenReplicas)
3132
if *blue.Spec.Replicas != blueReplicas {
3233
log.Printf("blue replica needs reconcilation %d != %d", *blue.Spec.Replicas, blueReplicas)
3334
deploy, err := bc.kubernetesclient.ExtensionsV1beta1().Deployments(blue.Namespace).Get(blue.Name, metav1.GetOptions{})
@@ -57,6 +58,27 @@ func (bc *HarvesterController) reconcileDeployment(green *appsv1beta.Deployment,
5758

5859
}
5960

61+
func arrayToMap(deployments []*appsv1beta.Deployment) map[string]*appsv1beta.Deployment {
62+
res := make(map[string]*appsv1beta.Deployment)
63+
for _, d := range deployments {
64+
res[d.Name] = d
65+
}
66+
return res
67+
}
68+
69+
func findOrphans(deployments map[string]*appsv1beta.Deployment) []string {
70+
var orphans []string
71+
for _, d := range deployments {
72+
if strings.HasSuffix(d.Name, "-gor") {
73+
_, ok := deployments[strings.TrimSuffix(d.Name, "-gor")]
74+
if !ok {
75+
orphans = append(orphans, d.Name)
76+
}
77+
}
78+
}
79+
return orphans
80+
}
81+
6082
func (bc *HarvesterController) Reconcile(k types.ReconcileKey) error {
6183
log.Printf("running reconcile Harvester for %s", k.Name)
6284
h, err := bc.Get(k.Namespace, k.Name)
@@ -71,6 +93,18 @@ func (bc *HarvesterController) Reconcile(k types.ReconcileKey) error {
7193
if err != nil {
7294
return err
7395
}
96+
deploysMap := arrayToMap(deploys)
97+
orphans := findOrphans(deploysMap)
98+
propagationPolicy := metav1.DeletePropagationBackground
99+
for _, orph := range orphans {
100+
err = bc.kubernetesclient.ExtensionsV1beta1().Deployments(k.Namespace).Delete(
101+
orph, &metav1.DeleteOptions{PropagationPolicy: &propagationPolicy})
102+
if err != nil {
103+
log.Printf("failed to delete shadow deployment %s: %v", orph, err)
104+
}
105+
106+
}
107+
74108
var forceReconcile bool
75109
if h.Spec.SegmentSize != h.Status.SegmentSize {
76110
forceReconcile = true
@@ -133,7 +167,6 @@ func (bc *HarvesterController) Reconcile(k types.ReconcileKey) error {
133167
}
134168

135169
log.Printf("Finished processing harvester...")
136-
137170
return nil
138171
}
139172

0 commit comments

Comments
 (0)