Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
4cc9c87
feat: mirror RHDH dynamic plugin OCI artifacts for airgapped deployments
Fortune-Ndlovu Nov 5, 2025
79acf62
fix shellcheck: SC2064 Warning (Line 356) - Trap Expansion && SC2155 …
Fortune-Ndlovu Nov 5, 2025
6dbb156
Add support for @sha256:digest
Fortune-Ndlovu Nov 5, 2025
ff482f1
Remove splitting and recombining logic
Fortune-Ndlovu Nov 5, 2025
67f1e78
Use mapfile instead to Print each array element on a new line, Sort a…
Fortune-Ndlovu Nov 5, 2025
6ba9282
Support both registry (docker://) and directory (dir://) destinations
Fortune-Ndlovu Nov 5, 2025
5aa3ad2
clean up Examples:
Fortune-Ndlovu Nov 5, 2025
6a611a4
no quotes needed in .txt file, only when mirroring specific plugins b…
Fortune-Ndlovu Nov 5, 2025
f2852a0
Remove jq, base64 as we only need skopeo to mirror the image to the …
Fortune-Ndlovu Nov 5, 2025
40268b7
Remove merge_registry_auth since skopeo automatically discovers crede…
Fortune-Ndlovu Nov 5, 2025
a443762
update summary
Fortune-Ndlovu Nov 5, 2025
e2d0608
Extract all layers to find index.json and pasrse index.json to extrac…
Fortune-Ndlovu Nov 11, 2025
90cffcc
Rebuild and push the catalog index with updated references to the mir…
Fortune-Ndlovu Nov 11, 2025
d58c3da
Generate mirroring summary
Fortune-Ndlovu Nov 11, 2025
093468c
fix shellcheck
Fortune-Ndlovu Nov 11, 2025
a815966
Create one simple txt file
Fortune-Ndlovu Nov 11, 2025
03213cb
Remove buildah fallback and just use podman to rebuild the index
Fortune-Ndlovu Nov 18, 2025
a230327
Ensure that the catalog index rebuild process maintains the extact sa…
Fortune-Ndlovu Nov 18, 2025
04f61c7
Update all packages to include the targeted registry upon rebuild
Fortune-Ndlovu Nov 18, 2025
9b67f93
Update oci version to 1.9
Fortune-Ndlovu Nov 18, 2025
0a00707
Update the txt file across usages
Fortune-Ndlovu Nov 18, 2025
f91eda8
Cleanup generated files
Fortune-Ndlovu Nov 18, 2025
6a30537
Unsure that the .txt file is updated across all options
Fortune-Ndlovu Nov 18, 2025
d2f6818
Ensure that the .txt file is updated across all options
Fortune-Ndlovu Nov 18, 2025
a86aa8a
Update requirements
Fortune-Ndlovu Nov 18, 2025
957af28
Add internal registry examples
Fortune-Ndlovu Nov 19, 2025
cd477ef
Add minimum versions
Fortune-Ndlovu Nov 19, 2025
2d9a5f1
Update Requirements to add specific tools and their minimum versions
Fortune-Ndlovu Nov 19, 2025
95e114c
Add script to gitignore and create minimal doc
Fortune-Ndlovu Nov 24, 2025
e4e299f
Focus on connected and disconnected workflows
Fortune-Ndlovu Nov 24, 2025
07a64ea
Remove redundent procedures
Fortune-Ndlovu Nov 24, 2025
88f832f
Remove list
Fortune-Ndlovu Nov 24, 2025
9ce7c04
Use consistent terminology
Fortune-Ndlovu Nov 25, 2025
2463f32
Convert digest reference to tag format this will allow the modified c…
Fortune-Ndlovu Nov 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,7 @@ rhdh-operator-*.yaml
rhdh-disconnected-install/
rhdh-disconnected-install.Dockerfile

.oc-mirror.log
.oc-mirror.log

# from mirror-plugins.sh script
rhdh-plugin-mirroring-summary.txt
58 changes: 58 additions & 0 deletions .rhdh/docs/mirror-dynamic-plugins.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
== Mirroring Red Hat Developer Hub Dynamic Plugins for Disconnected Environments

Red Hat Developer Hub (RHDH) uses dynamic plugins that are distributed as OCI (Open Container Initiative) artifacts. In disconnected or restricted environments, these plugin artifacts must be mirrored to a registry accessible by your cluster.

This guide explains how to use the link:./../scripts/mirror-plugins.sh[mirror-plugins.sh] script to mirror dynamic plugin OCI artifacts for deployments in restricted environments.

=== Prerequisites

The following tools are required to run the mirroring script:

* `skopeo >= 1.20` - For multi-arch image operations and manifest conversion. See link:https://github.com/containers/skopeo/blob/main/install.md[Installing Skopeo].
* `tar >= 1.35` - GNU tar for extracting image layers.
* `jq >= 1.7` - For JSON parsing and manipulation. See link:https://jqlang.github.io/jq/download/[Download jq].
* `podman >= 5.6` - For building catalog index images. See link:https://podman.io/docs/installation[Podman Installation Instructions].

=== Procedures

[#_mirroring_all_plugins_from_catalog_index]
==== Mirroring all plugins from a catalog index (Partially disconnected environment)

. Authenticate to both the source registry (`podman login quay.io`) and your target registry. For more information, see link:https://access.redhat.com/articles/RegistryAuthentication[Red Hat Container Registry Authentication].

. Run the mirroring script with the catalog index (replace `1.9` with your desired RHDH version):
+
[source,console]
----
bash mirror-plugins.sh \
--plugin-index oci://quay.io/rhdh/plugin-catalog-index:1.9 \
--to-registry registry.example.com
----

[#_fully_disconnected_workflow]
==== Mirroring to a fully disconnected environment

Two-phase process: export plugins to disk from a connected host, transfer to restricted network, then import. Authenticate to registries as needed (`podman login quay.io` for export, `podman login <your-registry>` for import). For more information, see link:https://access.redhat.com/articles/RegistryAuthentication[Red Hat Container Registry Authentication].

*Phase 1: Export plugins (Connected Host)*

Export all plugins to a local directory:

[source,console]
----
bash mirror-plugins.sh \
--plugin-index oci://quay.io/rhdh/plugin-catalog-index:1.9 \
--to-dir /tmp/rhdh-plugins
----

*Phase 2: Import plugins (Restricted Network Environment)*

Import and push the plugins to your internal registry:

[source,console]
----
bash mirror-plugins.sh \
--from-dir /tmp/rhdh-plugins \
--to-registry internal-registry.example.com
----

Loading