Skip to main content Home Creators nvidia-omniverse streaming-self-hosted eks-validate
eks-validate Generate a validation script for an AWS KAS/NVCF EKS foundation. Checks AWS account identity, VPC/subnets, EKS state and OIDC, node group composition, ECR pull permissions, optional S3 RBAC/probe, GPU Operator readiness, GPU resources, and an ephemeral CUDA smoke pod.
Jump to install Skills Marketplace Discover and explore AI skills built by the community.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Copy promptShow prompt details A direct command skips the review prompt. Inspect the source before running it.
npx skills add https://github.com/NVIDIA-Omniverse/streaming-self-hosted --skill eks-validateThe command stays on one line. Scroll horizontally to inspect it before copying.
Prefer a local copy? Download the files currently available to SkillsMP.
Download Zip Downloading... name eks-validate description Generate a validation script for an AWS KAS/NVCF EKS foundation. Checks AWS account identity, VPC/subnets, EKS state and OIDC, node group composition, ECR pull permissions, optional S3 RBAC/probe, GPU Operator readiness, GPU resources, and an ephemeral CUDA smoke pod. version 1.1.0 author NVIDIA Omniverse Streaming tags ["aws","eks","validation","gpu"] tools ["Shell","Read","Write"]
EKS Foundation Validation
What This Skill Produces
Generate generated/<cluster-name>-validate.sh, a validation script that emits
PASS/WARN/FAIL lines and writes generated/<cluster-name>-validate-report.json.
The report shape intentionally matches the Azure aks-validate style:
{
"cluster" : "eks-nvcf-validation-usw2" ,
"timestamp" : "2026-05-27T12:34:56Z" ,
"summary" : { "pass" : 8 , "warn" : 1 , "fail" : 0 } ,
"checks" : [
{ "id" : "account" , "status" : "PASS" , "detail" : "active account matches 123456789012 in us-west-2" } ,
{ "id" : "vpc" , "status" : "PASS" , "detail" : "VPC vpc-abc 10.10.0.0/16; subnets: subnet-a, subnet-b, subnet-c" } ,
{ "id" : "eks" , "status" : "PASS" , "detail" : "ACTIVE; v1.30; OIDC enabled" } ,
{ "id" : "nodes" , "status" : "PASS" , "detail" : "system=1, compute=1, gpu=1 (g6.12xlarge, us-west-2a)" } ,
{ "id" : "ecr-pull" , "status" : "PASS" , "detail" : "ECR read allowed for node role(s)" } ,
{ "id" : "s3-rbac" , "status" : "WARN" , "detail" : "Skipped (no S3_BUCKET_NAME)" } ,
{ "id" : "gpu-op" , "status" : "PASS" , "detail" : "9/9 pods Ready; chart v25.3.1" } ,
{ "id" : "gpu-resource" , "status" : "PASS" , "detail" : "1 node advertises nvidia.com/gpu=4" } ,
{ "id" : "cuda-smoke" , "status" : "PASS" , "detail" : "nvidia-smi pod returned 0; L40S detected" } ,
{ "id" : "s3-probe" , "status" : "WARN" , "detail" : "Skipped (no S3_PROBE_SERVICE_ACCOUNT)" }
]
}
Inputs
Required:
Input Notes CLUSTER_NAMEEKS cluster name and kubeconfig context. AWS_REGIONTarget AWS region.
Optional:
Input Default Notes AWS_ACCOUNT_IDunset If set, active caller account must match. ECR_REPOSITORY_PREFIX${CLUSTER_NAME}Prefix used by ecr and ecr-mirror. GPU_OPERATOR_VERSIONunset If set, checked against Helm metadata when available. CUDA_IMAGEnvidia/cuda:12.4.0-base-ubuntu22.04Image for smoke test. SKIP_CUDAfalseSkip CUDA smoke with WARN. ALLOW_GPU_ZEROfalseTreat no GPU nodes/resources as WARN instead of FAIL. S3_BUCKET_NAMEunset Enables optional S3 RBAC check. S3_PROBE_NAMESPACEdefaultNamespace for optional in-cluster S3 probe. S3_PROBE_SERVICE_ACCOUNTunset ServiceAccount expected to have S3 access, usually via IRSA/EKS Pod Identity. S3_PROBE_IMAGEamazon/aws-cli:2.15.0Image for optional in-cluster S3 probe. SKIP_S3_PROBEfalseSkip S3 probe with WARN. TIMEOUT_MIN5Per-check timeout cap.
Required tools:
Check Parity
Azure check AWS equivalent rgaccount validates active AWS account and region context.vnetvpc validates EKS VPC, CIDR, and attached subnets.akseks validates EKS ACTIVE, Kubernetes version, and OIDC issuer.nodesnodes validates system/compute/GPU node labels plus GPU instance type/zone detail.acr-pullecr-pull validates ECR read access for EKS node role(s).blob-rbacs3-rbac optionally validates S3 permissions when S3_BUCKET_NAME is set.gpu-opgpu-op validates GPU Operator pod readiness and chart version when discoverable.gpu-resourcegpu-resource validates advertised nvidia.com/gpu.cuda-smokecuda-smoke runs an ephemeral nvidia-smi pod and cleans it up.blob-probes3-probe optionally runs an in-cluster AWS CLI pod using the supplied service account.
Bash Script
Generate this script shape:
#!/bin/bash
set -uo pipefail
: "${CLUSTER_NAME:?Set CLUSTER_NAME before running} "
: "${AWS_REGION:?Set AWS_REGION before running} "
ECR_REPOSITORY_PREFIX="${ECR_REPOSITORY_PREFIX:-$CLUSTER_NAME } "
CUDA_IMAGE="${CUDA_IMAGE:-nvidia/cuda:12.4.0-base-ubuntu22.04} "
SKIP_CUDA="${SKIP_CUDA:-false} "
ALLOW_GPU_ZERO="${ALLOW_GPU_ZERO:-false} "
S3_PROBE_NAMESPACE="${S3_PROBE_NAMESPACE:-default} "
S3_PROBE_IMAGE="${S3_PROBE_IMAGE:-amazon/aws-cli:2.15.0} "
SKIP_S3_PROBE="${SKIP_S3_PROBE:-false} "
TIMEOUT_MIN="${TIMEOUT_MIN:-5} "
for tool in aws kubectl jq; do
command -v "$tool " >/dev/null 2>&1 || {
echo "ERROR: $tool is required but not installed" >&2
exit 2
}
done
kubectl --context "$CLUSTER_NAME " get nodes >/dev/null 2>&1 || {
echo "ERROR: cannot reach cluster context $CLUSTER_NAME " >&2
exit 2
}
mkdir -p generated
REPORT_FILE="generated/${CLUSTER_NAME} -validate-report.json"
PASS=0; WARN=0; FAIL=0
CHECKS=()
NODE_ROLE_ARNS=()
json_escape () {
jq -Rn --arg s "$1 "
}
() {
= status= detail=
CHECKS+=( )
PASS) ((PASS++)) ;;
WARN) ((WARN++)) ;;
FAIL) ((FAIL++)) ;;
}
ACTIVE_ACCOUNT=
[[ -z || == ]];
record account FAIL
[[ -n && != ]];
record account FAIL
[[ -n ]];
record account PASS
record account WARN
CLUSTER_JSON=
CLUSTER_READABLE=
[[ -z ]];
record eks FAIL
CLUSTER_JSON=
CLUSTER_READABLE=
VPC_ID=
[[ -z ]];
record vpc FAIL
VPC_CIDR=
-t SUBNET_IDS < <( | jq -r )
[[ -eq 0 ]];
record vpc FAIL
SUBNET_NAMES=
record vpc PASS
[[ == ]];
EKS_STATUS=
EKS_VERSION=
OIDC_ISSUER=
[[ == && -n ]];
record eks PASS
[[ == ]];
record eks FAIL
record eks FAIL
-t NODEGROUPS < <(aws eks list-nodegroups --cluster-name --region --query --output text 2>/dev/null | )
ng ;
[[ -z ]] &&
role_arn=
[[ -n && != ]] && NODE_ROLE_ARNS+=( )
NODES_JSON=
SYSTEM_COUNT=
COMPUTE_COUNT=
GPU_COUNT=
NOT_READY= Ready True
GPU_DETAILS= node.kubernetes.io/instance-type unknown , topology.kubernetes.io/zone unknown ;
NODE_DETAIL=
[[ -gt 0 ]];
record nodes FAIL
[[ -eq 0 ]];
record nodes FAIL
[[ -eq 0 && == ]];
record nodes WARN
[[ -eq 0 ]];
record nodes FAIL
record nodes PASS
ECR_REPO_JSON=
ECR_REPOS=
-t ECR_REPO_ARNS < <( | jq -r )
ECR_REPO_COUNT=
[[ -eq 0 ]];
record ecr-pull WARN
ECR_AUTH_ACTION=(ecr:GetAuthorizationToken)
ECR_REPO_ACTIONS=(ecr:BatchCheckLayerAvailability ecr:GetDownloadUrlForLayer ecr:BatchGetImage)
all_allowed=
sim_available=
role_arn ;
auth_sim_json=
repo_sim_json=
[[ -gt 0 ]];
repo_sim_json=
[[ -z || ( -gt 0 && -z ) ]];
sim_available=
role_name=
attached=
[[ != * * && != * * ]];
all_allowed=
denied=
[[ -gt 0 ]];
repo_denied=
denied=$((denied + repo_denied))
[[ -gt 0 ]] && all_allowed=
[[ == ]];
[[ -gt 0 ]];
record ecr-pull PASS
record ecr-pull PASS
[[ == ]];
record ecr-pull WARN
record ecr-pull FAIL
[[ -z ]];
record s3-rbac WARN
[[ -eq 0 && -z ]];
record s3-rbac WARN
S3_ROLE_ARN=
s3_sim=
[[ -z ]];
record s3-rbac WARN
denied=
[[ -eq 0 ]];
record s3-rbac PASS
record s3-rbac FAIL
PODS_JSON=
GPU_OP_TOTAL=
GPU_OP_NOT_READY= Ready True
GPU_OP_READY=$((GPU_OP_TOTAL - GPU_OP_NOT_READY))
CHART_VER=
[[ -eq 0 ]];
record gpu-op FAIL
[[ -eq 0 ]];
[[ -n && -n && != ]];
record gpu-op WARN
record gpu-op PASS
record gpu-op FAIL
GPU_RESOURCE_NODES=
GPU_RESOURCE_TOTAL=
[[ -gt 0 ]];
record gpu-resource PASS
[[ == ]];
record gpu-resource WARN
record gpu-resource FAIL
SMOKE_POD=
() {
kubectl --context delete pod --ignore-not-found >/dev/null 2>&1 ||
}
[[ == ]];
record cuda-smoke WARN
[[ -eq 0 ]];
record cuda-smoke WARN
cleanup_smoke EXIT
kubectl --context run \
--image= \
--restart=Never \
--overrides= \
>/dev/null 2>&1
end=$((SECONDS + TIMEOUT_MIN * ))
phase=
(( SECONDS < end ));
phase=
[[ == || == ]] &&
5
[[ == ]];
GPU_MODEL=
record cuda-smoke PASS
detail=
pod_log=
[[ -n ]] && detail=
record cuda-smoke FAIL
cleanup_smoke
- EXIT
S3_POD=
() {
kubectl --context delete pod -n --ignore-not-found >/dev/null 2>&1 ||
}
[[ == || -z || -z ]];
record s3-probe WARN
cleanup_s3_probe EXIT
kubectl --context run -n \
--image= \
--restart=Never \
--overrides= \
>/dev/null 2>&1
kubectl --context pod -n -- =jsonpath= =Succeeded -- = >/dev/null 2>&1;
record s3-probe PASS
phase=
record s3-probe FAIL
cleanup_s3_probe
- EXIT
\
\
| jq . >
[[ -gt 0 ]] && 1 || 0
Validation Checklist
Report uses Azure-compatible cluster, timestamp, summary, checks[].id, checks[].status, and checks[].detail fields.
Preflight exits with code 2 if a tool is missing or the cluster is unreachable.
Account check validates AWS_ACCOUNT_ID when supplied.
VPC check reports the EKS VPC CIDR and attached subnet names/CIDRs.
EKS check requires ACTIVE and OIDC issuer.
Node check verifies node-type=system and node-type=gpu; ALLOW_GPU_ZERO=true downgrades missing GPU nodes to WARN.
ECR pull check proves required read actions with IAM simulation when possible, with managed-policy fallback.
Optional S3 RBAC and S3 probe checks WARN when not configured.
GPU Operator check inspects pod Ready conditions, not just pod phase.
CUDA smoke pod requests one GPU, waits for Succeeded, and is deleted on every exit path.
No secret values, kubeconfig contents, ECR passwords, or AWS credentials are printed.
'$s'
record
local
id
"$1 "
"$2 "
"$3 "
"{\"id\":$(json_escape "$id " ) ,\"status\":$(json_escape "$status " ) ,\"detail\":$(json_escape "$detail " ) }"
case
"$status "
in
esac
printf
'[%s] %s - %s\n'
"$status "
"$id "
"$detail "
"$(aws sts get-caller-identity --query Account --output text 2>/dev/null || true) "
if
"$ACTIVE_ACCOUNT "
"$ACTIVE_ACCOUNT "
"None"
then
"cannot resolve active AWS account"
elif
"${AWS_ACCOUNT_ID:-} "
"$ACTIVE_ACCOUNT "
"$AWS_ACCOUNT_ID "
then
"active account $ACTIVE_ACCOUNT does not match expected $AWS_ACCOUNT_ID "
elif
"${AWS_ACCOUNT_ID:-} "
then
"active account matches $AWS_ACCOUNT_ID in $AWS_REGION "
else
"AWS_ACCOUNT_ID unset; active account is $ACTIVE_ACCOUNT in $AWS_REGION "
fi
"$(aws eks describe-cluster --name "$CLUSTER_NAME " --region "$AWS_REGION " --output json 2>/dev/null || true) "
true
if
"$CLUSTER_JSON "
then
"cluster $CLUSTER_NAME not found or not readable in $AWS_REGION "
'{"cluster":{}}'
false
fi
"$(echo "$CLUSTER_JSON " | jq -r '.cluster.resourcesVpcConfig.vpcId // "" ') "
if
"$VPC_ID "
then
"cluster VPC ID unavailable"
else
"$(aws ec2 describe-vpcs --region "$AWS_REGION " --vpc-ids "$VPC_ID " --query 'Vpcs[0].CidrBlock' --output text 2>/dev/null || true) "
mapfile
echo
"$CLUSTER_JSON "
'.cluster.resourcesVpcConfig.subnetIds[]?'
if
"${#SUBNET_IDS[@]} "
then
"VPC $VPC_ID has no EKS subnet IDs in cluster config"
else
"$(aws ec2 describe-subnets --region "$AWS_REGION " --subnet-ids "${SUBNET_IDS[@]} " \
--query 'Subnets[].{id:SubnetId,name:Tags[?Key==`Name`]|[0].Value,cidr:CidrBlock}' \
--output json 2>/dev/null | jq -r '.[] | (.name // .id) + "
" + .cidr' | paste -sd ', ' -)"
"VPC $VPC_ID ${VPC_CIDR:-unknown} ; subnets: ${SUBNET_NAMES:-unknown} "
fi
fi
if
"$CLUSTER_READABLE "
"true"
then
"$(echo "$CLUSTER_JSON " | jq -r '.cluster.status // "" ') "
"$(echo "$CLUSTER_JSON " | jq -r '.cluster.version // "" ') "
"$(echo "$CLUSTER_JSON " | jq -r '.cluster.identity.oidc.issuer // "" ') "
if
"$EKS_STATUS "
"ACTIVE"
"$OIDC_ISSUER "
then
"ACTIVE; v${EKS_VERSION:-unknown} ; OIDC enabled"
elif
"$EKS_STATUS "
"ACTIVE"
then
"ACTIVE but OIDC issuer is unset"
else
"status=${EKS_STATUS:-UNKNOWN} ; version=${EKS_VERSION:-unknown} ; oidc=${OIDC_ISSUER:-unset} "
fi
fi
mapfile
"$CLUSTER_NAME "
"$AWS_REGION "
'nodegroups[]'
tr
'\t'
'\n'
for
in
"${NODEGROUPS[@]} "
do
"$ng "
continue
"$(aws eks describe-nodegroup --cluster-name "$CLUSTER_NAME " --nodegroup-name "$ng " --region "$AWS_REGION " --query 'nodegroup.nodeRole' --output text 2>/dev/null || true) "
"$role_arn "
"$role_arn "
"None"
"$role_arn "
done
"$(kubectl --context "$CLUSTER_NAME " get nodes -o json 2>/dev/null || echo '{"items" :[]}') "
"$(echo "$NODES_JSON " | jq '[.items[] | select(.metadata.labels["node-type" ]=="system" ) ] | length')"
"$(echo "$NODES_JSON " | jq '[.items[] | select(.metadata.labels["node-type" ]=="compute" ) ] | length')"
"$(echo "$NODES_JSON " | jq '[.items[] | select(.metadata.labels["node-type" ]=="gpu" ) ] | length')"
"$(echo "$NODES_JSON " | jq '[.items[] | select((.status.conditions // []) | map(select(.type=="
" and .status=="
")) | length == 0)] | length')"
"$(echo "$NODES_JSON " | jq -r '[.items[] | select(.metadata.labels["node-type" ]=="gpu" ) | ((.metadata.labels["
"] // "
") + "
" + (.metadata.labels["
"] // "
"))] | unique | join("
")')"
"system=${SYSTEM_COUNT} , compute=${COMPUTE_COUNT} , gpu=${GPU_COUNT} ${GPU_DETAILS:+ (${GPU_DETAILS} )} "
if
"$NOT_READY "
then
"$NODE_DETAIL ; not-ready=${NOT_READY} "
elif
"$SYSTEM_COUNT "
then
"$NODE_DETAIL ; missing node-type=system"
elif
"$GPU_COUNT "
"$ALLOW_GPU_ZERO "
"true"
then
"$NODE_DETAIL ; no GPU nodes and ALLOW_GPU_ZERO=true"
elif
"$GPU_COUNT "
then
"$NODE_DETAIL ; missing node-type=gpu"
else
"$NODE_DETAIL "
fi
"$(aws ecr describe-repositories --region "$AWS_REGION " \
--query "repositories[?starts_with(repositoryName, '${ECR_REPOSITORY_PREFIX} /')].{name:repositoryName,arn:repositoryArn}" \
--output json 2>/dev/null || echo '[]') "
"$(echo "$ECR_REPO_JSON " | jq -r '.[].name' | paste -sd ' ' -) "
mapfile
echo
"$ECR_REPO_JSON "
'.[].arn'
"${#ECR_REPO_ARNS[@]} "
if
"${#NODE_ROLE_ARNS[@]} "
then
"no EKS node role ARNs found; cannot prove ECR pull access"
else
true
true
for
in
"${NODE_ROLE_ARNS[@]} "
do
"$(aws iam simulate-principal-policy \
--policy-source-arn "$role_arn " \
--action-names "${ECR_AUTH_ACTION[@]} " \
--resource-arns "*" \
--output json 2>/dev/null || true) "
""
if
"${#ECR_REPO_ARNS[@]} "
then
"$(aws iam simulate-principal-policy \
--policy-source-arn "$role_arn " \
--action-names "${ECR_REPO_ACTIONS[@]} " \
--resource-arns "${ECR_REPO_ARNS[@]} " \
--output json 2>/dev/null || true) "
fi
if
"$auth_sim_json "
"${#ECR_REPO_ARNS[@]} "
"$repo_sim_json "
then
false
"${role_arn##*/} "
"$(aws iam list-attached-role-policies --role-name "$role_name " --query 'AttachedPolicies[].PolicyArn' --output text 2>/dev/null || true) "
if
"$attached "
"AmazonEC2ContainerRegistryReadOnly"
"$attached "
"AmazonEC2ContainerRegistryPowerUser"
then
false
fi
else
"$(echo "$auth_sim_json " | jq '[.EvaluationResults[] | select(.EvalDecision != "allowed" ) ] | length')"
if
"${#ECR_REPO_ARNS[@]} "
then
"$(echo "$repo_sim_json " | jq '[.EvaluationResults[] | select(.EvalDecision != "allowed" ) ] | length')"
fi
"$denied "
false
fi
done
if
"$all_allowed "
"true"
then
if
"$ECR_REPO_COUNT "
then
"ECR read allowed for node role(s); ${ECR_REPO_COUNT} repo(s) under ${ECR_REPOSITORY_PREFIX} /"
else
"ECR read allowed for node role(s); no repos yet under ${ECR_REPOSITORY_PREFIX} /"
fi
elif
"$sim_available "
"false"
then
"could not prove ECR read for every node role; iam:SimulatePrincipalPolicy unavailable and managed policy fallback did not match"
else
"one or more node roles lack required ECR read actions"
fi
fi
if
"${S3_BUCKET_NAME:-} "
then
"Skipped (no S3_BUCKET_NAME)"
elif
"${#NODE_ROLE_ARNS[@]} "
"${S3_PROBE_ROLE_ARN:-} "
then
"S3_BUCKET_NAME set, but no role ARN is available for IAM simulation"
else
"${S3_PROBE_ROLE_ARN:-${NODE_ROLE_ARNS[0]} } "
"$(aws iam simulate-principal-policy \
--policy-source-arn "$S3_ROLE_ARN " \
--action-names s3:ListBucket s3:GetObject \
--resource-arns "arn:aws:s3:::${S3_BUCKET_NAME} " "arn:aws:s3:::${S3_BUCKET_NAME} /*" \
--output json 2>/dev/null || true) "
if
"$s3_sim "
then
"Could not simulate S3 access for $S3_ROLE_ARN "
else
"$(echo "$s3_sim " | jq '[.EvaluationResults[] | select(.EvalDecision != "allowed" ) ] | length')"
if
"$denied "
then
"S3 List/Get allowed on $S3_BUCKET_NAME for ${S3_ROLE_ARN##*/} "
else
"S3 List/Get not fully allowed on $S3_BUCKET_NAME for ${S3_ROLE_ARN##*/} "
fi
fi
fi
"$(kubectl --context "$CLUSTER_NAME " get pods -n gpu-operator -o json 2>/dev/null || echo '{"items" :[]}') "
"$(echo "$PODS_JSON " | jq '.items | length') "
"$(echo "$PODS_JSON " | jq '[.items[] | select(.status.phase != "Succeeded" ) | select(((.status.conditions // []) | map(select(.type=="
" and .status=="
")) | length) == 0)] | length')"
"$(helm --kube-context "$CLUSTER_NAME " list -n gpu-operator -o json 2>/dev/null | jq -r '.[] | select(.name=="gpu-operator" ) | .chart // "
"' | sed 's/^gpu-operator-v\?//' || true)"
if
"$GPU_OP_TOTAL "
then
"no pods found in gpu-operator namespace"
elif
"$GPU_OP_NOT_READY "
then
if
"${GPU_OPERATOR_VERSION:-} "
"$CHART_VER "
"$CHART_VER "
"${GPU_OPERATOR_VERSION#v} "
then
"${GPU_OP_READY} /${GPU_OP_TOTAL} pods Ready; chart v${CHART_VER} , expected v${GPU_OPERATOR_VERSION#v} "
else
"${GPU_OP_READY} /${GPU_OP_TOTAL} pods Ready${CHART_VER:+; chart v$CHART_VER} "
fi
else
"${GPU_OP_READY} /${GPU_OP_TOTAL} pods Ready"
fi
"$(echo "$NODES_JSON " | jq '[.items[] | select((.status.allocatable["nvidia.com/gpu" ] // "0" | tonumber) >= 1)] | length')"
"$(echo "$NODES_JSON " | jq '[.items[] | (.status.allocatable["nvidia.com/gpu" ] // "0" | tonumber) ] | add // 0')"
if
"$GPU_RESOURCE_NODES "
then
"${GPU_RESOURCE_NODES} node(s) advertise nvidia.com/gpu=${GPU_RESOURCE_TOTAL} "
elif
"$ALLOW_GPU_ZERO "
"true"
then
"no nodes advertise nvidia.com/gpu and ALLOW_GPU_ZERO=true"
else
"no nodes advertise nvidia.com/gpu"
fi
"aws-validate-cuda-smoke-$$"
cleanup_smoke
"$CLUSTER_NAME "
"$SMOKE_POD "
true
if
"$SKIP_CUDA "
"true"
then
"Skipped (SKIP_CUDA=true)"
elif
"$GPU_RESOURCE_NODES "
then
"Skipped (no GPU nodes available)"
else
trap
"$CLUSTER_NAME "
"$SMOKE_POD "
"$CUDA_IMAGE "
'{"spec":{"nodeSelector":{"node-type":"gpu"},"tolerations":[{"key":"nvidia.com/gpu","operator":"Exists","effect":"NoSchedule"}],"containers":[{"name":"smoke","image":"'
"$CUDA_IMAGE "
'","command":["nvidia-smi"],"resources":{"limits":{"nvidia.com/gpu":"1"}}}]}}'
60
""
while
do
"$(kubectl --context "$CLUSTER_NAME " get pod "$SMOKE_POD " -o jsonpath='{.status.phase}' 2>/dev/null || true) "
"$phase "
"Succeeded"
"$phase "
"Failed"
break
sleep
done
if
"$phase "
"Succeeded"
then
"$(kubectl --context "$CLUSTER_NAME " logs "$SMOKE_POD " 2>/dev/null | grep -Eom1 'A10|L40S|T4|H100|A100|V100|L4' || true) "
"nvidia-smi pod returned 0${GPU_MODEL:+; $GPU_MODEL detected} "
else
"phase=${phase:-UNKNOWN} "
"$(kubectl --context "$CLUSTER_NAME " logs "$SMOKE_POD " 2>/dev/null | tail -20 | tr '\n' ' ' || true) "
"$pod_log "
"$detail ; logs: $pod_log "
"nvidia-smi pod did not complete successfully ($detail )"
fi
trap
fi
"aws-validate-s3-probe-$$"
cleanup_s3_probe
"$CLUSTER_NAME "
"$S3_POD "
"$S3_PROBE_NAMESPACE "
true
if
"$SKIP_S3_PROBE "
"true"
"${S3_BUCKET_NAME:-} "
"${S3_PROBE_SERVICE_ACCOUNT:-} "
then
"Skipped (SKIP_S3_PROBE=${SKIP_S3_PROBE} S3_BUCKET_NAME=${S3_BUCKET_NAME:-unset} S3_PROBE_SERVICE_ACCOUNT=${S3_PROBE_SERVICE_ACCOUNT:-unset} )"
else
trap
"$CLUSTER_NAME "
"$S3_POD "
"$S3_PROBE_NAMESPACE "
"$S3_PROBE_IMAGE "
'{"spec":{"serviceAccountName":"'
"$S3_PROBE_SERVICE_ACCOUNT "
'","containers":[{"name":"aws","image":"'
"$S3_PROBE_IMAGE "
'","command":["aws","s3api","list-objects-v2","--bucket","'
"$S3_BUCKET_NAME "
'","--max-items","1"]}]}}'
if
"$CLUSTER_NAME "
wait
"$S3_POD "
"$S3_PROBE_NAMESPACE "
for
'{.status.phase}'
timeout
"${TIMEOUT_MIN} m"
then
"serviceAccount=$S3_PROBE_SERVICE_ACCOUNT listed $S3_BUCKET_NAME "
else
"$(kubectl --context "$CLUSTER_NAME " get pod "$S3_POD " -n "$S3_PROBE_NAMESPACE " -o jsonpath='{.status.phase}' 2>/dev/null || echo unknown) "
"S3 probe failed (phase=$phase serviceAccount=$S3_PROBE_SERVICE_ACCOUNT bucket=$S3_BUCKET_NAME )"
fi
trap
fi
printf
'{ "cluster": "%s", "timestamp": "%s", "summary": { "pass": %d, "warn": %d, "fail": %d }, "checks": [%s] }\n'
"$CLUSTER_NAME "
"$(date -u +%FT%TZ) "
"$PASS "
"$WARN "
"$FAIL "
"$(IFS=,; echo "${CHECKS[*]} " ) "
"$REPORT_FILE "
echo
""
echo
"=== Summary: PASS=$PASS WARN=$WARN FAIL=$FAIL ==="
echo
"Report: $REPORT_FILE "
"$FAIL "
exit
exit
More from this repository orchestrate-streaming-stack Orchestrate an end-to-end NVIDIA self-managed streaming stack across AWS or Azure. Use when planning, generating, sequencing, deploying, or validating the full path from CSP base infrastructure through NVCF self-managed control plane, NVCF auxiliary services, caches, storage APIs, and post-deploy readiness gates. Trigger when the user asks for orchestration, full-stack setup, bring-up order, runbook, dependency sequencing, AWS/Azure streaming deployment, csp-infra plus NVCF, caches, or storage API coordination. Do not use for a single component task when the user explicitly asks only for one child skill.
Install, operate, and tear down self-hosted NVIDIA Cloud Functions (NVCF)
deployments with nvcf-cli. Use for control-plane or compute-plane install,
status checks, cluster registration, function deploy/invoke, task
create/list/cancel/delete, API keys, admin tokens, JWKS rotation,
failed-install diagnosis, and uninstall or down workflows. Trigger keywords:
nvcf, nvcf-cli, self-hosted nvcf, self-managed nvcf, NVCFBackend, NVCA, NCP,
ICMS, helmfile, control plane, compute plane, LLM function,
OpenAI-compatible invocation, Responses API, embeddings, batch task, task
monitor, cluster rotate, cluster delete, helm task, helm-based task,
task secrets, update task secrets, retrieve task results, bulk fetch tasks,
task results.
nvcf-self-managed-installation Install and operate NVCF self-hosted control-plane and separate compute-plane stacks. Covers Helmfile values and CLI profile installation flows, teardown, values overrides, pull secrets, and troubleshooting. Use for nvcf-self-managed-stack, nvcf-compute-plane-stack, split compute-plane installation, control-plane installation, CLI-generated control-plane profiles, Helmfile, self-managed, or self-hosted deployments. Do NOT use for local k3d environments; use the local k3d development workflow instead.
Related occupations SOC
Based on SOC occupation classification