End-to-end OpenShift cluster creation using Red Hat Assisted Installer. Handles Single-Node OpenShift (SNO) and HA multi-node clusters on baremetal, vsphere, oci, nutanix. Use when: - "Create a new OpenShift cluster" - "Install OpenShift on my servers" - "Set up a single-node cluster for edge deployment" - "Deploy a production HA cluster" Complete workflow: cluster definition, ISO generation, host discovery/validation, role assignment, network configuration (VIPs, static networking), installation monitoring, credential retrieval. NOT for: - Listing existing clusters → Use `/cluster-inventory` skill - Modifying running clusters → Out of scope (Day-2 operations require direct cluster access) - Cluster upgrades (not yet supported)
70
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
MCP-First Approach: This skill uses MCP tools from openshift-self-managed server. MCP tools have absolute priority.
CLI Tools Policy:
oc, kubectl) may be attempted if no MCP alternative existsRequired MCP Servers: openshift-self-managed
MCP Server Architecture:
This skill uses openshift-self-managed MCP server exclusively. This server connects to Red Hat Assisted Installer API to create self-managed OpenShift clusters.
| MCP Server | Used By This Skill? | Cluster Types | API Backend |
|---|---|---|---|
openshift-self-managed | ✅ YES | OCP, SNO | Assisted Installer API (/api/assisted-install/v2) |
openshift-ocm-managed | ❌ NO | ROSA, ARO, OSD | OCM API (/api/clusters_mgmt/v1) |
Required MCP Tools (all from openshift-self-managed):
list_versions, create_cluster, cluster_info, set_cluster_vips, set_host_role, cluster_iso_download_url, install_cluster, cluster_credentials_download_url, cluster_logs_download_url, list_static_network_config, generate_nmstate_yaml, validate_nmstate_yaml, alter_static_network_config_nmstate_for_host
Environment Variables: OFFLINE_TOKEN (obtain here)
Cluster Types Supported:
NOT Supported by This Skill (different APIs, different workflows):
openshift-ocm-managed MCP serveropenshift-ocm-managed MCP serveropenshift-ocm-managed MCP serverVerification:
openshift-self-managed in mcps.jsonOFFLINE_TOKEN set: test -n "$OFFLINE_TOKEN"list_versions to verify MCP server responsiveOn Failure: Stop immediately, display setup instructions, ask "How to proceed? (setup/skip/abort)", wait for user input.
Security: Never expose credential values in output.
Use when:
Do NOT use when:
/cluster-inventory skill/cluster-inventory skillEnd-to-end cluster creation with interactive guidance and validation.
Create tasks in logical order:
TaskCreate(subject: "#1 Verify prerequisites", description: "Check MCP servers, OFFLINE_TOKEN")
TaskCreate(subject: "#2 Gather cluster requirements", description: "Type, platform, version, name, domain, arch, SSH, hardware")
TaskCreate(subject: "#3 Configure networking", description: "CIDRs, VIPs, static IPs")
TaskCreate(subject: "#4 Review and confirm", description: "Display summary, get approval")
TaskCreate(subject: "#5 Create cluster definition", description: "Create in Assisted Installer")
TaskCreate(subject: "#6 Apply platform config", description: "VIPs, static configs")
TaskCreate(subject: "#7 Generate cluster ISO", description: "Generate ISO URL")
TaskCreate(subject: "#8 Discover and assign hosts", description: "Check discovery, roles")
TaskCreate(subject: "#9 Validate readiness", description: "Verify cluster ready")
TaskCreate(subject: "#10 Start installation", description: "Confirm, trigger install")
TaskCreate(subject: "#11 Monitor installation", description: "Track progress")
TaskCreate(subject: "#12 Retrieve credentials", description: "Download kubeconfig")During execution: Update task status to "in_progress" when starting, "completed" when done.
TaskUpdate: Mark task #1 as in_progress
Prerequisites Check: Execute verification from Prerequisites section.
On Failure: If prerequisites fail, consult troubleshooting.md for common setup issues, then stop and report error to user.
Context: This skill creates SELF-MANAGED clusters (OCP, SNO) via Assisted Installer. NOT for ROSA/ARO/OSD (use cluster-inventory for those).
Use AskUserQuestion to collect configuration:
list_versions, show "Full Support" versionsCreate folder: /tmp/{cluster_name}.{base_domain}/ (permissions 700), display location
Store all values for subsequent steps.
Ask: "How to configure networking?" Options: 1) Default (auto CIDRs, DHCP, HA: ask VIPs) | 2) Custom CIDRs (ask each, validate) | 3) Static IPs (Simple/Advanced/Manual modes, use generate_nmstate_yaml) | 4) Describe requirements (AI infers from text like "192.168.1.0/24, 100 pods")
Reference: Networking Guide has detailed examples for all 4 options
Display summary: Cluster Name, Type (SNO/HA), Version, Platform, Architecture, Domain, VIPs (if applicable), Networking (DHCP/Static)
Reference: Examples
CRITICAL CHECKPOINT
Ask: "Review configuration. Ready to create cluster definition?"
Options:
Tool: create_cluster
Parameters: {name, version, base_domain, single_node, platform, cpu_architecture, ssh_public_key}
Output: Cluster UUID (cluster_id) - CRITICAL for all subsequent operations
Save metadata to /tmp/{cluster_name}.{base_domain}/cluster-info.json: cluster_id, cluster_name, base_domain, openshift_version, cluster_type, platform, cpu_architecture, created_at, api_url, console_url
Error Handling: Display error, allow retry/abort if duplicate name or invalid parameters.
7a. Set VIPs (HA + baremetal/vsphere/nutanix only):
set_cluster_vips{cluster_id, api_vip, ingress_vip}7b. Apply Static Network (if configured):
alter_static_network_config_nmstate_for_host{cluster_id, nmstate_yaml, mac_address}list_static_network_configReference: Providers, Networking
Tool: cluster_iso_download_url, Parameters: {cluster_id}
Save URL: /tmp/{cluster_name}.{base_domain}/iso-download-url.txt
Download ISO: Read the saved URL and download with safety flags:
iso_url="$(cat /tmp/{cluster_name}.{base_domain}/iso-download-url.txt)"
case "$iso_url" in
https://*.openshiftapps.com/* | \
https://api.openshift.com/* | \
https://mirror.openshift.com/* )
: ;;
*)
echo "ERROR: ISO URL domain not in allowlist: $iso_url" >&2
exit 1
;;
esac
curl --fail --proto "=https" --tlsv1.2 -L -# \
-o /tmp/{cluster_name}.{base_domain}/discovery.iso \
-- "$iso_url"Verify download: Check file exists and size > 0
Display: ISO ready at /tmp/{cluster_name}.{base_domain}/discovery.iso. Boot {expected_host_count} server(s) from this ISO, wait 5-10 min, say "check for hosts". Static configs applied in boot order.
Display: "Waiting for you to boot hosts. When ready, say 'check for hosts'."
Wait for user trigger - No automatic polling.
Tool: cluster_info
Parameters: {cluster_id}
Parse: Extract hosts array, count discovered hosts
Display: Table with Host #, Hostname, CPU, RAM, Disk, Status
Validation:
If insufficient: Ask to wait/proceed/abort.
Reference: Host Requirements
SNO: Single host auto-assigned "master"
HA:
Tool: set_host_role (for each host)
Parameters: {cluster_id, host_id, role}
Tool: cluster_info
Check: Cluster status should be "ready"
If validation fails:
CRITICAL CHECKPOINT
Display:
Ready to Start Installation
Cluster: {cluster_name}
Hosts: {count}
Expected Duration: 45-60 minutes
WARNING: Starting installation is irreversible!
Cannot pause or cancel once started.Ask: "Start installation now?"
Options:
Tool: install_cluster
Parameters: {cluster_id}
On Success: Display "Installation started!"
On Error:
Display:
Installation Phases:
1. Preparing
2. Installing (bootstrapping)
3. Installing control plane
4. Finalizing
5. Completed
How to monitor:
- Say "check status" anytime
- Or use background monitoring
Background monitoring? (yes/no)If background: Use Task tool with run_in_background=true
If manual: Wait for "check status", then call cluster_info, display progress, repeat until "installed" or "error"
If installation fails:
cluster_logs_download_url) for detailed diagnosisDisplay: "Installation Completed! Cluster: {cluster_name}, Status: installed, Time: {duration}"
Document Consultation (REQUIRED):
Execute: Follow download procedure to save kubeconfig and kubeadmin-password to /tmp/{cluster_name}.{base_domain}/ (permissions 600)
Display:
✅ Credentials downloaded to /tmp/{cluster_name}.{base_domain}/
- kubeconfig (600)
- kubeadmin-password (600)
To use cluster:
export KUBECONFIG=/tmp/{cluster_name}.{base_domain}/kubeconfigSecurity: Credentials provide full admin access. Never expose presigned URLs.
Display:
🎉 OpenShift Cluster Ready!
Cluster: {cluster_name}.{base_domain}
API: https://api.{cluster_name}.{base_domain}:6443
Console: https://console-openshift-console.apps.{cluster_name}.{base_domain}
📁 Artifacts: /tmp/{cluster_name}.{base_domain}/
(kubeconfig, kubeadmin-password, ssh-key, discovery.iso, iso-download-url.txt, cluster-info.json)
Next Steps:
- Verify via MCP: export KUBECONFIG=/tmp/{cluster_name}.{base_domain}/kubeconfig
MCP Tool: resources_list (Parameters: {kind: "Node"})
- Alternative (CLI, unlikely available): oc --kubeconfig <path> get nodes
- SSH to nodes (if key configured): ssh -i /tmp/{cluster_name}.{base_domain}/ssh-key core@<node-ip>
- Web console: kubeadmin + password from /tmp/{cluster_name}.{base_domain}/kubeadmin-password
- Configure identity provider (idp.md), RBAC (rbac.md)
- Install operators and applications
Congratulations!Ask: "Archive cluster folder to permanent storage? (yes/no)"
If yes: Ask destination (default: ~/.kube/clusters/), copy folder with cp -r, set permissions 700, display confirmation
Reference: Credentials Management
openshift-self-managed - Red Hat Assisted Installer service for self-managed clustersImportant: This skill uses ONLY openshift-self-managed MCP server. Do NOT use openshift-ocm-managed (that server is for ROSA/ARO/OSD managed service clusters, not for OCP/SNO self-managed clusters).
All tools from openshift-self-managed MCP server:
list_versions, create_cluster, cluster_info, set_cluster_vips, set_host_rolecluster_iso_download_url, install_cluster, cluster_credentials_download_url, cluster_logs_download_urllist_static_network_config, generate_nmstate_yaml, validate_nmstate_yaml, alter_static_network_config_nmstate_for_host/cluster-inventory - List and inspect all cluster types (uses both MCP servers)Configuration & Validation:
Platform & Infrastructure:
Post-Installation:
Complete Documentation Guide:
This skill performs critical, irreversible operations requiring explicit user confirmation:
Never Assume Approval - Always wait for explicit confirmation.
User: "Create a single-node OpenShift cluster for my edge location."
Result: SNO deployed in ~45 min. All artifacts in /tmp/edge-site-01.edge.local/: kubeconfig, kubeadmin-password, SSH keys, discovery.iso, ISO URL, metadata
More Examples: See examples.md for HA, static networking, multi-cluster, and air-gapped configurations.
e46c4fa
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.