diff --git a/bindata/assets/deployments/downloads-deployment.yaml b/bindata/assets/deployments/downloads-deployment.yaml
index 428865a65f..7849f05b62 100644
--- a/bindata/assets/deployments/downloads-deployment.yaml
+++ b/bindata/assets/deployments/downloads-deployment.yaml
@@ -126,26 +126,53 @@ spec:
for arch, operating_system, path in [
('amd64', 'linux', '/usr/share/openshift/linux_amd64/oc'),
+ ('amd64', 'linux', '/usr/share/openshift/linux_amd64/oc.rhel8'),
+ ('amd64', 'linux', '/usr/share/openshift/linux_amd64/oc.rhel9'),
('amd64', 'mac', '/usr/share/openshift/mac/oc'),
('amd64', 'windows', '/usr/share/openshift/windows/oc.exe'),
('arm64', 'linux', '/usr/share/openshift/linux_arm64/oc'),
+ ('arm64', 'linux', '/usr/share/openshift/linux_arm64/oc.rhel8'),
+ ('arm64', 'linux', '/usr/share/openshift/linux_arm64/oc.rhel9'),
('arm64', 'mac', '/usr/share/openshift/mac_arm64/oc'),
('ppc64le', 'linux', '/usr/share/openshift/linux_ppc64le/oc'),
+ ('ppc64le', 'linux', '/usr/share/openshift/linux_ppc64le/oc.rhel8'),
+ ('ppc64le', 'linux', '/usr/share/openshift/linux_ppc64le/oc.rhel9'),
('s390x', 'linux', '/usr/share/openshift/linux_s390x/oc'),
+ ('s390x', 'linux', '/usr/share/openshift/linux_s390x/oc.rhel8'),
+ ('s390x', 'linux', '/usr/share/openshift/linux_s390x/oc.rhel9'),
]:
- basename = os.path.basename(path)
- target_path = os.path.join(arch, operating_system, basename)
- os.mkdir(os.path.join(arch, operating_system))
- os.symlink(path, target_path)
- base_root, _ = os.path.splitext(basename)
- archive_path_root = os.path.join(arch, operating_system, base_root)
- with tarfile.open('{}.tar'.format(archive_path_root), 'w') as tar:
- tar.add(path, basename)
- with zipfile.ZipFile('{}.zip'.format(archive_path_root), 'w') as zip:
- zip.write(path, basename)
- content.append(
- 'oc ({1} {2}) (tar zip)'.format(
- target_path, arch, operating_system, archive_path_root
+ try:
+ print(' Processing {} {} ({})...'.format(arch, operating_system, path), flush=True)
+
+ # Check if source file exists
+ if not os.path.exists(path):
+ print(' WARNING: {} does not exist, skipping'.format(path), flush=True)
+ continue
+
+ file_size = os.path.getsize(path)
+ print(' Source file size: {} MB'.format(file_size // (1024*1024)), flush=True)
+
+ basename = os.path.basename(path)
+ target_path = os.path.join(arch, operating_system, basename)
+
+ print(' Creating directory...', flush=True)
+ os.makedirs(os.path.join(arch, operating_system), exist_ok=True)
+
+ print(' Creating symlink...', flush=True)
+ os.symlink(path, target_path)
+
+ # Only strip .exe extension, keep everything else (e.g., oc.rhel8 stays oc.rhel8)
+ if basename.endswith('.exe'):
+ base_root = basename[:-4]
+ else:
+ base_root = basename
+ archive_path_root = os.path.join(arch, operating_system, base_root)
+
+ # Start background thread to create archives
+ archive_thread = threading.Thread(
+ target=create_archives_async,
+ args=(arch, operating_system, path, basename, archive_path_root),
+ daemon=True
)
)
diff --git a/pkg/console/controllers/clidownloads/controller.go b/pkg/console/controllers/clidownloads/controller.go
index f38f97112d..330d6cce85 100644
--- a/pkg/console/controllers/clidownloads/controller.go
+++ b/pkg/console/controllers/clidownloads/controller.go
@@ -184,12 +184,20 @@ func PlatformBasedOCConsoleCLIDownloads(host, cliDownloadsName string) *v1.Conso
archType string
}{
{"Linux for x86_64", "amd64/linux", "oc.tar"},
+ {"Linux for x86_64 - RHEL 8", "amd64/linux", "oc.rhel8.tar"},
+ {"Linux for x86_64 - RHEL 9", "amd64/linux", "oc.rhel9.tar"},
{"Mac for x86_64", "amd64/mac", "oc.zip"},
{"Windows for x86_64", "amd64/windows", "oc.zip"},
{"Linux for ARM 64", "arm64/linux", "oc.tar"},
+ {"Linux for ARM 64 - RHEL 8", "arm64/linux", "oc.rhel8.tar"},
+ {"Linux for ARM 64 - RHEL 9", "arm64/linux", "oc.rhel9.tar"},
{"Mac for ARM 64", "arm64/mac", "oc.zip"},
{"Linux for IBM Power, little endian", "ppc64le/linux", "oc.tar"},
+ {"Linux for IBM Power, little endian - RHEL 8", "ppc64le/linux", "oc.rhel8.tar"},
+ {"Linux for IBM Power, little endian - RHEL 9", "ppc64le/linux", "oc.rhel9.tar"},
{"Linux for IBM Z", "s390x/linux", "oc.tar"},
+ {"Linux for IBM Z - RHEL 8", "s390x/linux", "oc.rhel8.tar"},
+ {"Linux for IBM Z - RHEL 9", "s390x/linux", "oc.rhel9.tar"},
}
links := []v1.CLIDownloadLink{}
@@ -212,7 +220,7 @@ func PlatformBasedOCConsoleCLIDownloads(host, cliDownloadsName string) *v1.Conso
Spec: v1.ConsoleCLIDownloadSpec{
Description: `With the OpenShift command line interface, you can create applications and manage OpenShift projects from a terminal.
-The oc binary offers the same capabilities as the kubectl binary, but it is further extended to natively support OpenShift Container Platform features.
+The oc binary offers the same capabilities as the kubectl binary, but it is further extended to natively support OpenShift Container Platform features. You can download oc using the following links.
`,
DisplayName: "oc - OpenShift Command Line Interface (CLI)",
Links: links,
diff --git a/pkg/console/controllers/clidownloads/controller_test.go b/pkg/console/controllers/clidownloads/controller_test.go
index b67751aba3..d2f85631f4 100644
--- a/pkg/console/controllers/clidownloads/controller_test.go
+++ b/pkg/console/controllers/clidownloads/controller_test.go
@@ -116,7 +116,7 @@ func TestPlatformBasedOCConsoleCLIDownloads(t *testing.T) {
Spec: v1.ConsoleCLIDownloadSpec{
Description: `With the OpenShift command line interface, you can create applications and manage OpenShift projects from a terminal.
-The oc binary offers the same capabilities as the kubectl binary, but it is further extended to natively support OpenShift Container Platform features.
+The oc binary offers the same capabilities as the kubectl binary, but it is further extended to natively support OpenShift Container Platform features. You can download oc using the following links.
`,
DisplayName: "oc - OpenShift Command Line Interface (CLI)",
Links: []v1.CLIDownloadLink{
@@ -124,6 +124,14 @@ The oc binary offers the same capabilities as the kubectl binary, but it is furt
Href: "https://www.example.com/amd64/linux/oc.tar",
Text: "Download oc for Linux for x86_64",
},
+ {
+ Href: "https://www.example.com/amd64/linux/oc.rhel8.tar",
+ Text: "Download oc for Linux for x86_64 - RHEL 8",
+ },
+ {
+ Href: "https://www.example.com/amd64/linux/oc.rhel9.tar",
+ Text: "Download oc for Linux for x86_64 - RHEL 9",
+ },
{
Href: "https://www.example.com/amd64/mac/oc.zip",
Text: "Download oc for Mac for x86_64",
@@ -136,6 +144,14 @@ The oc binary offers the same capabilities as the kubectl binary, but it is furt
Href: "https://www.example.com/arm64/linux/oc.tar",
Text: "Download oc for Linux for ARM 64",
},
+ {
+ Href: "https://www.example.com/arm64/linux/oc.rhel8.tar",
+ Text: "Download oc for Linux for ARM 64 - RHEL 8",
+ },
+ {
+ Href: "https://www.example.com/arm64/linux/oc.rhel9.tar",
+ Text: "Download oc for Linux for ARM 64 - RHEL 9",
+ },
{
Href: "https://www.example.com/arm64/mac/oc.zip",
Text: "Download oc for Mac for ARM 64",
@@ -144,10 +160,26 @@ The oc binary offers the same capabilities as the kubectl binary, but it is furt
Href: "https://www.example.com/ppc64le/linux/oc.tar",
Text: "Download oc for Linux for IBM Power, little endian",
},
+ {
+ Href: "https://www.example.com/ppc64le/linux/oc.rhel8.tar",
+ Text: "Download oc for Linux for IBM Power, little endian - RHEL 8",
+ },
+ {
+ Href: "https://www.example.com/ppc64le/linux/oc.rhel9.tar",
+ Text: "Download oc for Linux for IBM Power, little endian - RHEL 9",
+ },
{
Href: "https://www.example.com/s390x/linux/oc.tar",
Text: "Download oc for Linux for IBM Z",
},
+ {
+ Href: "https://www.example.com/s390x/linux/oc.rhel8.tar",
+ Text: "Download oc for Linux for IBM Z - RHEL 8",
+ },
+ {
+ Href: "https://www.example.com/s390x/linux/oc.rhel9.tar",
+ Text: "Download oc for Linux for IBM Z - RHEL 9",
+ },
{
Href: "https://www.example.com/oc-license",
Text: "LICENSE",
diff --git a/test/e2e/downloads_test.go b/test/e2e/downloads_test.go
index 78e30d0aea..58de453e91 100644
--- a/test/e2e/downloads_test.go
+++ b/test/e2e/downloads_test.go
@@ -42,6 +42,7 @@ func TestDownloadsEndpoint(t *testing.T) {
req := getRequest(t, link.Href)
client := getInsecureClient()
resp, err := client.Do(req)
+ t.Logf("Requesting %s at %s...", link.Text, link.Href)
if err != nil {
t.Fatalf("http error getting %s at %s: %s", link.Text, link.Href, err)
@@ -50,6 +51,6 @@ func TestDownloadsEndpoint(t *testing.T) {
t.Fatalf("http error for %s at %s: %d %s", link.Text, link.Href, resp.StatusCode, http.StatusText(resp.StatusCode))
}
resp.Body.Close()
- t.Logf("%s %s\n", link.Text, resp.Status)
+ t.Logf("%s %s...", link.Text, resp.Status)
}
}