Skip to content

Commit 172b735

Browse files
authored
Merge pull request #961 from aawoznia26/922_controlling_resources_deletion
[#922] controlling resources deletion
2 parents e10a1ec + 455877c commit 172b735

35 files changed

+510
-6
lines changed

api/v1beta1/federation_types.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ type FederationSpec struct {
3535
TrustUserId bool `json:"trustUserId,omitempty"`
3636
Exchange string `json:"exchange,omitempty"`
3737
Queue string `json:"queue,omitempty"`
38+
// DeletionPolicy defines the behavior of federation in the RabbitMQ cluster when the corresponding custom resource is deleted.
39+
// Can be set to 'delete' or 'retain'. Default is 'delete'.
40+
// +kubebuilder:validation:Enum=delete;retain
41+
// +kubebuilder:default:=delete
42+
DeletionPolicy string `json:"deletionPolicy,omitempty"`
3843
}
3944

4045
// FederationStatus defines the observed state of Federation

api/v1beta1/federation_types_test.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ var _ = Describe("Federation spec", func() {
2525
UriSecret: &corev1.LocalObjectReference{
2626
Name: "a-secret",
2727
},
28+
DeletionPolicy: "delete",
2829
}
2930

3031
federation := Federation{
@@ -122,4 +123,32 @@ var _ = Describe("Federation spec", func() {
122123
Expect(k8sClient.Create(ctx, &federation)).To(MatchError(`Federation.rabbitmq.com "invalid-federation" is invalid: spec.ackMode: Unsupported value: "non-existing-ackmode": supported values: "on-confirm", "on-publish", "no-ack"`))
123124
})
124125
})
126+
127+
It("creates a federation with non-default DeletionPolicy", func() {
128+
federation := Federation{
129+
ObjectMeta: metav1.ObjectMeta{
130+
Name: "federation-with-retain-policy",
131+
Namespace: namespace,
132+
},
133+
Spec: FederationSpec{
134+
Name: "federation-with-retain-policy",
135+
DeletionPolicy: "retain",
136+
UriSecret: &corev1.LocalObjectReference{
137+
Name: "a-secret",
138+
},
139+
RabbitmqClusterReference: RabbitmqClusterReference{
140+
Name: "some-cluster",
141+
},
142+
},
143+
}
144+
Expect(k8sClient.Create(ctx, &federation)).To(Succeed())
145+
fetched := &Federation{}
146+
Expect(k8sClient.Get(ctx, types.NamespacedName{
147+
Name: federation.Name,
148+
Namespace: federation.Namespace,
149+
}, fetched)).To(Succeed())
150+
151+
Expect(fetched.Spec.DeletionPolicy).To(Equal("retain"))
152+
Expect(fetched.Spec.Name).To(Equal("federation-with-retain-policy"))
153+
})
125154
})

api/v1beta1/federation_webhook_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,5 +115,12 @@ var _ = Describe("federation webhook", func() {
115115
_, err := newFederation.ValidateUpdate(rootCtx, &federation, newFederation)
116116
Expect(err).To(Succeed())
117117
})
118+
119+
It("allows updates on federation.spec.deletionPolicy", func() {
120+
newFederation := federation.DeepCopy()
121+
newFederation.Spec.DeletionPolicy = "retain"
122+
_, err := newFederation.ValidateUpdate(rootCtx, &federation, newFederation)
123+
Expect(err).ToNot(HaveOccurred())
124+
})
118125
})
119126
})

api/v1beta1/queue_types.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ type QueueSpec struct {
4545
// Required property.
4646
// +kubebuilder:validation:Required
4747
RabbitmqClusterReference RabbitmqClusterReference `json:"rabbitmqClusterReference"`
48+
// DeletionPolicy defines the behavior of queue in the RabbitMQ cluster when the corresponding custom resource is deleted.
49+
// Can be set to 'delete' or 'retain'. Default is 'delete'.
50+
// +kubebuilder:validation:Enum=delete;retain
51+
// +kubebuilder:default:=delete
52+
DeletionPolicy string `json:"deletionPolicy,omitempty"`
4853
}
4954

5055
// QueueStatus defines the observed state of Queue

api/v1beta1/queue_types_test.go

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@ var _ = Describe("Queue spec", func() {
1717

1818
It("creates a queue with default settings", func() {
1919
expectedSpec := QueueSpec{
20-
Name: "test-queue",
21-
Vhost: "/",
22-
Durable: false,
23-
AutoDelete: false,
20+
Name: "test-queue",
21+
Vhost: "/",
22+
Durable: false,
23+
AutoDelete: false,
24+
DeletionPolicy: "delete",
2425
RabbitmqClusterReference: RabbitmqClusterReference{
2526
Name: "some-cluster",
2627
},
@@ -85,4 +86,29 @@ var _ = Describe("Queue spec", func() {
8586
}))
8687
Expect(fetchedQ.Spec.Arguments.Raw).To(Equal([]byte(`{"yoyo":10}`)))
8788
})
89+
90+
It("creates a queue with non-default DeletionPolicy", func() {
91+
q := Queue{
92+
ObjectMeta: metav1.ObjectMeta{
93+
Name: "queue-with-retain-policy",
94+
Namespace: namespace,
95+
},
96+
Spec: QueueSpec{
97+
Name: "queue-with-retain-policy",
98+
DeletionPolicy: "retain",
99+
RabbitmqClusterReference: RabbitmqClusterReference{
100+
Name: "random-cluster",
101+
},
102+
},
103+
}
104+
Expect(k8sClient.Create(ctx, &q)).To(Succeed())
105+
fetchedQ := &Queue{}
106+
Expect(k8sClient.Get(ctx, types.NamespacedName{
107+
Name: q.Name,
108+
Namespace: q.Namespace,
109+
}, fetchedQ)).To(Succeed())
110+
111+
Expect(fetchedQ.Spec.DeletionPolicy).To(Equal("retain"))
112+
Expect(fetchedQ.Spec.Name).To(Equal("queue-with-retain-policy"))
113+
})
88114
})

api/v1beta1/queue_webhook_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,5 +154,12 @@ var _ = Describe("queue webhook", func() {
154154
_, err = newQueue.ValidateUpdate(rootCtx, &queue, newQueue)
155155
Expect(err).To(MatchError(ContainSubstring("queue arguments cannot be updated")))
156156
})
157+
158+
It("allows updates on queue.spec.deletionPolicy", func() {
159+
newQueue := queue.DeepCopy()
160+
newQueue.Spec.DeletionPolicy = "retain"
161+
_, err := newQueue.ValidateUpdate(rootCtx, &queue, newQueue)
162+
Expect(err).ToNot(HaveOccurred())
163+
})
157164
})
158165
})

api/v1beta1/shovel_types.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ type ShovelSpec struct {
8484
SourceConsumerArgs *runtime.RawExtension `json:"srcConsumerArgs,omitempty"`
8585
// amqp10 configuration; required if srcProtocol is amqp10
8686
SourceAddress string `json:"srcAddress,omitempty"`
87+
// DeletionPolicy defines the behavior of shovel in the RabbitMQ cluster when the corresponding custom resource is deleted.
88+
// Can be set to 'delete' or 'retain'. Default is 'delete'.
89+
// +kubebuilder:validation:Enum=delete;retain
90+
// +kubebuilder:default:=delete
91+
DeletionPolicy string `json:"deletionPolicy,omitempty"`
8792
}
8893

8994
// ShovelStatus defines the observed state of Shovel

api/v1beta1/shovel_types_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,4 +193,36 @@ var _ = Describe("Shovel spec", func() {
193193
Expect(k8sClient.Create(ctx, &shovel)).To(MatchError(`Shovel.rabbitmq.com "an-invalid-srcprotocol" is invalid: spec.srcProtocol: Unsupported value: "mqtt": supported values: "amqp091", "amqp10"`))
194194
})
195195
})
196+
197+
It("creates a shovel with non-default DeletionPolicy", func() {
198+
shovel := Shovel{
199+
ObjectMeta: metav1.ObjectMeta{
200+
Name: "shovel-with-retain-policy",
201+
Namespace: namespace,
202+
},
203+
Spec: ShovelSpec{
204+
Name: "shovel-with-retain-policy",
205+
DeletionPolicy: "retain",
206+
RabbitmqClusterReference: RabbitmqClusterReference{
207+
Name: "some-cluster",
208+
},
209+
UriSecret: &corev1.LocalObjectReference{
210+
Name: "a-secret",
211+
},
212+
},
213+
}
214+
Expect(k8sClient.Create(ctx, &shovel)).To(Succeed())
215+
fetched := &Shovel{}
216+
Expect(k8sClient.Get(ctx, types.NamespacedName{
217+
Name: shovel.Name,
218+
Namespace: shovel.Namespace,
219+
}, fetched)).To(Succeed())
220+
221+
Expect(fetched.Spec.DeletionPolicy).To(Equal("retain"))
222+
Expect(fetched.Spec.Name).To(Equal("shovel-with-retain-policy"))
223+
Expect(fetched.Spec.RabbitmqClusterReference).To(Equal(RabbitmqClusterReference{
224+
Name: "some-cluster",
225+
}))
226+
Expect(fetched.Spec.UriSecret.Name).To(Equal("a-secret"))
227+
})
196228
})

api/v1beta1/shovel_webhook_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,5 +179,12 @@ var _ = Describe("shovel webhook", func() {
179179
_, err := newShovel.ValidateUpdate(rootCtx, &shovel, newShovel)
180180
Expect(err).ToNot(HaveOccurred())
181181
})
182+
183+
It("allows updates on shovel.spec.deletionPolicy", func() {
184+
newShovel := shovel.DeepCopy()
185+
newShovel.Spec.DeletionPolicy = "retain"
186+
_, err := newShovel.ValidateUpdate(rootCtx, &shovel, newShovel)
187+
Expect(err).ToNot(HaveOccurred())
188+
})
182189
})
183190
})

api/v1beta1/vhost_types.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ type VhostSpec struct {
2929
// Required property.
3030
// +kubebuilder:validation:Required
3131
RabbitmqClusterReference RabbitmqClusterReference `json:"rabbitmqClusterReference"`
32+
// DeletionPolicy defines the behavior of vhost in the RabbitMQ cluster when the corresponding custom resource is deleted.
33+
// Can be set to 'delete' or 'retain'. Default is 'delete'.
34+
// +kubebuilder:validation:Enum=delete;retain
35+
// +kubebuilder:default:=delete
36+
DeletionPolicy string `json:"deletionPolicy,omitempty"`
3237
}
3338

3439
// VhostStatus defines the observed state of Vhost

0 commit comments

Comments
 (0)