Skip to content

ci: provide a CNI config for the e2e tests - #978

Merged
cmainas merged 2 commits into
urunc-dev:main-pr978from
OdysseasKalaitsidis:fix/ci-cni-conf
Aug 17, 2026
Merged

ci: provide a CNI config for the e2e tests#978
cmainas merged 2 commits into
urunc-dev:main-pr978from
OdysseasKalaitsidis:fix/ci-cni-conf

Conversation

@OdysseasKalaitsidis

@OdysseasKalaitsidis OdysseasKalaitsidis commented Aug 16, 2026

Copy link
Copy Markdown
Contributor

Description

The workflow installs the CNI plugin binaries in /opt/cni/bin, but never writes a config in /etc/cni/net.d. containerd needs both, so with an empty conf dir the CRI plugin has no network to attach a pod to and every pod creation fails with cni plugin not initialized.

Until now that config came from the runner image, which used to ship podman's 87-podman-bridge.conflist. Newer images no longer install it and the crictl tests started failing. Only crictl is affected, since nerdctl generates its own config and the ctr and docker jobs do not use CRI networking.

So the workflow now writes its own config a bridge on 10.88.0.0/16 with a gateway and a default route, plus portmap and firewall, which is the same shape as the one we were getting from the image. It also waits for the CRI network to report ready before the tests, so a similar break fails with a clear message instead of a list of failing tests, and it installs jq, which that check needs.

Related issues

Fixes #967

How was this tested?

Locally on arm64 and amd64, in Ubuntu 22.04 machines with systemd and the versions we pin in ci.yml. With an empty conf dir I get the same cni plugin not initialized error as CI. With the config, the network reports ready, the pod gets 10.88.0.2 and pinging it from the host works, which is what pingTest does.

I also checked that CRI picks our file over the one nerdctl generates, and that the firewall plugin matters when theFORWARD policy is DROP as Docker sets it on the runners: pod egress works with it and is blocked without it.

Finally I built urunc and solo5-spt in the same machine and ran the Spt specs that do not need devmapper, 2 Passed and 0 Failed. Spt-mirage-net` is the one that pings the unikernel through CRI, so that is the failing path covered. The devmapper specs and the monitors that need KVM are left to CI.

LLM usage

I used Claude (Opus 5) to help investigate the runner image change and draft the workflow steps. I reviewed everything and I am responsible for the result.

Checklist

  • I have read the contribution guide.
  • The linter passes locally (make lint).
  • The e2e tests of at least one tool pass locally (make test_ctr, make test_nerdctl, make test_docker, make test_crictl).
  • If LLMs were used: I have read the llm policy.

Added a bridge network config with a gateway and a default route, so that
the host can reach the pod with portmap for port mappings and firewall for
the forwarding rules. The file name sorts before config that nerdctl
generates since the CRI plugin loads only the first one. Also wait for the
CRI network to report ready before running tests to add clear log messages
instead of failing tests.

Fixes: urunc-dev#967
Signed-off-by: Odysseas Kalaitsidis <odysseaskalaitsides@gmail.com>
The readiness check needs jq, which so far was only there because the
runner image happened to provide it. It also retries on errors now, so
that it does not fail while containerd is restarting.

Signed-off-by: Odysseas Kalaitsidis <odysseaskalaitsides@gmail.com>
@netlify

netlify Bot commented Aug 16, 2026

Copy link
Copy Markdown

Deploy Preview for urunc ready!

Name Link
🔨 Latest commit afe4cd8
🔍 Latest deploy log https://app.netlify.com/projects/urunc/deploys/6a81a742b5a69b0008dea830
😎 Deploy Preview https://deploy-preview-978--urunc.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@OdysseasKalaitsidis OdysseasKalaitsidis changed the title provide a CNI config for the e2e tests ci: provide a CNI config for the e2e tests Aug 16, 2026
@urunc-bot
urunc-bot Bot changed the base branch from main to main-pr978 August 17, 2026 07:12

@cmainas cmainas left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you @OdysseasKalaitsidis for the fix.

@cmainas
cmainas merged commit cc8a83c into urunc-dev:main-pr978 Aug 17, 2026
53 of 56 checks passed
github-actions Bot pushed a commit that referenced this pull request Aug 17, 2026
Added a bridge network config with a gateway and a default route, so that
the host can reach the pod with portmap for port mappings and firewall for
the forwarding rules. The file name sorts before config that nerdctl
generates since the CRI plugin loads only the first one. Also wait for the
CRI network to report ready before running tests to add clear log messages
instead of failing tests.

PR: #978
Fixes: #967
Signed-off-by: Odysseas Kalaitsidis <odysseaskalaitsides@gmail.com>
Reviewed-by: Charalampos Mainas <cmainas@nubificus.co.uk>
Approved-by: Charalampos Mainas <cmainas@nubificus.co.uk>
github-actions Bot pushed a commit that referenced this pull request Aug 17, 2026
The readiness check needs jq, which so far was only there because the
runner image happened to provide it. It also retries on errors now, so
that it does not fail while containerd is restarting.

PR: #978
Signed-off-by: Odysseas Kalaitsidis <odysseaskalaitsides@gmail.com>
Reviewed-by: Charalampos Mainas <cmainas@nubificus.co.uk>
Approved-by: Charalampos Mainas <cmainas@nubificus.co.uk>
urunc-bot Bot pushed a commit that referenced this pull request Aug 17, 2026
Added a bridge network config with a gateway and a default route, so that
the host can reach the pod with portmap for port mappings and firewall for
the forwarding rules. The file name sorts before config that nerdctl
generates since the CRI plugin loads only the first one. Also wait for the
CRI network to report ready before running tests to add clear log messages
instead of failing tests.

PR: #978
Fixes: #967
Signed-off-by: Odysseas Kalaitsidis <odysseaskalaitsides@gmail.com>
Reviewed-by: Charalampos Mainas <cmainas@nubificus.co.uk>
Approved-by: Charalampos Mainas <cmainas@nubificus.co.uk>
urunc-bot Bot pushed a commit that referenced this pull request Aug 17, 2026
The readiness check needs jq, which so far was only there because the
runner image happened to provide it. It also retries on errors now, so
that it does not fail while containerd is restarting.

PR: #978
Signed-off-by: Odysseas Kalaitsidis <odysseaskalaitsides@gmail.com>
Reviewed-by: Charalampos Mainas <cmainas@nubificus.co.uk>
Approved-by: Charalampos Mainas <cmainas@nubificus.co.uk>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Crictl e2e tests fial in CI because cni plugin not initialize

2 participants