Skip to content

Commit

Permalink
Add unit tests for cilium network k8sd feature (#640)
Browse files Browse the repository at this point in the history
  • Loading branch information
HomayoonAlimohammadi committed Sep 2, 2024
1 parent c256eaa commit 2ad8afb
Show file tree
Hide file tree
Showing 8 changed files with 245 additions and 61 deletions.
8 changes: 4 additions & 4 deletions src/k8s/pkg/k8sd/features/cilium/chart.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import (
)

var (
// chartCilium represents manifests to deploy Cilium.
chartCilium = helm.InstallableChart{
// ChartCilium represents manifests to deploy Cilium.
ChartCilium = helm.InstallableChart{
Name: "ck-network",
Namespace: "kube-system",
ManifestPath: filepath.Join("charts", "cilium-1.15.2.tgz"),
Expand Down Expand Up @@ -38,8 +38,8 @@ var (
// ciliumAgentImageRepo represents the image to use for cilium-agent.
ciliumAgentImageRepo = "ghcr.io/canonical/cilium"

// ciliumAgentImageTag is the tag to use for the cilium-agent image.
ciliumAgentImageTag = "1.15.2-ck2"
// CiliumAgentImageTag is the tag to use for the cilium-agent image.
CiliumAgentImageTag = "1.15.2-ck2"

// ciliumOperatorImageRepo is the image to use for cilium-operator.
ciliumOperatorImageRepo = "ghcr.io/canonical/cilium-operator"
Expand Down
36 changes: 18 additions & 18 deletions src/k8s/pkg/k8sd/features/cilium/gateway.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ func enableGateway(ctx context.Context, snap snap.Snap) (types.FeatureStatus, er
err = fmt.Errorf("failed to install Gateway API CRDs: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(gatewayDeployFailedMsgTmpl, err),
}, err
}
Expand All @@ -47,42 +47,42 @@ func enableGateway(ctx context.Context, snap snap.Snap) (types.FeatureStatus, er
err = fmt.Errorf("failed to install Gateway API GatewayClass: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(gatewayDeployFailedMsgTmpl, err),
}, err
}

changed, err := m.Apply(ctx, chartCilium, helm.StateUpgradeOnly, map[string]any{"gatewayAPI": map[string]any{"enabled": true}})
changed, err := m.Apply(ctx, ChartCilium, helm.StateUpgradeOnly, map[string]any{"gatewayAPI": map[string]any{"enabled": true}})
if err != nil {
err = fmt.Errorf("failed to upgrade Gateway API cilium configuration: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(gatewayDeployFailedMsgTmpl, err),
}, err
}

if !changed {
return types.FeatureStatus{
Enabled: true,
Version: ciliumAgentImageTag,
Message: enabledMsg,
Version: CiliumAgentImageTag,
Message: EnabledMsg,
}, nil
}

if err := rolloutRestartCilium(ctx, snap, 3); err != nil {
err = fmt.Errorf("failed to rollout restart cilium to enable Gateway API: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(gatewayDeployFailedMsgTmpl, err),
}, err
}

return types.FeatureStatus{
Enabled: true,
Version: ciliumAgentImageTag,
Message: enabledMsg,
Version: CiliumAgentImageTag,
Message: EnabledMsg,
}, nil
}

Expand All @@ -94,17 +94,17 @@ func disableGateway(ctx context.Context, snap snap.Snap, network types.Network)
err = fmt.Errorf("failed to delete Gateway API GatewayClass: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(gatewayDeleteFailedMsgTmpl, err),
}, err
}

changed, err := m.Apply(ctx, chartCilium, helm.StateUpgradeOnlyOrDeleted(network.GetEnabled()), map[string]any{"gatewayAPI": map[string]any{"enabled": false}})
changed, err := m.Apply(ctx, ChartCilium, helm.StateUpgradeOnlyOrDeleted(network.GetEnabled()), map[string]any{"gatewayAPI": map[string]any{"enabled": false}})
if err != nil {
err = fmt.Errorf("failed to delete Gateway API cilium configuration: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(gatewayDeleteFailedMsgTmpl, err),
}, err
}
Expand All @@ -115,31 +115,31 @@ func disableGateway(ctx context.Context, snap snap.Snap, network types.Network)
err = fmt.Errorf("failed to delete Gateway API CRDs: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(gatewayDeleteFailedMsgTmpl, err),
}, err
}

if !changed {
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Message: disabledMsg,
Version: CiliumAgentImageTag,
Message: DisabledMsg,
}, nil
}

if err := rolloutRestartCilium(ctx, snap, 3); err != nil {
err = fmt.Errorf("failed to rollout restart cilium to disable Gateway API: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(gatewayDeployFailedMsgTmpl, err),
}, err
}

return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Message: disabledMsg,
Version: CiliumAgentImageTag,
Message: DisabledMsg,
}, nil
}
24 changes: 12 additions & 12 deletions src/k8s/pkg/k8sd/features/cilium/ingress.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,20 +47,20 @@ func ApplyIngress(ctx context.Context, snap snap.Snap, ingress types.Ingress, ne
}
}

changed, err := m.Apply(ctx, chartCilium, helm.StateUpgradeOnlyOrDeleted(network.GetEnabled()), values)
changed, err := m.Apply(ctx, ChartCilium, helm.StateUpgradeOnlyOrDeleted(network.GetEnabled()), values)
if err != nil {
if network.GetEnabled() {
err = fmt.Errorf("failed to enable ingress: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(ingressDeployFailedMsgTmpl, err),
}, err
} else {
err = fmt.Errorf("failed to disable ingress: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(ingressDeleteFailedMsgTmpl, err),
}, err
}
Expand All @@ -70,38 +70,38 @@ func ApplyIngress(ctx context.Context, snap snap.Snap, ingress types.Ingress, ne
if ingress.GetEnabled() {
return types.FeatureStatus{
Enabled: true,
Version: ciliumAgentImageTag,
Message: enabledMsg,
Version: CiliumAgentImageTag,
Message: EnabledMsg,
}, nil
} else {
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Message: disabledMsg,
Version: CiliumAgentImageTag,
Message: DisabledMsg,
}, nil
}
}

if !ingress.GetEnabled() {
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Message: disabledMsg,
Version: CiliumAgentImageTag,
Message: DisabledMsg,
}, nil
}

if err := rolloutRestartCilium(ctx, snap, 3); err != nil {
err = fmt.Errorf("failed to rollout restart cilium to apply ingress: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(ingressDeployFailedMsgTmpl, err),
}, err
}

return types.FeatureStatus{
Enabled: true,
Version: ciliumAgentImageTag,
Message: enabledMsg,
Version: CiliumAgentImageTag,
Message: EnabledMsg,
}, nil
}
18 changes: 9 additions & 9 deletions src/k8s/pkg/k8sd/features/cilium/loadbalancer.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,42 +30,42 @@ func ApplyLoadBalancer(ctx context.Context, snap snap.Snap, loadbalancer types.L
err = fmt.Errorf("failed to disable LoadBalancer: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(lbDeleteFailedMsgTmpl, err),
}, err
}
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Message: disabledMsg,
Version: CiliumAgentImageTag,
Message: DisabledMsg,
}, nil
}

if err := enableLoadBalancer(ctx, snap, loadbalancer, network); err != nil {
err = fmt.Errorf("failed to enable LoadBalancer: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(lbDeployFailedMsgTmpl, err),
}, err
}

if loadbalancer.GetBGPMode() {
return types.FeatureStatus{
Enabled: true,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(lbEnabledMsgTmpl, "BGP"),
}, nil
} else if loadbalancer.GetL2Mode() {
return types.FeatureStatus{
Enabled: true,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(lbEnabledMsgTmpl, "L2"),
}, nil
} else {
return types.FeatureStatus{
Enabled: true,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(lbEnabledMsgTmpl, "Unknown"),
}, nil
}
Expand Down Expand Up @@ -96,7 +96,7 @@ func disableLoadBalancer(ctx context.Context, snap snap.Snap, network types.Netw
},
}

if _, err := m.Apply(ctx, chartCilium, helm.StateUpgradeOnlyOrDeleted(network.GetEnabled()), values); err != nil {
if _, err := m.Apply(ctx, ChartCilium, helm.StateUpgradeOnlyOrDeleted(network.GetEnabled()), values); err != nil {
return fmt.Errorf("failed to refresh network to apply LoadBalancer configuration: %w", err)
}
return nil
Expand All @@ -123,7 +123,7 @@ func enableLoadBalancer(ctx context.Context, snap snap.Snap, loadbalancer types.
},
}

changed, err := m.Apply(ctx, chartCilium, helm.StateUpgradeOnlyOrDeleted(network.GetEnabled()), networkValues)
changed, err := m.Apply(ctx, ChartCilium, helm.StateUpgradeOnlyOrDeleted(network.GetEnabled()), networkValues)
if err != nil {
return fmt.Errorf("failed to update Cilium configuration for LoadBalancer: %w", err)
}
Expand Down
30 changes: 15 additions & 15 deletions src/k8s/pkg/k8sd/features/cilium/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,18 @@ func ApplyNetwork(ctx context.Context, snap snap.Snap, cfg types.Network, _ type
m := snap.HelmClient()

if !cfg.GetEnabled() {
if _, err := m.Apply(ctx, chartCilium, helm.StateDeleted, nil); err != nil {
if _, err := m.Apply(ctx, ChartCilium, helm.StateDeleted, nil); err != nil {
err = fmt.Errorf("failed to uninstall network: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(networkDeleteFailedMsgTmpl, err),
}, err
}
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Message: disabledMsg,
Version: CiliumAgentImageTag,
Message: DisabledMsg,
}, nil
}

Expand All @@ -49,15 +49,15 @@ func ApplyNetwork(ctx context.Context, snap snap.Snap, cfg types.Network, _ type
err = fmt.Errorf("invalid kube-proxy --cluster-cidr value: %v", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(networkDeployFailedMsgTmpl, err),
}, err
}

values := map[string]any{
"image": map[string]any{
"repository": ciliumAgentImageRepo,
"tag": ciliumAgentImageTag,
"tag": CiliumAgentImageTag,
"useDigest": false,
},
"socketLB": map[string]any{
Expand Down Expand Up @@ -99,7 +99,7 @@ func ApplyNetwork(ctx context.Context, snap snap.Snap, cfg types.Network, _ type
err = fmt.Errorf("failed to get bpf mount path: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(networkDeployFailedMsgTmpl, err),
}, err
}
Expand All @@ -109,7 +109,7 @@ func ApplyNetwork(ctx context.Context, snap snap.Snap, cfg types.Network, _ type
err = fmt.Errorf("failed to get cgroup2 mount path: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(networkDeployFailedMsgTmpl, err),
}, err
}
Expand All @@ -132,7 +132,7 @@ func ApplyNetwork(ctx context.Context, snap snap.Snap, cfg types.Network, _ type
err = fmt.Errorf("failed to get mount propagation type for /sys: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(networkDeployFailedMsgTmpl, err),
}, err
}
Expand All @@ -145,33 +145,33 @@ func ApplyNetwork(ctx context.Context, snap snap.Snap, cfg types.Network, _ type
err := fmt.Errorf("/sys is not a shared mount on the LXD container, this might be resolved by updating LXD on the host to version 5.0.2 or newer")
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(networkDeployFailedMsgTmpl, err),
}, err
}

err = fmt.Errorf("/sys is not a shared mount")
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(networkDeployFailedMsgTmpl, err),
}, err
}
}

if _, err := m.Apply(ctx, chartCilium, helm.StatePresent, values); err != nil {
if _, err := m.Apply(ctx, ChartCilium, helm.StatePresent, values); err != nil {
err = fmt.Errorf("failed to enable network: %w", err)
return types.FeatureStatus{
Enabled: false,
Version: ciliumAgentImageTag,
Version: CiliumAgentImageTag,
Message: fmt.Sprintf(networkDeployFailedMsgTmpl, err),
}, err
}

return types.FeatureStatus{
Enabled: true,
Version: ciliumAgentImageTag,
Message: enabledMsg,
Version: CiliumAgentImageTag,
Message: EnabledMsg,
}, nil
}

Expand Down
Loading

0 comments on commit 2ad8afb

Please sign in to comment.