published on Monday, Aug 31, 2026 by Pulumi Labs
published on Monday, Aug 31, 2026 by Pulumi Labs
Runs an AICR recipe’s empirical validation (cluster snapshot + deployment/conformance/performance checks) against a live cluster and records structured per-check results in Pulumi state.
The run happens at deploy time (never at preview). The validation harness deploys short-lived agent and validator Jobs plus per-run RBAC on the target cluster and cleans them up afterward; the validation namespace (default “aicr-validation”) is created on first run and deliberately persists.
Privilege level: the snapshot-agent Job runs as a privileged container (bound to a read-only node-inspection ClusterRole), and validator Jobs run under a per-run cluster-admin ClusterRoleBinding — both removed after the run, including on cancellation. The kubeconfig identity needs RBAC to create/patch Namespaces, ClusterRoles, and ClusterRoleBindings.
Any input change replaces the resource, which re-runs validation (delete is
a no-op). With strict: true, a failed run fails the update while persisting
full results, and validation re-runs on every subsequent pulumi up until it
passes — use dependsOn to gate downstream resources on it.
Create ValidationRun Resource
Resources are created with functions called constructors. To learn more about declaring and configuring resources, see Resources.
Constructor syntax
new ValidationRun(name: string, args: ValidationRunArgs, opts?: CustomResourceOptions);@overload
def ValidationRun(resource_name: str,
args: ValidationRunArgs,
opts: Optional[ResourceOptions] = None)
@overload
def ValidationRun(resource_name: str,
opts: Optional[ResourceOptions] = None,
criteria: Optional[RecipeCriteriaArgs] = None,
node_selector: Optional[Mapping[str, str]] = None,
require_gpu: Optional[bool] = None,
image_registry: Optional[str] = None,
include_ctrf_report: Optional[bool] = None,
kubeconfig: Optional[str] = None,
kubeconfig_path: Optional[str] = None,
image_pull_secrets: Optional[Sequence[str]] = None,
phases: Optional[Sequence[str]] = None,
namespace: Optional[str] = None,
recipe_data_version: Optional[str] = None,
context: Optional[str] = None,
strict: Optional[bool] = None,
timeout_minutes: Optional[int] = None,
tolerations: Optional[Sequence[TolerationArgs]] = None,
triggers: Optional[Sequence[Any]] = None)func NewValidationRun(ctx *Context, name string, args ValidationRunArgs, opts ...ResourceOption) (*ValidationRun, error)public ValidationRun(string name, ValidationRunArgs args, CustomResourceOptions? opts = null)
public ValidationRun(String name, ValidationRunArgs args)
public ValidationRun(String name, ValidationRunArgs args, CustomResourceOptions options)
type: nvidia-aicr:ValidationRun
properties: # The arguments to resource properties.
options: # Bag of options to control resource's behavior.
resource "nvidia-aicr_validation_run" "name" {
# resource properties
}Parameters
- name string
- The unique name of the resource.
- args ValidationRunArgs
- The arguments to resource properties.
- opts CustomResourceOptions
- Bag of options to control resource's behavior.
- resource_name str
- The unique name of the resource.
- args ValidationRunArgs
- The arguments to resource properties.
- opts ResourceOptions
- Bag of options to control resource's behavior.
- ctx Context
- Context object for the current deployment.
- name string
- The unique name of the resource.
- args ValidationRunArgs
- The arguments to resource properties.
- opts ResourceOption
- Bag of options to control resource's behavior.
- name string
- The unique name of the resource.
- args ValidationRunArgs
- The arguments to resource properties.
- opts CustomResourceOptions
- Bag of options to control resource's behavior.
- name String
- The unique name of the resource.
- args ValidationRunArgs
- The arguments to resource properties.
- options CustomResourceOptions
- Bag of options to control resource's behavior.
Constructor example
The following reference example uses placeholder values for all input properties.
var validationRunResource = new NvidiaAicr.ValidationRun("validationRunResource", new()
{
Criteria = new NvidiaAicr.Inputs.RecipeCriteriaArgs
{
Accelerator = "string",
Intent = "string",
Service = "string",
Nodes = 0,
Os = "string",
Platform = "string",
SkipComponents = new[]
{
"string",
},
},
NodeSelector =
{
{ "string", "string" },
},
RequireGpu = false,
ImageRegistry = "string",
IncludeCtrfReport = false,
Kubeconfig = "string",
KubeconfigPath = "string",
ImagePullSecrets = new[]
{
"string",
},
Phases = new[]
{
"string",
},
Namespace = "string",
RecipeDataVersion = "string",
Context = "string",
Strict = false,
TimeoutMinutes = 0,
Tolerations = new[]
{
new NvidiaAicr.Inputs.TolerationArgs
{
Effect = "string",
Key = "string",
Operator = "string",
TolerationSeconds = 0,
Value = "string",
},
},
Triggers = new[]
{
"any",
},
});
example, err := nvidiaaicr.NewValidationRun(ctx, "validationRunResource", &nvidiaaicr.ValidationRunArgs{
Criteria: &nvidiaaicr.RecipeCriteriaArgs{
Accelerator: pulumi.String("string"),
Intent: pulumi.String("string"),
Service: pulumi.String("string"),
Nodes: pulumi.Int(0),
Os: pulumi.String("string"),
Platform: pulumi.String("string"),
SkipComponents: pulumi.StringArray{
pulumi.String("string"),
},
},
NodeSelector: pulumi.StringMap{
"string": pulumi.String("string"),
},
RequireGpu: pulumi.Bool(false),
ImageRegistry: pulumi.String("string"),
IncludeCtrfReport: pulumi.Bool(false),
Kubeconfig: pulumi.String("string"),
KubeconfigPath: pulumi.String("string"),
ImagePullSecrets: pulumi.StringArray{
pulumi.String("string"),
},
Phases: pulumi.StringArray{
pulumi.String("string"),
},
Namespace: pulumi.String("string"),
RecipeDataVersion: pulumi.String("string"),
Context: pulumi.String("string"),
Strict: pulumi.Bool(false),
TimeoutMinutes: pulumi.Int(0),
Tolerations: nvidiaaicr.TolerationArray{
&nvidiaaicr.TolerationArgs{
Effect: pulumi.String("string"),
Key: pulumi.String("string"),
Operator: pulumi.String("string"),
TolerationSeconds: pulumi.Int(0),
Value: pulumi.String("string"),
},
},
Triggers: pulumi.Array{
pulumi.Any("any"),
},
})
resource "nvidia-aicr_validation_run" "validationRunResource" {
lifecycle {
create_before_destroy = true
}
criteria = {
accelerator = "string"
intent = "string"
service = "string"
nodes = 0
os = "string"
platform = "string"
skip_components = ["string"]
}
node_selector = {
"string" = "string"
}
require_gpu = false
image_registry = "string"
include_ctrf_report = false
kubeconfig = "string"
kubeconfig_path = "string"
image_pull_secrets = ["string"]
phases = ["string"]
namespace = "string"
recipe_data_version = "string"
context = "string"
strict = false
timeout_minutes = 0
tolerations {
effect = "string"
key = "string"
operator = "string"
toleration_seconds = 0
value = "string"
}
triggers = ["any"]
}
var validationRunResource = new ValidationRun("validationRunResource", ValidationRunArgs.builder()
.criteria(RecipeCriteriaArgs.builder()
.accelerator("string")
.intent("string")
.service("string")
.nodes(0)
.os("string")
.platform("string")
.skipComponents("string")
.build())
.nodeSelector(Map.of("string", "string"))
.requireGpu(false)
.imageRegistry("string")
.includeCtrfReport(false)
.kubeconfig("string")
.kubeconfigPath("string")
.imagePullSecrets("string")
.phases("string")
.namespace("string")
.recipeDataVersion("string")
.context("string")
.strict(false)
.timeoutMinutes(0)
.tolerations(TolerationArgs.builder()
.effect("string")
.key("string")
.operator("string")
.tolerationSeconds(0)
.value("string")
.build())
.triggers("any")
.build());
validation_run_resource = nvidia_aicr.ValidationRun("validationRunResource",
criteria={
"accelerator": "string",
"intent": "string",
"service": "string",
"nodes": 0,
"os": "string",
"platform": "string",
"skip_components": ["string"],
},
node_selector={
"string": "string",
},
require_gpu=False,
image_registry="string",
include_ctrf_report=False,
kubeconfig="string",
kubeconfig_path="string",
image_pull_secrets=["string"],
phases=["string"],
namespace="string",
recipe_data_version="string",
context="string",
strict=False,
timeout_minutes=0,
tolerations=[{
"effect": "string",
"key": "string",
"operator": "string",
"toleration_seconds": 0,
"value": "string",
}],
triggers=["any"])
const validationRunResource = new nvidia_aicr.ValidationRun("validationRunResource", {
criteria: {
accelerator: "string",
intent: "string",
service: "string",
nodes: 0,
os: "string",
platform: "string",
skipComponents: ["string"],
},
nodeSelector: {
string: "string",
},
requireGpu: false,
imageRegistry: "string",
includeCtrfReport: false,
kubeconfig: "string",
kubeconfigPath: "string",
imagePullSecrets: ["string"],
phases: ["string"],
namespace: "string",
recipeDataVersion: "string",
context: "string",
strict: false,
timeoutMinutes: 0,
tolerations: [{
effect: "string",
key: "string",
operator: "string",
tolerationSeconds: 0,
value: "string",
}],
triggers: ["any"],
});
type: nvidia-aicr:ValidationRun
properties:
context: string
criteria:
accelerator: string
intent: string
nodes: 0
os: string
platform: string
service: string
skipComponents:
- string
imagePullSecrets:
- string
imageRegistry: string
includeCtrfReport: false
kubeconfig: string
kubeconfigPath: string
namespace: string
nodeSelector:
string: string
phases:
- string
recipeDataVersion: string
requireGpu: false
strict: false
timeoutMinutes: 0
tolerations:
- effect: string
key: string
operator: string
tolerationSeconds: 0
value: string
triggers:
- any
ValidationRun Resource Properties
To learn more about resource properties and how to use them, see Inputs and Outputs in the Architecture and Concepts docs.
Inputs
In Python, inputs that are objects can be passed either as argument classes or as dictionary literals.
The ValidationRun resource accepts the following input properties:
- Criteria
Pulumi.
Labs. Nvidia Aicr. Inputs. Recipe Criteria - Recipe criteria. Wire a ClusterStack's
criteriaoutput here, or build the object inline. - Context string
- Kubeconfig context to select. Defaults to the kubeconfig's current-context.
- Image
Pull List<string>Secrets - Names of image pull Secrets (in the validation namespace) for the validation pods.
- Image
Registry string - Registry override for the snapshot-agent and validator images (air-gapped mirrors). Unset keeps the default registry (ghcr.io).
- Include
Ctrf boolReport - If true, the merged CTRF JSON report is stored in the
ctrfReportoutput. Default: false (state-size control; per-check results are always inphaseResults). - Kubeconfig string
- Kubeconfig contents for the target cluster. Mutually exclusive with
kubeconfigPath. If neither is set, the ambient kubeconfig (KUBECONFIG env var or ~/.kube/config) is used. Written to a mode-0600 temp file for the duration of the run and removed afterward. - Kubeconfig
Path string - Path to a kubeconfig file on disk. Mutually exclusive with
kubeconfig. - Namespace string
- Namespace for the validation harness — use a dedicated one: it hosts the privileged agent and cluster-admin-bound validator Jobs. The SDK creates it on first run and deliberately never deletes it. Must be a valid DNS-1123 label and not a "kube-" system namespace. Default: "aicr-validation".
- Node
Selector Dictionary<string, string> - Node selector applied to the validation workload pods. Use when GPU nodes carry non-standard labels.
- Phases List<string>
- Validation phases to run: any of "deployment", "conformance", "performance". Default: ["deployment", "conformance"] — "performance" is an explicit opt-in (long-running and hardware-bound).
- Recipe
Data stringVersion - Recipe-data version assertion (not a pin). When set, it must equal this
provider build's embedded AICR recipe-data version or Create fails before
any cluster work — wire
recipeDataVersion: stack.recipeVersionto catch a provider upgrade between deploy and validate. - Require
Gpu bool - Whether the snapshot agent requires GPU nodes. Set false for hardware-free clusters (kind). Default: true.
- Strict bool
- If true, a failed (or readiness-failed) validation fails the update while
still persisting the full results in state. The engine then re-runs
validation on every subsequent
pulumi upuntil it passes. Default: false — results are recorded and the update succeeds; read thestatusoutput. - Timeout
Minutes int - Overall run timeout in minutes. Default: 30. Maximum: 1440 (24 hours).
- Tolerations
List<Pulumi.
Labs. Nvidia Aicr. Inputs. Toleration> - Tolerations applied to the validation workload pods (e.g. NCCL benchmark pods). Required in practice on tainted GPU node groups; when unset, the validator's default tolerate-all is kept.
- Triggers List<object>
- Arbitrary values; changing any of them replaces the resource and re-runs
validation (every input change does). Wire
triggers: [stack.deployedComponents]for re-validation cadence.
- Criteria
Recipe
Criteria Args - Recipe criteria. Wire a ClusterStack's
criteriaoutput here, or build the object inline. - Context string
- Kubeconfig context to select. Defaults to the kubeconfig's current-context.
- Image
Pull []stringSecrets - Names of image pull Secrets (in the validation namespace) for the validation pods.
- Image
Registry string - Registry override for the snapshot-agent and validator images (air-gapped mirrors). Unset keeps the default registry (ghcr.io).
- Include
Ctrf boolReport - If true, the merged CTRF JSON report is stored in the
ctrfReportoutput. Default: false (state-size control; per-check results are always inphaseResults). - Kubeconfig string
- Kubeconfig contents for the target cluster. Mutually exclusive with
kubeconfigPath. If neither is set, the ambient kubeconfig (KUBECONFIG env var or ~/.kube/config) is used. Written to a mode-0600 temp file for the duration of the run and removed afterward. - Kubeconfig
Path string - Path to a kubeconfig file on disk. Mutually exclusive with
kubeconfig. - Namespace string
- Namespace for the validation harness — use a dedicated one: it hosts the privileged agent and cluster-admin-bound validator Jobs. The SDK creates it on first run and deliberately never deletes it. Must be a valid DNS-1123 label and not a "kube-" system namespace. Default: "aicr-validation".
- Node
Selector map[string]string - Node selector applied to the validation workload pods. Use when GPU nodes carry non-standard labels.
- Phases []string
- Validation phases to run: any of "deployment", "conformance", "performance". Default: ["deployment", "conformance"] — "performance" is an explicit opt-in (long-running and hardware-bound).
- Recipe
Data stringVersion - Recipe-data version assertion (not a pin). When set, it must equal this
provider build's embedded AICR recipe-data version or Create fails before
any cluster work — wire
recipeDataVersion: stack.recipeVersionto catch a provider upgrade between deploy and validate. - Require
Gpu bool - Whether the snapshot agent requires GPU nodes. Set false for hardware-free clusters (kind). Default: true.
- Strict bool
- If true, a failed (or readiness-failed) validation fails the update while
still persisting the full results in state. The engine then re-runs
validation on every subsequent
pulumi upuntil it passes. Default: false — results are recorded and the update succeeds; read thestatusoutput. - Timeout
Minutes int - Overall run timeout in minutes. Default: 30. Maximum: 1440 (24 hours).
- Tolerations
[]Toleration
Args - Tolerations applied to the validation workload pods (e.g. NCCL benchmark pods). Required in practice on tainted GPU node groups; when unset, the validator's default tolerate-all is kept.
- Triggers []interface{}
- Arbitrary values; changing any of them replaces the resource and re-runs
validation (every input change does). Wire
triggers: [stack.deployedComponents]for re-validation cadence.
- criteria object
- Recipe criteria. Wire a ClusterStack's
criteriaoutput here, or build the object inline. - context string
- Kubeconfig context to select. Defaults to the kubeconfig's current-context.
- image_
pull_ list(string)secrets - Names of image pull Secrets (in the validation namespace) for the validation pods.
- image_
registry string - Registry override for the snapshot-agent and validator images (air-gapped mirrors). Unset keeps the default registry (ghcr.io).
- include_
ctrf_ boolreport - If true, the merged CTRF JSON report is stored in the
ctrfReportoutput. Default: false (state-size control; per-check results are always inphaseResults). - kubeconfig string
- Kubeconfig contents for the target cluster. Mutually exclusive with
kubeconfigPath. If neither is set, the ambient kubeconfig (KUBECONFIG env var or ~/.kube/config) is used. Written to a mode-0600 temp file for the duration of the run and removed afterward. - kubeconfig_
path string - Path to a kubeconfig file on disk. Mutually exclusive with
kubeconfig. - namespace string
- Namespace for the validation harness — use a dedicated one: it hosts the privileged agent and cluster-admin-bound validator Jobs. The SDK creates it on first run and deliberately never deletes it. Must be a valid DNS-1123 label and not a "kube-" system namespace. Default: "aicr-validation".
- node_
selector map(string) - Node selector applied to the validation workload pods. Use when GPU nodes carry non-standard labels.
- phases list(string)
- Validation phases to run: any of "deployment", "conformance", "performance". Default: ["deployment", "conformance"] — "performance" is an explicit opt-in (long-running and hardware-bound).
- recipe_
data_ stringversion - Recipe-data version assertion (not a pin). When set, it must equal this
provider build's embedded AICR recipe-data version or Create fails before
any cluster work — wire
recipeDataVersion: stack.recipeVersionto catch a provider upgrade between deploy and validate. - require_
gpu bool - Whether the snapshot agent requires GPU nodes. Set false for hardware-free clusters (kind). Default: true.
- strict bool
- If true, a failed (or readiness-failed) validation fails the update while
still persisting the full results in state. The engine then re-runs
validation on every subsequent
pulumi upuntil it passes. Default: false — results are recorded and the update succeeds; read thestatusoutput. - timeout_
minutes number - Overall run timeout in minutes. Default: 30. Maximum: 1440 (24 hours).
- tolerations list(object)
- Tolerations applied to the validation workload pods (e.g. NCCL benchmark pods). Required in practice on tainted GPU node groups; when unset, the validator's default tolerate-all is kept.
- triggers list(any)
- Arbitrary values; changing any of them replaces the resource and re-runs
validation (every input change does). Wire
triggers: [stack.deployedComponents]for re-validation cadence.
- criteria
Recipe
Criteria - Recipe criteria. Wire a ClusterStack's
criteriaoutput here, or build the object inline. - context String
- Kubeconfig context to select. Defaults to the kubeconfig's current-context.
- image
Pull List<String>Secrets - Names of image pull Secrets (in the validation namespace) for the validation pods.
- image
Registry String - Registry override for the snapshot-agent and validator images (air-gapped mirrors). Unset keeps the default registry (ghcr.io).
- include
Ctrf BooleanReport - If true, the merged CTRF JSON report is stored in the
ctrfReportoutput. Default: false (state-size control; per-check results are always inphaseResults). - kubeconfig String
- Kubeconfig contents for the target cluster. Mutually exclusive with
kubeconfigPath. If neither is set, the ambient kubeconfig (KUBECONFIG env var or ~/.kube/config) is used. Written to a mode-0600 temp file for the duration of the run and removed afterward. - kubeconfig
Path String - Path to a kubeconfig file on disk. Mutually exclusive with
kubeconfig. - namespace String
- Namespace for the validation harness — use a dedicated one: it hosts the privileged agent and cluster-admin-bound validator Jobs. The SDK creates it on first run and deliberately never deletes it. Must be a valid DNS-1123 label and not a "kube-" system namespace. Default: "aicr-validation".
- node
Selector Map<String,String> - Node selector applied to the validation workload pods. Use when GPU nodes carry non-standard labels.
- phases List<String>
- Validation phases to run: any of "deployment", "conformance", "performance". Default: ["deployment", "conformance"] — "performance" is an explicit opt-in (long-running and hardware-bound).
- recipe
Data StringVersion - Recipe-data version assertion (not a pin). When set, it must equal this
provider build's embedded AICR recipe-data version or Create fails before
any cluster work — wire
recipeDataVersion: stack.recipeVersionto catch a provider upgrade between deploy and validate. - require
Gpu Boolean - Whether the snapshot agent requires GPU nodes. Set false for hardware-free clusters (kind). Default: true.
- strict Boolean
- If true, a failed (or readiness-failed) validation fails the update while
still persisting the full results in state. The engine then re-runs
validation on every subsequent
pulumi upuntil it passes. Default: false — results are recorded and the update succeeds; read thestatusoutput. - timeout
Minutes Integer - Overall run timeout in minutes. Default: 30. Maximum: 1440 (24 hours).
- tolerations List<Toleration>
- Tolerations applied to the validation workload pods (e.g. NCCL benchmark pods). Required in practice on tainted GPU node groups; when unset, the validator's default tolerate-all is kept.
- triggers List<Object>
- Arbitrary values; changing any of them replaces the resource and re-runs
validation (every input change does). Wire
triggers: [stack.deployedComponents]for re-validation cadence.
- criteria
Recipe
Criteria - Recipe criteria. Wire a ClusterStack's
criteriaoutput here, or build the object inline. - context string
- Kubeconfig context to select. Defaults to the kubeconfig's current-context.
- image
Pull string[]Secrets - Names of image pull Secrets (in the validation namespace) for the validation pods.
- image
Registry string - Registry override for the snapshot-agent and validator images (air-gapped mirrors). Unset keeps the default registry (ghcr.io).
- include
Ctrf booleanReport - If true, the merged CTRF JSON report is stored in the
ctrfReportoutput. Default: false (state-size control; per-check results are always inphaseResults). - kubeconfig string
- Kubeconfig contents for the target cluster. Mutually exclusive with
kubeconfigPath. If neither is set, the ambient kubeconfig (KUBECONFIG env var or ~/.kube/config) is used. Written to a mode-0600 temp file for the duration of the run and removed afterward. - kubeconfig
Path string - Path to a kubeconfig file on disk. Mutually exclusive with
kubeconfig. - namespace string
- Namespace for the validation harness — use a dedicated one: it hosts the privileged agent and cluster-admin-bound validator Jobs. The SDK creates it on first run and deliberately never deletes it. Must be a valid DNS-1123 label and not a "kube-" system namespace. Default: "aicr-validation".
- node
Selector {[key: string]: string} - Node selector applied to the validation workload pods. Use when GPU nodes carry non-standard labels.
- phases string[]
- Validation phases to run: any of "deployment", "conformance", "performance". Default: ["deployment", "conformance"] — "performance" is an explicit opt-in (long-running and hardware-bound).
- recipe
Data stringVersion - Recipe-data version assertion (not a pin). When set, it must equal this
provider build's embedded AICR recipe-data version or Create fails before
any cluster work — wire
recipeDataVersion: stack.recipeVersionto catch a provider upgrade between deploy and validate. - require
Gpu boolean - Whether the snapshot agent requires GPU nodes. Set false for hardware-free clusters (kind). Default: true.
- strict boolean
- If true, a failed (or readiness-failed) validation fails the update while
still persisting the full results in state. The engine then re-runs
validation on every subsequent
pulumi upuntil it passes. Default: false — results are recorded and the update succeeds; read thestatusoutput. - timeout
Minutes number - Overall run timeout in minutes. Default: 30. Maximum: 1440 (24 hours).
- tolerations Toleration[]
- Tolerations applied to the validation workload pods (e.g. NCCL benchmark pods). Required in practice on tainted GPU node groups; when unset, the validator's default tolerate-all is kept.
- triggers any[]
- Arbitrary values; changing any of them replaces the resource and re-runs
validation (every input change does). Wire
triggers: [stack.deployedComponents]for re-validation cadence.
- criteria
Recipe
Criteria Args - Recipe criteria. Wire a ClusterStack's
criteriaoutput here, or build the object inline. - context str
- Kubeconfig context to select. Defaults to the kubeconfig's current-context.
- image_
pull_ Sequence[str]secrets - Names of image pull Secrets (in the validation namespace) for the validation pods.
- image_
registry str - Registry override for the snapshot-agent and validator images (air-gapped mirrors). Unset keeps the default registry (ghcr.io).
- include_
ctrf_ boolreport - If true, the merged CTRF JSON report is stored in the
ctrfReportoutput. Default: false (state-size control; per-check results are always inphaseResults). - kubeconfig str
- Kubeconfig contents for the target cluster. Mutually exclusive with
kubeconfigPath. If neither is set, the ambient kubeconfig (KUBECONFIG env var or ~/.kube/config) is used. Written to a mode-0600 temp file for the duration of the run and removed afterward. - kubeconfig_
path str - Path to a kubeconfig file on disk. Mutually exclusive with
kubeconfig. - namespace str
- Namespace for the validation harness — use a dedicated one: it hosts the privileged agent and cluster-admin-bound validator Jobs. The SDK creates it on first run and deliberately never deletes it. Must be a valid DNS-1123 label and not a "kube-" system namespace. Default: "aicr-validation".
- node_
selector Mapping[str, str] - Node selector applied to the validation workload pods. Use when GPU nodes carry non-standard labels.
- phases Sequence[str]
- Validation phases to run: any of "deployment", "conformance", "performance". Default: ["deployment", "conformance"] — "performance" is an explicit opt-in (long-running and hardware-bound).
- recipe_
data_ strversion - Recipe-data version assertion (not a pin). When set, it must equal this
provider build's embedded AICR recipe-data version or Create fails before
any cluster work — wire
recipeDataVersion: stack.recipeVersionto catch a provider upgrade between deploy and validate. - require_
gpu bool - Whether the snapshot agent requires GPU nodes. Set false for hardware-free clusters (kind). Default: true.
- strict bool
- If true, a failed (or readiness-failed) validation fails the update while
still persisting the full results in state. The engine then re-runs
validation on every subsequent
pulumi upuntil it passes. Default: false — results are recorded and the update succeeds; read thestatusoutput. - timeout_
minutes int - Overall run timeout in minutes. Default: 30. Maximum: 1440 (24 hours).
- tolerations
Sequence[Toleration
Args] - Tolerations applied to the validation workload pods (e.g. NCCL benchmark pods). Required in practice on tainted GPU node groups; when unset, the validator's default tolerate-all is kept.
- triggers Sequence[Any]
- Arbitrary values; changing any of them replaces the resource and re-runs
validation (every input change does). Wire
triggers: [stack.deployedComponents]for re-validation cadence.
- criteria Property Map
- Recipe criteria. Wire a ClusterStack's
criteriaoutput here, or build the object inline. - context String
- Kubeconfig context to select. Defaults to the kubeconfig's current-context.
- image
Pull List<String>Secrets - Names of image pull Secrets (in the validation namespace) for the validation pods.
- image
Registry String - Registry override for the snapshot-agent and validator images (air-gapped mirrors). Unset keeps the default registry (ghcr.io).
- include
Ctrf BooleanReport - If true, the merged CTRF JSON report is stored in the
ctrfReportoutput. Default: false (state-size control; per-check results are always inphaseResults). - kubeconfig String
- Kubeconfig contents for the target cluster. Mutually exclusive with
kubeconfigPath. If neither is set, the ambient kubeconfig (KUBECONFIG env var or ~/.kube/config) is used. Written to a mode-0600 temp file for the duration of the run and removed afterward. - kubeconfig
Path String - Path to a kubeconfig file on disk. Mutually exclusive with
kubeconfig. - namespace String
- Namespace for the validation harness — use a dedicated one: it hosts the privileged agent and cluster-admin-bound validator Jobs. The SDK creates it on first run and deliberately never deletes it. Must be a valid DNS-1123 label and not a "kube-" system namespace. Default: "aicr-validation".
- node
Selector Map<String> - Node selector applied to the validation workload pods. Use when GPU nodes carry non-standard labels.
- phases List<String>
- Validation phases to run: any of "deployment", "conformance", "performance". Default: ["deployment", "conformance"] — "performance" is an explicit opt-in (long-running and hardware-bound).
- recipe
Data StringVersion - Recipe-data version assertion (not a pin). When set, it must equal this
provider build's embedded AICR recipe-data version or Create fails before
any cluster work — wire
recipeDataVersion: stack.recipeVersionto catch a provider upgrade between deploy and validate. - require
Gpu Boolean - Whether the snapshot agent requires GPU nodes. Set false for hardware-free clusters (kind). Default: true.
- strict Boolean
- If true, a failed (or readiness-failed) validation fails the update while
still persisting the full results in state. The engine then re-runs
validation on every subsequent
pulumi upuntil it passes. Default: false — results are recorded and the update succeeds; read thestatusoutput. - timeout
Minutes Number - Overall run timeout in minutes. Default: 30. Maximum: 1440 (24 hours).
- tolerations List<Property Map>
- Tolerations applied to the validation workload pods (e.g. NCCL benchmark pods). Required in practice on tainted GPU node groups; when unset, the validator's default tolerate-all is kept.
- triggers List<Any>
- Arbitrary values; changing any of them replaces the resource and re-runs
validation (every input change does). Wire
triggers: [stack.deployedComponents]for re-validation cadence.
Outputs
All input properties are implicitly available as output properties. Additionally, the ValidationRun resource produces the following output properties:
- Completed
At string - When the run completed, RFC 3339.
- Failed int
- Number of checks that failed.
- Id string
- The provider-assigned unique ID for this managed resource.
- Other int
- Number of checks with an inconclusive outcome (crash, OOM, timeout; includes CTRF "pending").
- Passed int
- Number of checks that passed.
- Phase
Results List<Pulumi.Labs. Nvidia Aicr. Outputs. Check Result> - Per-check results across all phases run.
- Readiness
Message string - The readiness pre-flight failure message; empty unless status is "readiness-failed".
- Recipe
Name string - The resolved AICR recipe name that was validated.
- Recipe
Version string - The AICR recipe data version that was validated.
- Run
Id string - The run identifier labeling this run's cluster-side artifacts.
- Skipped int
- Number of checks that were skipped.
- Status string
- Rollup verdict: "passed", "failed", or "readiness-failed". Checks with status "other" never flip the rollup (they are counted and listed). Infrastructure errors have no status — they fail the update outright.
- Ctrf
Report string - The merged CTRF JSON report. Set only when
includeCtrfReportis true.
- Completed
At string - When the run completed, RFC 3339.
- Failed int
- Number of checks that failed.
- Id string
- The provider-assigned unique ID for this managed resource.
- Other int
- Number of checks with an inconclusive outcome (crash, OOM, timeout; includes CTRF "pending").
- Passed int
- Number of checks that passed.
- Phase
Results []CheckResult - Per-check results across all phases run.
- Readiness
Message string - The readiness pre-flight failure message; empty unless status is "readiness-failed".
- Recipe
Name string - The resolved AICR recipe name that was validated.
- Recipe
Version string - The AICR recipe data version that was validated.
- Run
Id string - The run identifier labeling this run's cluster-side artifacts.
- Skipped int
- Number of checks that were skipped.
- Status string
- Rollup verdict: "passed", "failed", or "readiness-failed". Checks with status "other" never flip the rollup (they are counted and listed). Infrastructure errors have no status — they fail the update outright.
- Ctrf
Report string - The merged CTRF JSON report. Set only when
includeCtrfReportis true.
- completed_
at string - When the run completed, RFC 3339.
- failed number
- Number of checks that failed.
- id string
- The provider-assigned unique ID for this managed resource.
- other number
- Number of checks with an inconclusive outcome (crash, OOM, timeout; includes CTRF "pending").
- passed number
- Number of checks that passed.
- phase_
results list(object) - Per-check results across all phases run.
- readiness_
message string - The readiness pre-flight failure message; empty unless status is "readiness-failed".
- recipe_
name string - The resolved AICR recipe name that was validated.
- recipe_
version string - The AICR recipe data version that was validated.
- run_
id string - The run identifier labeling this run's cluster-side artifacts.
- skipped number
- Number of checks that were skipped.
- status string
- Rollup verdict: "passed", "failed", or "readiness-failed". Checks with status "other" never flip the rollup (they are counted and listed). Infrastructure errors have no status — they fail the update outright.
- ctrf_
report string - The merged CTRF JSON report. Set only when
includeCtrfReportis true.
- completed
At String - When the run completed, RFC 3339.
- failed Integer
- Number of checks that failed.
- id String
- The provider-assigned unique ID for this managed resource.
- other Integer
- Number of checks with an inconclusive outcome (crash, OOM, timeout; includes CTRF "pending").
- passed Integer
- Number of checks that passed.
- phase
Results List<CheckResult> - Per-check results across all phases run.
- readiness
Message String - The readiness pre-flight failure message; empty unless status is "readiness-failed".
- recipe
Name String - The resolved AICR recipe name that was validated.
- recipe
Version String - The AICR recipe data version that was validated.
- run
Id String - The run identifier labeling this run's cluster-side artifacts.
- skipped Integer
- Number of checks that were skipped.
- status String
- Rollup verdict: "passed", "failed", or "readiness-failed". Checks with status "other" never flip the rollup (they are counted and listed). Infrastructure errors have no status — they fail the update outright.
- ctrf
Report String - The merged CTRF JSON report. Set only when
includeCtrfReportis true.
- completed
At string - When the run completed, RFC 3339.
- failed number
- Number of checks that failed.
- id string
- The provider-assigned unique ID for this managed resource.
- other number
- Number of checks with an inconclusive outcome (crash, OOM, timeout; includes CTRF "pending").
- passed number
- Number of checks that passed.
- phase
Results CheckResult[] - Per-check results across all phases run.
- readiness
Message string - The readiness pre-flight failure message; empty unless status is "readiness-failed".
- recipe
Name string - The resolved AICR recipe name that was validated.
- recipe
Version string - The AICR recipe data version that was validated.
- run
Id string - The run identifier labeling this run's cluster-side artifacts.
- skipped number
- Number of checks that were skipped.
- status string
- Rollup verdict: "passed", "failed", or "readiness-failed". Checks with status "other" never flip the rollup (they are counted and listed). Infrastructure errors have no status — they fail the update outright.
- ctrf
Report string - The merged CTRF JSON report. Set only when
includeCtrfReportis true.
- completed_
at str - When the run completed, RFC 3339.
- failed int
- Number of checks that failed.
- id str
- The provider-assigned unique ID for this managed resource.
- other int
- Number of checks with an inconclusive outcome (crash, OOM, timeout; includes CTRF "pending").
- passed int
- Number of checks that passed.
- phase_
results Sequence[CheckResult] - Per-check results across all phases run.
- readiness_
message str - The readiness pre-flight failure message; empty unless status is "readiness-failed".
- recipe_
name str - The resolved AICR recipe name that was validated.
- recipe_
version str - The AICR recipe data version that was validated.
- run_
id str - The run identifier labeling this run's cluster-side artifacts.
- skipped int
- Number of checks that were skipped.
- status str
- Rollup verdict: "passed", "failed", or "readiness-failed". Checks with status "other" never flip the rollup (they are counted and listed). Infrastructure errors have no status — they fail the update outright.
- ctrf_
report str - The merged CTRF JSON report. Set only when
includeCtrfReportis true.
- completed
At String - When the run completed, RFC 3339.
- failed Number
- Number of checks that failed.
- id String
- The provider-assigned unique ID for this managed resource.
- other Number
- Number of checks with an inconclusive outcome (crash, OOM, timeout; includes CTRF "pending").
- passed Number
- Number of checks that passed.
- phase
Results List<Property Map> - Per-check results across all phases run.
- readiness
Message String - The readiness pre-flight failure message; empty unless status is "readiness-failed".
- recipe
Name String - The resolved AICR recipe name that was validated.
- recipe
Version String - The AICR recipe data version that was validated.
- run
Id String - The run identifier labeling this run's cluster-side artifacts.
- skipped Number
- Number of checks that were skipped.
- status String
- Rollup verdict: "passed", "failed", or "readiness-failed". Checks with status "other" never flip the rollup (they are counted and listed). Infrastructure errors have no status — they fail the update outright.
- ctrf
Report String - The merged CTRF JSON report. Set only when
includeCtrfReportis true.
Supporting Types
CheckResult, CheckResultArgs
The outcome of one validator check.RecipeCriteria, RecipeCriteriaArgs
Recipe-selection criteria, mirroring ClusterStack's accelerator / service /
intent / os / platform / nodes inputs, plus the skipComponents the stack
deployed without. Wire a ClusterStack's criteria output here so deployment
and validation resolve the identical recipe and agree on which of its
components are in scope.- Accelerator string
- GPU accelerator type. Supported values: "h100", "gb200", "b200", "rtx-pro-6000" (eks/lke only).
- Intent string
- Workload intent. Supported values: "training", "inference".
- Service string
- Kubernetes service. Supported values: "aks", "bcm", "eks", "gke", "kind", "lke", "oke".
- Nodes int
- Worker-node count hint used to size the recipe.
- Os string
- Operating system flavor of the worker nodes. Leave unset for OS-agnostic resolution. Supported values: "ubuntu", "cos", "ol".
- Platform string
- ML platform/framework. Supported values: "kubeflow" (training), "dynamo" (inference), "nim" (inference, eks with h100 or rtx-pro-6000 only). kubeflow and dynamo have no recipes on lke/bcm.
- Skip
Components List<string> - Recipe components the stack intentionally did not deploy (ClusterStack's
skipComponents). ValidationRun treats them as out of scope rather than missing: checks that presuppose one of them (e.g. the gpu-operator health, DCGM metrics, and GPU-HPA checks when "gpu-operator" is skipped) are reported "skipped" with a reason instead of failing, and the SDK's component-aware checks see the components as disabled. A ClusterStack'scriteriaoutput carries its own skipComponents, so wiring it keeps validation aligned with the deployed subset automatically. Skipping does not verify a replacement you run yourself — those checks are simply not made.
- Accelerator string
- GPU accelerator type. Supported values: "h100", "gb200", "b200", "rtx-pro-6000" (eks/lke only).
- Intent string
- Workload intent. Supported values: "training", "inference".
- Service string
- Kubernetes service. Supported values: "aks", "bcm", "eks", "gke", "kind", "lke", "oke".
- Nodes int
- Worker-node count hint used to size the recipe.
- Os string
- Operating system flavor of the worker nodes. Leave unset for OS-agnostic resolution. Supported values: "ubuntu", "cos", "ol".
- Platform string
- ML platform/framework. Supported values: "kubeflow" (training), "dynamo" (inference), "nim" (inference, eks with h100 or rtx-pro-6000 only). kubeflow and dynamo have no recipes on lke/bcm.
- Skip
Components []string - Recipe components the stack intentionally did not deploy (ClusterStack's
skipComponents). ValidationRun treats them as out of scope rather than missing: checks that presuppose one of them (e.g. the gpu-operator health, DCGM metrics, and GPU-HPA checks when "gpu-operator" is skipped) are reported "skipped" with a reason instead of failing, and the SDK's component-aware checks see the components as disabled. A ClusterStack'scriteriaoutput carries its own skipComponents, so wiring it keeps validation aligned with the deployed subset automatically. Skipping does not verify a replacement you run yourself — those checks are simply not made.
- accelerator string
- GPU accelerator type. Supported values: "h100", "gb200", "b200", "rtx-pro-6000" (eks/lke only).
- intent string
- Workload intent. Supported values: "training", "inference".
- service string
- Kubernetes service. Supported values: "aks", "bcm", "eks", "gke", "kind", "lke", "oke".
- nodes number
- Worker-node count hint used to size the recipe.
- os string
- Operating system flavor of the worker nodes. Leave unset for OS-agnostic resolution. Supported values: "ubuntu", "cos", "ol".
- platform string
- ML platform/framework. Supported values: "kubeflow" (training), "dynamo" (inference), "nim" (inference, eks with h100 or rtx-pro-6000 only). kubeflow and dynamo have no recipes on lke/bcm.
- skip_
components list(string) - Recipe components the stack intentionally did not deploy (ClusterStack's
skipComponents). ValidationRun treats them as out of scope rather than missing: checks that presuppose one of them (e.g. the gpu-operator health, DCGM metrics, and GPU-HPA checks when "gpu-operator" is skipped) are reported "skipped" with a reason instead of failing, and the SDK's component-aware checks see the components as disabled. A ClusterStack'scriteriaoutput carries its own skipComponents, so wiring it keeps validation aligned with the deployed subset automatically. Skipping does not verify a replacement you run yourself — those checks are simply not made.
- accelerator String
- GPU accelerator type. Supported values: "h100", "gb200", "b200", "rtx-pro-6000" (eks/lke only).
- intent String
- Workload intent. Supported values: "training", "inference".
- service String
- Kubernetes service. Supported values: "aks", "bcm", "eks", "gke", "kind", "lke", "oke".
- nodes Integer
- Worker-node count hint used to size the recipe.
- os String
- Operating system flavor of the worker nodes. Leave unset for OS-agnostic resolution. Supported values: "ubuntu", "cos", "ol".
- platform String
- ML platform/framework. Supported values: "kubeflow" (training), "dynamo" (inference), "nim" (inference, eks with h100 or rtx-pro-6000 only). kubeflow and dynamo have no recipes on lke/bcm.
- skip
Components List<String> - Recipe components the stack intentionally did not deploy (ClusterStack's
skipComponents). ValidationRun treats them as out of scope rather than missing: checks that presuppose one of them (e.g. the gpu-operator health, DCGM metrics, and GPU-HPA checks when "gpu-operator" is skipped) are reported "skipped" with a reason instead of failing, and the SDK's component-aware checks see the components as disabled. A ClusterStack'scriteriaoutput carries its own skipComponents, so wiring it keeps validation aligned with the deployed subset automatically. Skipping does not verify a replacement you run yourself — those checks are simply not made.
- accelerator string
- GPU accelerator type. Supported values: "h100", "gb200", "b200", "rtx-pro-6000" (eks/lke only).
- intent string
- Workload intent. Supported values: "training", "inference".
- service string
- Kubernetes service. Supported values: "aks", "bcm", "eks", "gke", "kind", "lke", "oke".
- nodes number
- Worker-node count hint used to size the recipe.
- os string
- Operating system flavor of the worker nodes. Leave unset for OS-agnostic resolution. Supported values: "ubuntu", "cos", "ol".
- platform string
- ML platform/framework. Supported values: "kubeflow" (training), "dynamo" (inference), "nim" (inference, eks with h100 or rtx-pro-6000 only). kubeflow and dynamo have no recipes on lke/bcm.
- skip
Components string[] - Recipe components the stack intentionally did not deploy (ClusterStack's
skipComponents). ValidationRun treats them as out of scope rather than missing: checks that presuppose one of them (e.g. the gpu-operator health, DCGM metrics, and GPU-HPA checks when "gpu-operator" is skipped) are reported "skipped" with a reason instead of failing, and the SDK's component-aware checks see the components as disabled. A ClusterStack'scriteriaoutput carries its own skipComponents, so wiring it keeps validation aligned with the deployed subset automatically. Skipping does not verify a replacement you run yourself — those checks are simply not made.
- accelerator str
- GPU accelerator type. Supported values: "h100", "gb200", "b200", "rtx-pro-6000" (eks/lke only).
- intent str
- Workload intent. Supported values: "training", "inference".
- service str
- Kubernetes service. Supported values: "aks", "bcm", "eks", "gke", "kind", "lke", "oke".
- nodes int
- Worker-node count hint used to size the recipe.
- os str
- Operating system flavor of the worker nodes. Leave unset for OS-agnostic resolution. Supported values: "ubuntu", "cos", "ol".
- platform str
- ML platform/framework. Supported values: "kubeflow" (training), "dynamo" (inference), "nim" (inference, eks with h100 or rtx-pro-6000 only). kubeflow and dynamo have no recipes on lke/bcm.
- skip_
components Sequence[str] - Recipe components the stack intentionally did not deploy (ClusterStack's
skipComponents). ValidationRun treats them as out of scope rather than missing: checks that presuppose one of them (e.g. the gpu-operator health, DCGM metrics, and GPU-HPA checks when "gpu-operator" is skipped) are reported "skipped" with a reason instead of failing, and the SDK's component-aware checks see the components as disabled. A ClusterStack'scriteriaoutput carries its own skipComponents, so wiring it keeps validation aligned with the deployed subset automatically. Skipping does not verify a replacement you run yourself — those checks are simply not made.
- accelerator String
- GPU accelerator type. Supported values: "h100", "gb200", "b200", "rtx-pro-6000" (eks/lke only).
- intent String
- Workload intent. Supported values: "training", "inference".
- service String
- Kubernetes service. Supported values: "aks", "bcm", "eks", "gke", "kind", "lke", "oke".
- nodes Number
- Worker-node count hint used to size the recipe.
- os String
- Operating system flavor of the worker nodes. Leave unset for OS-agnostic resolution. Supported values: "ubuntu", "cos", "ol".
- platform String
- ML platform/framework. Supported values: "kubeflow" (training), "dynamo" (inference), "nim" (inference, eks with h100 or rtx-pro-6000 only). kubeflow and dynamo have no recipes on lke/bcm.
- skip
Components List<String> - Recipe components the stack intentionally did not deploy (ClusterStack's
skipComponents). ValidationRun treats them as out of scope rather than missing: checks that presuppose one of them (e.g. the gpu-operator health, DCGM metrics, and GPU-HPA checks when "gpu-operator" is skipped) are reported "skipped" with a reason instead of failing, and the SDK's component-aware checks see the components as disabled. A ClusterStack'scriteriaoutput carries its own skipComponents, so wiring it keeps validation aligned with the deployed subset automatically. Skipping does not verify a replacement you run yourself — those checks are simply not made.
Toleration, TolerationArgs
A Kubernetes pod toleration applied to validation workload pods.- Effect string
- The taint effect to match: "NoSchedule", "PreferNoSchedule", or "NoExecute". Empty matches all effects.
- Key string
- The taint key the toleration applies to. Empty means match all keys (with operator "Exists").
- Operator string
- Key-value relationship: "Exists" or "Equal". Default: "Equal".
- Toleration
Seconds int - How long the pod tolerates a "NoExecute" taint, in seconds.
- Value string
- The taint value to match (with operator "Equal").
- Effect string
- The taint effect to match: "NoSchedule", "PreferNoSchedule", or "NoExecute". Empty matches all effects.
- Key string
- The taint key the toleration applies to. Empty means match all keys (with operator "Exists").
- Operator string
- Key-value relationship: "Exists" or "Equal". Default: "Equal".
- Toleration
Seconds int - How long the pod tolerates a "NoExecute" taint, in seconds.
- Value string
- The taint value to match (with operator "Equal").
- effect string
- The taint effect to match: "NoSchedule", "PreferNoSchedule", or "NoExecute". Empty matches all effects.
- key string
- The taint key the toleration applies to. Empty means match all keys (with operator "Exists").
- operator string
- Key-value relationship: "Exists" or "Equal". Default: "Equal".
- toleration_
seconds number - How long the pod tolerates a "NoExecute" taint, in seconds.
- value string
- The taint value to match (with operator "Equal").
- effect String
- The taint effect to match: "NoSchedule", "PreferNoSchedule", or "NoExecute". Empty matches all effects.
- key String
- The taint key the toleration applies to. Empty means match all keys (with operator "Exists").
- operator String
- Key-value relationship: "Exists" or "Equal". Default: "Equal".
- toleration
Seconds Integer - How long the pod tolerates a "NoExecute" taint, in seconds.
- value String
- The taint value to match (with operator "Equal").
- effect string
- The taint effect to match: "NoSchedule", "PreferNoSchedule", or "NoExecute". Empty matches all effects.
- key string
- The taint key the toleration applies to. Empty means match all keys (with operator "Exists").
- operator string
- Key-value relationship: "Exists" or "Equal". Default: "Equal".
- toleration
Seconds number - How long the pod tolerates a "NoExecute" taint, in seconds.
- value string
- The taint value to match (with operator "Equal").
- effect str
- The taint effect to match: "NoSchedule", "PreferNoSchedule", or "NoExecute". Empty matches all effects.
- key str
- The taint key the toleration applies to. Empty means match all keys (with operator "Exists").
- operator str
- Key-value relationship: "Exists" or "Equal". Default: "Equal".
- toleration_
seconds int - How long the pod tolerates a "NoExecute" taint, in seconds.
- value str
- The taint value to match (with operator "Equal").
- effect String
- The taint effect to match: "NoSchedule", "PreferNoSchedule", or "NoExecute". Empty matches all effects.
- key String
- The taint key the toleration applies to. Empty means match all keys (with operator "Exists").
- operator String
- Key-value relationship: "Exists" or "Equal". Default: "Equal".
- toleration
Seconds Number - How long the pod tolerates a "NoExecute" taint, in seconds.
- value String
- The taint value to match (with operator "Equal").
Package Details
- Repository
- nvidia-aicr pulumi-labs/pulumi-nvidia-aicr
- License
- Apache-2.0
published on Monday, Aug 31, 2026 by Pulumi Labs