Skip to content

Cld2labs/airgap#100

Open
HarikaDev296 wants to merge 15 commits into
opea-project:mainfrom
cld2labs:cld2labs/airgap
Open

Cld2labs/airgap#100
HarikaDev296 wants to merge 15 commits into
opea-project:mainfrom
cld2labs:cld2labs/airgap

Conversation

@HarikaDev296
Copy link
Copy Markdown
Contributor

No description provided.

Harika and others added 15 commits April 24, 2026 11:42
Enables full EI stack deployment (Kubernetes + LLM serving + GenAI Gateway)
on internet-blocked machines by routing all dependencies through a local
JFrog Artifactory instance.

Changes:
- Add airgap_enabled / jfrog_url / jfrog_username / jfrog_password vars
- Dual-task pattern in all playbooks (internet vs JFrog path)
- setup-env.sh: pip, kubespray, ansible collections, apt from JFrog
- prereq-check.sh: connectivity check against JFrog ping endpoint
- offline.yml: Kubespray binary URLs redirected to JFrog
- containerd mirror config for all 5 registries via JFrog
- Kubespray hosts.toml.j2 patched to not write skip_verify unless true
- inference-tools role: helm, pip, jq installs all JFrog-aware
- nri_cpu_balloons role: helm repo and airgap vars wired up
- JFrog setup script + README for offline bundle preparation
- Air-gap troubleshooting and deployment documentation

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove step 3i (Meta-Llama-3.1-8B-Instruct)
- Renumber Llama-3.2-3B-Instruct as step 3i
- Add step 3j for Qwen/Qwen3.5-0.8B
- Add step 3k for Qwen/Qwen3.5-4B

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace Llama-3.1-8B with Qwen3.5-0.8B and Qwen3.5-4B
- Update HuggingFace credentials section with model table
- Update disk space requirement note
- Update --hf-token flag description and step-by-step table

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Rename Qwen3.5-0.8B -> Qwen3-0.6B and Qwen3.5-4B -> Qwen3-4B throughout
  (script, README, step headers, HuggingFace repo IDs, JFrog folder names)
- Fix SKIP_STEPS loop in should_run: drop erroneous `:-` default expansion
  that caused an empty-string iteration when no steps were skipped

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

apt-get install --download-only --reinstall can use apt's in-memory package
state and skip the network fetch entirely for already-installed packages like
python3-pip, so JFrog never caches the .deb. apt-get download always fetches
from the configured sources regardless of install state, reliably triggering
the JFrog remote proxy to cache the package.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
grep returns rc=1 when it finds no matches, which Ansible treats as
a task failure. Allow rc=0 (matches found) and rc=1 (no matches) as
both valid; only fail on real errors like helm not being available.

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

all.yml is copied for every deployment (airgap and non-airgap). Having
containerd_registries_mirrors with JFROG_HOST placeholders in all.yml
causes non-airgap deployments to fail — containerd tries to resolve
the literal string JFROG_HOST as a DNS name and image pulls fail.

offline.yml is only copied when airgap_enabled=yes, and setup-env.sh
substitutes JFROG_HOST with the real JFrog IP before Kubespray runs.
Moving mirrors, calico_version, and coredns_version there ensures:
- airgap=no: no registry mirrors configured, internet pulls work
- airgap=yes: mirrors point to JFrog with real IP substituted

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
If the system still has internet connectivity while airgap mode is
enabled, Docker images not cached in JFrog may silently fall through
to the internet, breaking the airgap guarantee. Detect this condition
early and exit with a clear message directing the user to disable
internet access before proceeding.

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

- Clarify VM2 network requirement: internet must be disabled before running
  EI with airgap_enabled=yes; deployment now exits with an error if not
- Update step 3f description to reflect apt-get download fix for reliable
  python3-pip caching in JFrog
- Add troubleshooting entry for the internet connectivity exit with
  instructions on how to disable internet access on VM2

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Clearly document which models have been tested and validated end-to-end
in airgap mode: Llama-3.2-3B-Instruct, Qwen3-0.6B, Qwen3-1.7B, and
Qwen3-4B. Includes a note that other models are not supported without
manual JFrog uploads and have not been validated.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
JFrog's bundled installer expects db5.3-util to be present on the system
but the package was missing from our prerequisites list, causing install.sh
to fail when trying to install it from the bundled .deb.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant