Skip to content

Commit bbe7b94

Browse files
committed
test: implement controller tests
1 parent ce37fe3 commit bbe7b94

6 files changed

+443
-32
lines changed

api/v1alpha1/metalstackfirewalldeployment_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const (
1818
// MetalStackFirewallDeploymentSpec defines the desired state of MetalStackFirewallDeployment
1919
type MetalStackFirewallDeploymentSpec struct {
2020
// FirewallTemplateRef references the MetalStackFirewallTemplate to use for the firewall deployment.
21-
FirewallTemplateRef *MetalStackFirewallTemplateRef `json:"firewallTemplateRef,omitempty"`
21+
FirewallTemplateRef MetalStackFirewallTemplateRef `json:"firewallTemplateRef"`
2222
// ManagedResourceRef references the MetalStackManagedResource that provides the underlying infrastructure for the firewall deployment.
2323
// +optional
2424
ManagedResourceRef *MetalStackManagedResourceRef `json:"managedResourceRef,omitempty"`

api/v1alpha1/zz_generated.deepcopy.go

Lines changed: 1 addition & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/bases/infrastructure.cluster.x-k8s.io_metalstackfirewalldeployments.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ spec:
9595
required:
9696
- name
9797
type: object
98+
required:
99+
- firewallTemplateRef
98100
type: object
99101
status:
100102
description: MetalStackFirewallDeploymentStatus defines the observed state

internal/controller/metalstackcluster_controller_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ var _ = Describe("MetalStackCluster Controller", func() {
113113
}
114114
})
115115

116-
It("should skip reconciles due to cluster.spec.ready", func() {
116+
It("should skip reconciles due to cluster.spec.paused", func() {
117117
Expect(k8sClient.Create(ctx, resource)).To(Succeed())
118118

119119
By("creating the cluster resource and setting the owner reference")
@@ -168,7 +168,7 @@ var _ = Describe("MetalStackCluster Controller", func() {
168168
})
169169
})
170170

171-
It("should skip reconciles due to infra annotation", func() {
171+
It("should skip reconciles due to infra pause annotation", func() {
172172
resource.Annotations = map[string]string{
173173
clusterv1beta1.PausedAnnotation: "true",
174174
}

internal/controller/metalstackfirewalldeployment_controller.go

Lines changed: 8 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,8 @@ func (r *MetalStackFirewallDeploymentReconciler) Reconcile(ctx context.Context,
163163
// SetupWithManager sets up the controller with the Manager.
164164
func (r *MetalStackFirewallDeploymentReconciler) SetupWithManager(mgr ctrl.Manager) error {
165165
err := mgr.GetCache().IndexField(context.TODO(), &v1alpha1.MetalStackFirewallDeployment{}, "spec.firewallTemplateRef.name", func(obj client.Object) []string {
166-
fwdeploy := obj.(*v1alpha1.MetalStackFirewallDeployment)
167-
if fwdeploy.Spec.FirewallTemplateRef == nil {
166+
fwdeploy, ok := obj.(*v1alpha1.MetalStackFirewallDeployment)
167+
if !ok {
168168
return nil
169169
}
170170
return []string{fwdeploy.Spec.FirewallTemplateRef.Name}
@@ -357,27 +357,7 @@ func (r *firewallDeploymentReconciler) ensureFirewallDeployment() error {
357357
}
358358
)
359359

360-
fwFindResp, err := r.metalClient.Firewall().FindFirewalls(firewall.NewFindFirewallsParamsWithContext(r.ctx).WithBody(&models.V1FirewallFindRequest{
361-
PartitionID: r.firewallTemplate.Spec.Partition,
362-
Sizeid: r.firewallTemplate.Spec.Size,
363-
AllocationImageID: r.firewallTemplate.Spec.Image,
364-
Tags: tags,
365-
}), nil)
366-
if err != nil {
367-
return fmt.Errorf("error finding firewall deployments: %w", err)
368-
}
369-
370-
if len(fwFindResp.Payload) > 1 {
371-
fwids := make([]string, 0, len(fwFindResp.Payload))
372-
for _, fw := range fwFindResp.Payload {
373-
if fw.ID != nil {
374-
fwids = append(fwids, *fw.ID)
375-
}
376-
}
377-
r.log.Info("multiple firewalls found, manual intervention needed due to manual roll", "firewalls", fwids)
378-
}
379-
380-
if len(fwFindResp.Payload) == 1 {
360+
if r.firewallDeployment.Spec.ManagedResourceRef != nil {
381361
return nil
382362
}
383363

@@ -395,6 +375,10 @@ func (r *firewallDeploymentReconciler) ensureFirewallDeployment() error {
395375
networks = append(networks, network)
396376
}
397377

378+
if r.firewallTemplate.Spec.InitialRuleSet == nil {
379+
return fmt.Errorf("firewall template %s/%s has no initial rule set defined and will not allow any traffic", r.firewallTemplate.Namespace, r.firewallTemplate.Name)
380+
}
381+
398382
egressRules := make([]*models.V1FirewallEgressRule, 0, len(r.firewallTemplate.Spec.InitialRuleSet.Egress))
399383
for _, er := range r.firewallTemplate.Spec.InitialRuleSet.Egress {
400384
egressRules = append(egressRules, &models.V1FirewallEgressRule{
@@ -418,7 +402,7 @@ func (r *firewallDeploymentReconciler) ensureFirewallDeployment() error {
418402
fwresp, err := r.metalClient.Firewall().AllocateFirewall(firewall.NewAllocateFirewallParamsWithContext(r.ctx).WithBody(&models.V1FirewallCreateRequest{
419403
Hostname: name,
420404
Name: name,
421-
Description: fmt.Sprintf("firewall for cluster %s", r.infraCluster.GetName()),
405+
Description: fmt.Sprintf("firewall for cluster %s", r.cluster.GetName()),
422406
Partitionid: ptr.To(r.infraCluster.Spec.Partition),
423407
Projectid: &r.infraCluster.Spec.ProjectID,
424408
Tags: tags,

0 commit comments

Comments
 (0)