Skip to content

feat(.devcontainer, lab/gvpc): containerlab DooD devcontainer and gvpc lab fixes#85

Open
0xmc wants to merge 10 commits into
mainfrom
feat/devcontainer
Open

feat(.devcontainer, lab/gvpc): containerlab DooD devcontainer and gvpc lab fixes#85
0xmc wants to merge 10 commits into
mainfrom
feat/devcontainer

Conversation

@0xmc
Copy link
Copy Markdown

@0xmc 0xmc commented May 22, 2026

Summary

  • Add a new containerlab-dood devcontainer for running containerlab labs via
    Docker-outside-of-Docker (bind-mounting the host Docker socket and netns/modules),
    with Go, Node.js, kubectl, kind, and crane pre-installed
  • Fix both devcontainers for arm64/multi-arch: dynamic arch detection for
    kubectl, crane, and protoc downloads
  • Fix gitconfig bind mount in galactic devcontainer: mount as .gitconfig.host
    (readonly) and copy on post-create to avoid EBUSY when VS Code writes its
    credential helper
  • Silence noisy port auto-forwarding for metrics/health/webhook ports
  • Fix gvpc lab GoBGP overlay configs: l3vpn-ipv4-unicastl3vpn-ipv6-unicast
    in both iad and sjc overlays
  • Switch infra-control-plane FRR config to ipv6 vpn address-family; add Null0
    static route and network advertisement for the SRv6 /48 prefix
  • Add make test targets for verifying BGP sessions, SRv6 routes, and GoBGP
    L3VPN state after lab bring-up

Test plan

  • Rebuild containerlab-dood devcontainer and verify post-create completes on
    both amd64 and arm64
  • Rebuild galactic devcontainer and verify .gitconfig is present and
    writable after post-create
  • make up && make overlay in lab/gvpc/, then run make test and confirm
    all BGP sessions are established and SRv6 prefixes are visible on tr1

Closes #83

0xmc and others added 10 commits May 21, 2026 16:01
Add a new containerlab-dood devcontainer for running ContainerLab
network labs against the host Docker daemon. Relocate the existing
Galactic devcontainer to .devcontainer/galactic/ to make room for
multiple devcontainer configurations.

Part of #83
Add a pull-base target that uses crane to fetch debian:bookworm-slim,
working around the TLS 1.3 panic in OrbStack's msft-golang Docker
builds. Remove the --dualstack flag from host-setup.sh — the lab
unconditionally enables both IPv4 and IPv6 forwarding.

Part of #83
Add Makefile with targets for building the Galactic Kind node image,
creating/inspecting/tearing down the cluster, and running node setup.
Use crane for base image pulls to work around the TLS 1.3 panic in
OrbStack's msft-golang Docker builds. Wrap kubectl in the node image
to poll the apiserver before applying manifests, fixing a race where
kind's StorageClass step hits the brief window after kubeadm init
where OrbStack's bridge interface is still coming up. Enable Cilium's
full kube-proxy replacement to avoid conflicts between iptables-based
service routing and the SRv6/VRF datapath.

Part of #83
Brings in the GVPC multi-cluster lab environment (#82), including the
ContainerLab topology, FRR/GoBGP configs, and Kind container changes.
Resolved conflict in Dockerfile by retaining OrbStack DooD kubectl-wrapper.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Fix the gvpc lab to run on arm64 in the containerlab-dood devcontainer:

- Remove stale COPY resources/ from Dockerfile (resources moved to
  lab/gvpc/resources/ in the main merge and are applied at runtime)
- Set wait: 0s on all kind clusters to bypass a kind v0.31.0 panic
  when the node conditions array is empty at fast startup; install.sh
  already polls kubectl get nodes for readiness
- Use ARG KINDEST_VER in Dockerfile and pass it from the Makefile so
  the version has a single source of truth
- Fold containers/Makefile into lab/gvpc/Makefile; remove dead targets
  (create, host-setup, status, clean) left over from the old
  lab/containers/ single-cluster setup
- Upgrade Go to 1.24.5 in the containerlab-dood devcontainer via the
  devcontainer feature (matches ContainerLab's build and satisfies
  Galactic's go 1.24.0 requirement); remove apt golang-go
- Update lab/README.md to reflect current structure (network/ + gvpc/,
  no containers/)
- Fix lab/gvpc/README.md: add missing control/ and pe/ group_files
  entries; correct overlay target description

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… forwarding

- corrects the gitconfig bind target from /root/.gitconfig to /home/vscode/.gitconfig (matching the non-root user)
- adds otherPortsAttributes to suppress noisy auto-forward prompts.
…fixes

- Add multi-arch detection to containerlab-dood post-create (kubectl, crane)
- Add Node.js devcontainer feature to containerlab-dood for Claude Code install
- Switch galactic base image from ubuntu-22.04 to ubuntu-24.04
- Fix gitconfig bind mount in galactic: mount as .gitconfig.host (readonly) and
  copy on post-create to avoid EBUSY when VS Code writes its credential helper
- Silence port auto-forwarding for metrics/health/webhook ports
- Remove stale GO111MODULE=on and safe.directory git config calls

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Fix iad and sjc overlay GoBGP config: l3vpn-ipv4-unicast → l3vpn-ipv6-unicast
- Switch infra-control-plane FRR to ipv6 vpn address-family; add Null0 static
  route and network advertisement for the SRv6 /48 prefix
- Fix kubectl-wrapper to place --server flag before $@ (flags must precede args)
- Add make test targets: test-bgp-transit, test-bgp-underlay, test-srv6, test-l3vpn

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@0xmc 0xmc requested a review from a team as a code owner May 22, 2026 15:24
@0xmc 0xmc requested a review from mattdjenkinson May 22, 2026 15:24
@cla-assistant
Copy link
Copy Markdown

cla-assistant Bot commented May 22, 2026

CLA assistant check
All committers have signed the CLA.

@cla-assistant
Copy link
Copy Markdown

cla-assistant Bot commented May 22, 2026

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.
You have signed the CLA already but the status is still pending? Let us recheck it.

@privateip privateip self-assigned this May 22, 2026
@privateip
Copy link
Copy Markdown
Contributor

@0xmc can you please rebase your PR?

@privateip
Copy link
Copy Markdown
Contributor

@0xmc i have refactored the repo to move away from Makefile in lieu of Taskfile.yaml. See the README.md for more details. Can you update your PR accordingly? Thanks

@privateip privateip added the needs rebase The PR needs to be rebased against the current main branch label May 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs rebase The PR needs to be rebased against the current main branch

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support for ARM64

2 participants