CreateCluster

enum_SchedulerType := [ "SLURM" ]
enum_Size := [ "SMALL", "MEDIUM", "LARGE" ]

valid {
    input.Body.clusterName == STRING
    input.Body.scheduler.type == enum_SchedulerType[_]
    input.Body.scheduler.version == STRING
    input.Body.size == enum_Size[_]
    input.Body.networking.subnetIds[_] == STRING
    input.Body.networking.securityGroupIds[_] == STRING
    input.Body.slurmConfiguration.scaleDownIdleTimeInSeconds == INTEGER
    input.Body.slurmConfiguration.slurmCustomSettings[_].parameterName == STRING
    input.Body.slurmConfiguration.slurmCustomSettings[_].parameterValue == STRING
    input.Body.clientToken == STRING
    input.Body.tags.STRING == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateComputeNodeGroup

enum_PurchaseOption := [ "ONDEMAND", "SPOT" ]
enum_SpotAllocationStrategy := [ "lowest-price", "capacity-optimized", "price-capacity-optimized" ]

valid {
    input.Body.clusterIdentifier == STRING
    input.Body.computeNodeGroupName == STRING
    input.Body.amiId == STRING
    input.Body.subnetIds[_] == STRING
    input.Body.purchaseOption == enum_PurchaseOption[_]
    input.Body.customLaunchTemplate.id == STRING
    input.Body.customLaunchTemplate.version == STRING
    input.Body.iamInstanceProfileArn == STRING
    input.Body.scalingConfiguration.minInstanceCount == INTEGER
    input.Body.scalingConfiguration.maxInstanceCount == INTEGER
    input.Body.instanceConfigs[_].instanceType == STRING
    input.Body.spotOptions.allocationStrategy == enum_SpotAllocationStrategy[_]
    input.Body.slurmConfiguration.slurmCustomSettings[_].parameterName == STRING
    input.Body.slurmConfiguration.slurmCustomSettings[_].parameterValue == STRING
    input.Body.clientToken == STRING
    input.Body.tags.STRING == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateQueue

valid {
    input.Body.clusterIdentifier == STRING
    input.Body.queueName == STRING
    input.Body.computeNodeGroupConfigurations[_].computeNodeGroupId == STRING
    input.Body.clientToken == STRING
    input.Body.tags.STRING == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteCluster

valid {
    input.Body.clusterIdentifier == STRING
    input.Body.clientToken == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteComputeNodeGroup

valid {
    input.Body.clusterIdentifier == STRING
    input.Body.computeNodeGroupIdentifier == STRING
    input.Body.clientToken == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteQueue

valid {
    input.Body.clusterIdentifier == STRING
    input.Body.queueIdentifier == STRING
    input.Body.clientToken == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetCluster

valid {
    input.Body.clusterIdentifier == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetComputeNodeGroup

valid {
    input.Body.clusterIdentifier == STRING
    input.Body.computeNodeGroupIdentifier == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetQueue

valid {
    input.Body.clusterIdentifier == STRING
    input.Body.queueIdentifier == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListClusters

valid {
    input.Body.nextToken == STRING
    input.Body.maxResults == INTEGER
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListComputeNodeGroups

valid {
    input.Body.clusterIdentifier == STRING
    input.Body.nextToken == STRING
    input.Body.maxResults == INTEGER
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListQueues

valid {
    input.Body.clusterIdentifier == STRING
    input.Body.nextToken == STRING
    input.Body.maxResults == INTEGER
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListTagsForResource

valid {
    input.Body.resourceArn == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

RegisterComputeNodeGroupInstance

valid {
    input.Body.clusterIdentifier == STRING
    input.Body.bootstrapId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

TagResource

valid {
    input.Body.resourceArn == STRING
    input.Body.tags.STRING == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UntagResource

valid {
    input.Body.resourceArn == STRING
    input.Body.tagKeys[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateComputeNodeGroup

enum_PurchaseOption := [ "ONDEMAND", "SPOT" ]
enum_SpotAllocationStrategy := [ "lowest-price", "capacity-optimized", "price-capacity-optimized" ]

valid {
    input.Body.clusterIdentifier == STRING
    input.Body.computeNodeGroupIdentifier == STRING
    input.Body.amiId == STRING
    input.Body.subnetIds[_] == STRING
    input.Body.customLaunchTemplate.id == STRING
    input.Body.customLaunchTemplate.version == STRING
    input.Body.purchaseOption == enum_PurchaseOption[_]
    input.Body.spotOptions.allocationStrategy == enum_SpotAllocationStrategy[_]
    input.Body.scalingConfiguration.minInstanceCount == INTEGER
    input.Body.scalingConfiguration.maxInstanceCount == INTEGER
    input.Body.iamInstanceProfileArn == STRING
    input.Body.slurmConfiguration.slurmCustomSettings[_].parameterName == STRING
    input.Body.slurmConfiguration.slurmCustomSettings[_].parameterValue == STRING
    input.Body.clientToken == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateQueue

valid {
    input.Body.clusterIdentifier == STRING
    input.Body.queueIdentifier == STRING
    input.Body.computeNodeGroupConfigurations[_].computeNodeGroupId == STRING
    input.Body.clientToken == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}