refactor: unify images into calicovpp/vpp and flatten repo layout#994
Open
aritrbas wants to merge 1 commit into
Open
refactor: unify images into calicovpp/vpp and flatten repo layout#994aritrbas wants to merge 1 commit into
aritrbas wants to merge 1 commit into
Conversation
274424b to
f6fd812
Compare
8360e7e to
b6dee79
Compare
f1d81e2 to
e50ee99
Compare
sknat
approved these changes
May 19, 2026
sknat
left a comment
Collaborator
There was a problem hiding this comment.
looks neat ! Thanks a bunch for putting this together
cbb3065 to
b1189d7
Compare
df770ed to
25a6098
Compare
This was referenced Jun 2, 2026
25a6098 to
adeb4b5
Compare
This was referenced Jun 15, 2026
adeb4b5 to
3921cc8
Compare
This was referenced Jun 15, 2026
0fdec99 to
2001663
Compare
2001663 to
072611e
Compare
- consolidate calicovpp/agent, calicovpp/vpp, calicovpp/multinet-monitor
and calicovpp/init-eks into a single unified calicovpp/vpp image.
- restructure source directories under pkg/ for cleaner organization.
- move executable entrypoints to top-level cmd/ to allow for building
all golang agents from the top-level Makefile.
- runtime behavior is unchanged - two separate daemons (agent and vpp)
run in separate containers from the same image using command overrides.
Changes:
- unified image: calicovpp/vpp (contains all binaries)
- single env var: CALICO_VPP_IMAGE (replaces CALICO_AGENT_IMAGE,
CALICO_VPP_IMAGE, MULTINET_MONITOR_IMAGE)
- unified dockerfiles: Dockerfile and Dockerfile.debug now contain all
binaries - calico-vpp-agent, felix-api-proxy, gobgp, multinet-monitor,
vpp-manager and init-eks scripts in images/ubuntu/bin/
- top-level Makefile delegates image build through vpp-manager
- vpp-manager Makefile builds all Go binaries into unified image
- image/push targets removed from agent and multinet-monitor Makefile
- manifests updated to calicovpp/vpp with explicit command overrides for
agent and multinet-monitor containers
- path references in test/ and docs/ updated for pkg/ move
- image contexts moved to top-level images/
- helper scripts moved to top-level scripts/
- VPP clone/build directory relocated to top-level vpp_build
Changes for VPP kube-test integration:
CalicoVPP now owns the kube-test manifest as a set of kustomize sources
so VPP kube-test (and any other consumer) does not need to know which
image to use, where the VPP build lives in this repo or any other
CalicoVPP-internal layout detail.
- yaml/components/kube-test/ - kustomize coimponent shared by the kind
and baremetal flavors. Defines the kube-test daemonset patch, the
kube-test configmap defaults and the tigera-operator snippet.
- yaml/components/kube-test/kind/ - KinD-flavor adjustments
(uplink eth0 via af_packet, no hugepages).
- yaml/components/kube-test/baremetal/ - baremetal-flavor adjustments
(DPDK uplink driven by ${CALICOVPP_INTERFACE}, hugepages, larger
CPU/buffer allocation, docker.io registry, IfNotPresent pull policy).
- yaml/overlays/kube-test-{kind,baremetal}/ - overlays wiring the
base daemonset and the kube-test components together.
- yaml/generated/calico-vpp-kubetest.yaml - regenerated from the
kind overlay; consumers see only the runtime placeholders
${CALICOVPP_VERSION}, ${HOME}, ${ADDITIONAL_VPP_CONFIG},
${CALICOVPP_ENABLE_MEMIF}, ${CALICO_NETWORK_CONFIG} and
${CALICOVPP_INTERFACE} (baremetal only).
- yaml/Makefile - regenerates the checked-in kubetest yaml for kind
and sanity-checks the baremetal overlay.
Top-level Makefile targets (the public API consumed by VPP kube-test):
- make vpp - delegates to pkg/vpp-manager with VPP_DIR/BASE pass-through;
consumers no longer need to know where VPP build sources live.
- make kube-test-template FLAVOR={kind,baremetal}
- runs `kubectl kustomize` on the requested overlay and appends
the tigera Installation/APIServer snippet (the snippet contains
the ${CALICO_NETWORK_CONFIG} placeholder, so it is not a
kustomize resource and is concatenated verbatim post-build).
- make kube-test-push-images
- pulls/tags/pushes each image in $KUBE_TEST_IMAGES (default:
calicovpp/vpp) into the local kind registry. Older split-image
release branches backport this target with ${KUBE_TEST_IMAGES}
as calicovpp/vpp calicovpp/agent calicovpp/multinet-monitor.
Images that remain separate: calicovpp/vclsidecar, calicovpp/ctl
Directory Restructure:
├── cmd
│ ├── api-proxy
│ ├── calico-vpp-agent
│ ├── calicovppctl
│ ├── multinet-monitor
│ ├── replay-trace
│ └── vpp-manager
├── common.mk
├── docs
├── images
├── Makefile
├── pkg
│ ├── calico-vpp-agent
│ ├── config
│ ├── multinet-monitor
│ ├── vpplink
│ └── vpp-manager
├── scripts
├── test
├── vpp_build
└── yaml
Benefits:
- Single image tag to manage across all dataplane components
- Reduced bandwidth and storage requirements
- No risk of image version drift between components
- Simplified CI/CD pipeline
- Easier version management and releases
Signed-off-by: Aritra Basu <aritrbas+gh@cisco.com>
072611e to
4b2333d
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary:
This PR does two related things on the path to CalicoVPP
release/v3.33.0:calicovpp/agent,calicovpp/vpp,calicovpp/multinet-monitorandcalicovpp/init-eksinto a singlecalicovpp/vppimage and moves libraries underpkg/with entrypoints undercmd/.kustomize-based VPPkube-testintegration - CalicoVPP now owns the VPPkube-testmanifest and exposes a smallMakefileAPI so VPPkube-test(and other consumers) no longer need to know CalicoVPP internal layout details (image names, in-repo VPP build paths, etc.).Runtime behavior is unchanged - the agent and VPP still run as separate containers; the
agentcontainer reusescalicovpp/vppwith an explicitcommand: ["/bin/calico-vpp-agent"]override.Changes:
calicovpp/vpp(contains all dataplane binaries)CALICO_VPP_IMAGE(replacesCALICO_AGENT_IMAGE,CALICO_VPP_IMAGE,MULTINET_MONITOR_IMAGE)calicovpp/vclsidecarandcalicovpp/ctlremain separate imagesimages/ubuntu/Dockerfile,Dockerfile.debug) ship all binaries:calico-vpp-agent,felix-api-proxy,gobgp,multinet-monitor,vpp-managerandinit-eksscripts underimages/ubuntu/bin/Makefiledelegates image build throughpkg/vpp-managerpkg/vpp-manager/Makefilebuilds all Go binaries into the unified imageimage/pushtargets removed fromagentandmultinet-monitorMakefilescalicovpp/vppwith explicit command overrides foragentandmultinet-monitorcontainerstest/anddocs/updated forpkg/moveimages/scripts/vpp_build/Directory Restructure:
├── cmd
│ ├── api-proxy
│ ├── calico-vpp-agent
│ ├── calicovppctl
│ ├── multinet-monitor
│ ├── replay-trace
│ └── vpp-manager
├── common.mk
├── docs
├── images
├── Makefile
├── pkg
│ ├── calico-vpp-agent
│ ├── config
│ ├── multinet-monitor
│ ├── vpplink
│ └── vpp-manager
├── scripts
├── test
├── vpp_build
└── yaml
VPP
kube-testintegration:CalicoVPP now owns the
kube-testmanifest askustomizesources underyaml/components/kube-test/andyaml/overlays/kube-test-{kind,baremetal}/. Layout-specific values (unified image name, agent command override, VPP build pathvpp_build/, registry/pull-policy) are baked into the component patches.Only consumer-owned runtime placeholders survive in the emitted manifest:
${CALICOVPP_VERSION}kt-master,v3.32.0, …)${HOME}${ADDITIONAL_VPP_CONFIG}${CALICOVPP_ENABLE_MEMIF}${CALICO_NETWORK_CONFIG}${CALICOVPP_INTERFACE}kustomizelayout:yaml/components/kube-test/— sharedkube-testcomponent (daemonset patch, configmap defaults, tigera-operator snippet)yaml/components/kube-test/kind/—kindadjustments (eth0,af_packet, no hugepages)yaml/components/kube-test/baremetal/—baremetaladjustments (DPDK uplink, hugepages, larger CPU/buffer pool,docker.ioregistry)yaml/overlays/kube-test-{kind,baremetal}/— wires the base daemonset and thekube-testcomponents.yaml/generated/calico-vpp-kubetest.yaml— checked-inkindflavor output;baremetalis built on demandyaml/Makefile— regenerates thekindkubetest yaml and sanity-checks thebaremetaloverlayThe tigera-operator
Installation/APIServerCRs are notkustomizeresources (they embed${CALICO_NETWORK_CONFIG}, which is invalid YAML untilenvsubstruns). They are appended verbatim bymake kube-test-templatefromyaml/components/kube-test/tigera-installation.snippet.yaml.Makefile API (consumed by VPP
kube-test)make vpp [VPP_DIR=…] [BASE=…]pkg/vpp-managermake kube-test-template FLAVOR={kind,baremetal}kube-testmanifestmake kube-test-push-images CALICOVPP_VERSION=…kindregistryKUBE_TEST_IMAGESdefaults tocalicovpp/vppon this branch (unified layout). Older split-image release branches backport this with default valuecalicovpp/vpp calicovpp/agent calicovpp/multinet-monitor.Benefits:
CalicoVPP(layout owner) andVPP kube-test(consumer of genericMakefile).kindandbaremetalkube-testflavors supported from the samekustomizebase.VPP
kube-testPR:calicovpp-deploymentsPR: