Skip to content

Can't use VM SizeSelector in nested outputs #786

@abatallas

Description

@abatallas

Hello,

I have the following output object in my uidefinition.json file:

"clusters": {
        "slurm": {
          "startCluster": "[steps('scheduler').clusterSettings.startCluster]",
          "version": "[steps('scheduler').schedulerSection.slurmVersion]",
          "healthCheckEnabled": "[steps('scheduler').clusterSettings.healthCheck]",
          "schedulerNode": {
            "sku": "[steps('scheduler').schedulerSection.vmsize]",
            "osImage": "[if(equals(steps('scheduler').schedulerSection.ImageName,'custom'),steps('scheduler').schedulerSection.customImageName,steps('scheduler').schedulerSection.ImageName)]"
          },
          "loginNodes": {
            "sku": "[steps('scheduler').loginNodesSection.vmsize]",
            "osImage": "[if(not(steps('scheduler').schedulerSection.universalImage),if(equals(steps('scheduler').loginNodesSection.ImageName,'custom'),steps('scheduler').loginNodesSection.customImageName,steps('scheduler').loginNodesSection.ImageName),if(equals(steps('scheduler').schedulerSection.ImageName,'custom'),steps('scheduler').schedulerSection.customImageName,steps('scheduler').schedulerSection.ImageName))]",
            "initialNodes": "[int(steps('scheduler').loginNodesSection.initialNodes)]",
            "maxNodes": "[int(steps('scheduler').loginNodesSection.maxNodes)]"
          },
          "htc": {
            "sku": "[steps('slurmSettings').HTCSection.vmsize]",
            "maxNodes": "[int(steps('slurmSettings').HTCSection.maxNodes)]",
            "osImage": "[if(not(steps('scheduler').schedulerSection.universalImage),if(equals(steps('slurmSettings').HTCSection.ImageName,'custom'),steps('slurmSettings').HTCSection.customImageName,steps('slurmSettings').HTCSection.ImageName),if(equals(steps('scheduler').schedulerSection.ImageName,'custom'),steps('scheduler').schedulerSection.customImageName,steps('scheduler').schedulerSection.ImageName))]",
            "useSpot": "[steps('slurmSettings').HTCSection.spotHTC]"
          },
          "hpc": {
            "sku": "[steps('slurmSettings').HPCSection.vmsize]",
            "maxNodes": "[int(steps('slurmSettings').HPCSection.maxNodes)]",
            "osImage": "[if(not(steps('scheduler').schedulerSection.universalImage),if(equals(steps('slurmSettings').HPCSection.ImageName,'custom'),steps('slurmSettings').HPCSection.customImageName,steps('slurmSettings').HPCSection.ImageName),if(equals(steps('scheduler').schedulerSection.ImageName,'custom'),steps('scheduler').schedulerSection.customImageName,steps('scheduler').schedulerSection.ImageName))]"
          },
          "gpu": {
            "sku": "[steps('slurmSettings').GPUSection.vmsize]",
            "maxNodes": "[int(steps('slurmSettings').GPUSection.maxNodes)]",
            "osImage": "[if(not(steps('scheduler').schedulerSection.universalImage),if(equals(steps('slurmSettings').GPUSection.ImageName,'custom'),steps('slurmSettings').GPUSection.customImageName,steps('slurmSettings').GPUSection.ImageName),if(equals(steps('scheduler').schedulerSection.ImageName,'custom'),steps('scheduler').schedulerSection.customImageName,steps('scheduler').schedulerSection.ImageName))]"
          }
        },
        "ood": {
          "type": "[if(steps('ood').OODSection.deployOOD,'enabled','disabled')]",
          "startCluster": "[if(steps('ood').OODSection.deployOOD,steps('ood').OODSection.startCluster,basics('nullValue'))]",
          "sku": "[if(steps('ood').OODSection.deployOOD,steps('ood').OODSection.vmsize,basics('nullValue'))]",
          "osImage": "[if(steps('ood').OODSection.deployOOD,if(equals(steps('ood').OODSection.ImageName,'custom'),steps('ood').OODSection.customImageName,steps('ood').OODSection.ImageName),basics('nullValue'))]",
          "userDomain": "[if(steps('ood').OODSection.deployOOD,steps('ood').OODSection.userDomain,basics('nullValue'))]",
          "fqdn": "[if(not(equals(steps('ood').OODSection.fqdn,'')),steps('ood').OODSection.fqdn,basics('nullValue'))]",
          "registerEntraIDApp": "[if(steps('ood').OODSection.deployOOD,equals(steps('ood').OODSection.registerEntraIDApp,'autoregister'),basics('nullValue'))]",
          "appId": "[if(equals(steps('ood').OODSection.registerEntraIDApp,'existing'),steps('ood').OODSection.clientId,basics('nullValue'))]",
          "appManagedIdentityId": "[if(equals(steps('ood').OODSection.registerEntraIDApp,'existing'),steps('ood').OODSection.managedIdentity.id,basics('nullValue'))]"
        }
      }

This fails validation because ARM-ttk doesn't recognize that the VM SizeSelector elements are present in the outputs when they're multiple levels deep into an object. Here's the result from using the above in a UI definition JSON:

Image

Validation passes, however, when one level deep into an object. For elucidation, the following passes:

"gpu": {
        "sku": "[steps('slurmSettings').GPUSection.vmsize]",
        "maxNodes": "[int(steps('slurmSettings').GPUSection.maxNodes)]",
        "osImage": "[if(not(steps('scheduler').schedulerSection.universalImage),if(equals(steps('slurmSettings').GPUSection.ImageName,'custom'),steps('slurmSettings').GPUSection.customImageName,steps('slurmSettings').GPUSection.ImageName),if(equals(steps('scheduler').schedulerSection.ImageName,'custom'),steps('scheduler').schedulerSection.customImageName,steps('scheduler').schedulerSection.ImageName))]"
      }

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions