document.addEventListener("DOMContentLoaded", async function () { // ✅ Immediately check for a real external link before loading Marketo const externalLink = document.querySelector("#link-external"); if (externalLink) { const href = externalLink.getAttribute("href")?.trim(); const isRealExternal = href && href !== "#" && !href.endsWith("#") && href.startsWith("http") && !href.includes(window.location.hostname + "#"); if (isRealExternal) { localStorage.setItem("external-link", href); } else { localStorage.removeItem("external-link"); } } async function loadMarketoScript() { return new Promise(function (resolve, reject) { const script = document.createElement("script"); script.src = "https://app-lon06.marketo.com/js/forms2/js/forms2.min.js"; script.onload = resolve; script.onerror = reject; document.body.appendChild(script); }); } try { await loadMarketoScript(); console.log('Marketo library loaded successfully'); } catch (error) { console.error('Failed to load Marketo library:', error); return; } const formPlaceholders = document.querySelectorAll("[js-marketo-form-id]"); formPlaceholders.forEach(function (el) { MktoForms2.loadForm( "//app-lon06.marketo.com", el.getAttribute("js-marketo-form-munckin-id"), el.getAttribute("js-marketo-form-id") || el.getAttribute("js-marketo-form-id-fallback"), function (form) { var formEl = form.getFormElem()[0]; var fields = formEl.querySelectorAll("input, select, textarea"); fields.forEach(function (field) { if (field.type === "hidden" || field.type === "submit") return; var label = formEl.querySelector("label[for='" + field.id + "']"); if (!label) return; var text = label.textContent.replace("*", "").replace(":", "").trim(); if (!text) return; if ( field.tagName.toLowerCase() === "input" || field.tagName.toLowerCase() === "textarea" ) { field.setAttribute("placeholder", text); } if (field.tagName.toLowerCase() === "select") { var firstOption = field.querySelector("option[value='']"); if (firstOption) { firstOption.textContent = text; } } }); form.onSuccess(function (values, followUpUrl) { const thankYouUrl = el.getAttribute("js-marketo-form-thank-you-url"); const downloadUrl = el.getAttribute("js-marketo-form-download-url"); const videoId = el.getAttribute("js-marketo-form-video-id"); // ✅ Store form-specific data if (videoId) localStorage.setItem("video-id", videoId); if (downloadUrl) localStorage.setItem("download-url", downloadUrl); // ✅ Double-check external link (in case dynamically updated) const linkExternal = document.querySelector("#link-external"); if (linkExternal) { const href = linkExternal.getAttribute("href")?.trim(); const isRealExternal = href && href !== "#" && !href.endsWith("#") && href.startsWith("http") && !href.includes(window.location.hostname + "#"); if (isRealExternal) { localStorage.setItem("external-link", href); } else { localStorage.removeItem("external-link"); } } // ✅ Redirect logic const externalStored = localStorage.getItem("external-link"); const downloadStored = localStorage.getItem("download-url"); let finalUrl = ""; if (externalStored && externalStored.trim() !== "") { finalUrl = externalStored; } else if (downloadStored && downloadStored.trim() !== "") { finalUrl = downloadStored; } if (thankYouUrl) { location.href = `${window.location.origin}${thankYouUrl}`; } else if (finalUrl) { location.href = finalUrl; } else if (followUpUrl) { location.href = followUpUrl; } window.dispatchEvent(new Event(`form-success-${el.getAttribute("js-marketo-form-id")}`)); return false; }); } ); }); });

Ecosystem Integrations

Many leading companies have already deployed tooling to build out a portion of their automated infrastructure operations. Rafay seamlessly drops into existing environments, plugs into existing tools, and immediately automates operations to make Kubernetes workflows easier.

Rafay Centralizes and Enhances your Existing Automation Tools

When you connect the Kubernetes automation tooling of your choice to the Rafay controller, our centralized platform augments these tools with fleetwide lifecycle automation, standardization, drift detection, multitenancy with isolation, and more. This then allows IT to provide developers with self-service workflows, increasing their productivity while preserving stability, efficiency, and consistency across the environment.

Use Rafay’s Built-in Kubernetes Add Ons… or Bring your Own

Modern Kubernetes environments often need addon services that fall outside those provided within the core distribution. Numerous software solutions exist to provide these capabilities, and Rafay can integrate with them. Here are some of the most common we support. As a fully featured automated platform for Kubernetes (cloud-native) and AI workload operations, we also provide many common services out of the box (marked with our logo).

Analytics / Logging

Backup

CI/CD

Container Registry

Cost Management

Identity Management

Ingress

Machine Learning

Networking

Observability

Policy Management

Secrets Management

Security

Storage

Other

The Definitive GPU PaaS Reference Architecture

Understand what it takes to deliver the right GPU infrastructure to your business.