diff --git a/Makefile b/Makefile index d230b00..8e96e46 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ export TERRAFORM_VERSION ?= 1.3.3 export TERRAFORM_PROVIDER_SOURCE ?= castai/castai export TERRAFORM_PROVIDER_REPO ?= https://github.com/castai/terraform-provider-castai -export TERRAFORM_PROVIDER_VERSION ?= 6.7.1 +export TERRAFORM_PROVIDER_VERSION ?= 6.10.0 export TERRAFORM_PROVIDER_DOWNLOAD_NAME ?= terraform-provider-castai export TERRAFORM_PROVIDER_DOWNLOAD_URL_PREFIX ?= https://releases.hashicorp.com/$(TERRAFORM_PROVIDER_DOWNLOAD_NAME)/$(TERRAFORM_PROVIDER_VERSION) export TERRAFORM_NATIVE_PROVIDER_BINARY ?= terraform-provider-castai_v6.7.1 diff --git a/apis/castai/v1alpha1/zz_generated.deepcopy.go b/apis/castai/v1alpha1/zz_generated.deepcopy.go index ffcd6db..9d3fcc6 100644 --- a/apis/castai/v1alpha1/zz_generated.deepcopy.go +++ b/apis/castai/v1alpha1/zz_generated.deepcopy.go @@ -740,6 +740,17 @@ func (in *ConstraintsInitParameters) DeepCopyInto(out *ConstraintsInitParameters } } } + if in.Azs != nil { + in, out := &in.Azs, &out.Azs + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } if in.ComputeOptimized != nil { in, out := &in.ComputeOptimized, &out.ComputeOptimized *out = new(bool) @@ -880,6 +891,17 @@ func (in *ConstraintsObservation) DeepCopyInto(out *ConstraintsObservation) { } } } + if in.Azs != nil { + in, out := &in.Azs, &out.Azs + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } if in.ComputeOptimized != nil { in, out := &in.ComputeOptimized, &out.ComputeOptimized *out = new(bool) @@ -1020,6 +1042,17 @@ func (in *ConstraintsParameters) DeepCopyInto(out *ConstraintsParameters) { } } } + if in.Azs != nil { + in, out := &in.Azs, &out.Azs + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } if in.ComputeOptimized != nil { in, out := &in.ComputeOptimized, &out.ComputeOptimized *out = new(bool) @@ -2949,6 +2982,17 @@ func (in *GkeInitParameters) DeepCopyInto(out *GkeInitParameters) { } } } + if in.Zones != nil { + in, out := &in.Zones, &out.Zones + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GkeInitParameters. @@ -2985,6 +3029,17 @@ func (in *GkeObservation) DeepCopyInto(out *GkeObservation) { } } } + if in.Zones != nil { + in, out := &in.Zones, &out.Zones + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GkeObservation. @@ -3021,6 +3076,17 @@ func (in *GkeParameters) DeepCopyInto(out *GkeParameters) { } } } + if in.Zones != nil { + in, out := &in.Zones, &out.Zones + *out = make([]*string, len(*in)) + for i := range *in { + if (*in)[i] != nil { + in, out := &(*in)[i], &(*out)[i] + *out = new(string) + **out = **in + } + } + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GkeParameters. diff --git a/apis/castai/v1alpha1/zz_nodeconfiguration_types.go b/apis/castai/v1alpha1/zz_nodeconfiguration_types.go index 2b507b7..787e54b 100755 --- a/apis/castai/v1alpha1/zz_nodeconfiguration_types.go +++ b/apis/castai/v1alpha1/zz_nodeconfiguration_types.go @@ -213,6 +213,10 @@ type GkeInitParameters struct { // (List of String) Network tags to be added on a VM. (See network tags) // Network tags to be added on a VM. (See [network tags](https://cloud.google.com/vpc/docs/add-remove-network-tags)) NetworkTags []*string `json:"networkTags,omitempty" tf:"network_tags,omitempty"` + + // (List of String, Deprecated) List of preferred availability zones to choose from when provisioning new nodes. + // List of preferred availability zones to choose from when provisioning new nodes. + Zones []*string `json:"zones,omitempty" tf:"zones,omitempty"` } type GkeObservation struct { @@ -228,6 +232,10 @@ type GkeObservation struct { // (List of String) Network tags to be added on a VM. (See network tags) // Network tags to be added on a VM. (See [network tags](https://cloud.google.com/vpc/docs/add-remove-network-tags)) NetworkTags []*string `json:"networkTags,omitempty" tf:"network_tags,omitempty"` + + // (List of String, Deprecated) List of preferred availability zones to choose from when provisioning new nodes. + // List of preferred availability zones to choose from when provisioning new nodes. + Zones []*string `json:"zones,omitempty" tf:"zones,omitempty"` } type GkeParameters struct { @@ -246,6 +254,11 @@ type GkeParameters struct { // Network tags to be added on a VM. (See [network tags](https://cloud.google.com/vpc/docs/add-remove-network-tags)) // +kubebuilder:validation:Optional NetworkTags []*string `json:"networkTags,omitempty" tf:"network_tags,omitempty"` + + // (List of String, Deprecated) List of preferred availability zones to choose from when provisioning new nodes. + // List of preferred availability zones to choose from when provisioning new nodes. + // +kubebuilder:validation:Optional + Zones []*string `json:"zones,omitempty" tf:"zones,omitempty"` } type KopsInitParameters struct { diff --git a/apis/castai/v1alpha1/zz_nodetemplate_types.go b/apis/castai/v1alpha1/zz_nodetemplate_types.go index 2243f79..12237fb 100755 --- a/apis/castai/v1alpha1/zz_nodetemplate_types.go +++ b/apis/castai/v1alpha1/zz_nodetemplate_types.go @@ -57,6 +57,9 @@ type ConstraintsInitParameters struct { // List of acceptable instance CPU architectures, the default is amd64. Allowed values: amd64, arm64. Architectures []*string `json:"architectures,omitempty" tf:"architectures,omitempty"` + // The list of AZ names to consider for the node template, if empty or not set all AZs are considered. + Azs []*string `json:"azs,omitempty" tf:"azs,omitempty"` + // Compute optimized instance constraint - will only pick compute optimized nodes if true. ComputeOptimized *bool `json:"computeOptimized,omitempty" tf:"compute_optimized,omitempty"` @@ -125,6 +128,9 @@ type ConstraintsObservation struct { // List of acceptable instance CPU architectures, the default is amd64. Allowed values: amd64, arm64. Architectures []*string `json:"architectures,omitempty" tf:"architectures,omitempty"` + // The list of AZ names to consider for the node template, if empty or not set all AZs are considered. + Azs []*string `json:"azs,omitempty" tf:"azs,omitempty"` + // Compute optimized instance constraint - will only pick compute optimized nodes if true. ComputeOptimized *bool `json:"computeOptimized,omitempty" tf:"compute_optimized,omitempty"` @@ -194,6 +200,10 @@ type ConstraintsParameters struct { // +kubebuilder:validation:Optional Architectures []*string `json:"architectures,omitempty" tf:"architectures,omitempty"` + // The list of AZ names to consider for the node template, if empty or not set all AZs are considered. + // +kubebuilder:validation:Optional + Azs []*string `json:"azs,omitempty" tf:"azs,omitempty"` + // Compute optimized instance constraint - will only pick compute optimized nodes if true. // +kubebuilder:validation:Optional ComputeOptimized *bool `json:"computeOptimized,omitempty" tf:"compute_optimized,omitempty"` diff --git a/cluster/images/crossplane-provider-castai/Makefile b/cluster/images/crossplane-provider-castai/Makefile index 81d1311..1c96c4e 100755 --- a/cluster/images/crossplane-provider-castai/Makefile +++ b/cluster/images/crossplane-provider-castai/Makefile @@ -8,6 +8,16 @@ include ../../../build/makelib/common.mk include ../../../build/makelib/imagelight.mk +# ==================================================================================== +# Setup k8s tools + +-include ../../../build/makelib/k8s_tools.mk + +# ==================================================================================== +# Setup xpkg + +-include ../../../build/makelib/xpkg.mk + # ==================================================================================== # Targets diff --git a/config/provider-metadata.yaml b/config/provider-metadata.yaml index a05886a..f923bb7 100644 --- a/config/provider-metadata.yaml +++ b/config/provider-metadata.yaml @@ -58,6 +58,101 @@ resources: timeouts: (Block, Optional) (see below for nested schema) update: (String) importStatements: [] + castai_commitments: + subCategory: "" + description: Commitments represent cloud service provider reserved instances (Azure) and commited use discounts (GCP) that can be used by CAST AI autoscaler. + name: castai_commitments + title: castai_commitments Resource - terraform-provider-castai + examples: + - name: gcp_test + manifest: |- + { + "commitment_configs": [ + { + "allowed_usage": 0.6, + "assignments": [ + { + "cluster_id": "cluster-id-1" + }, + { + "cluster_id": "cluster-id-2" + } + ], + "matcher": [ + { + "name": "test", + "region": "us-east4", + "type": "COMPUTE_OPTIMIZED_C2D" + } + ], + "prioritization": true, + "status": "Inactive" + } + ], + "gcp_cuds_json": "${file(\"./cuds.json\")}" + } + - name: azure_test + manifest: |- + { + "azure_reservations_csv": "${file(\"./reservations.csv\")}", + "commitment_configs": [ + { + "allowed_usage": 0.9, + "assignments": [ + { + "cluster_id": "cluster-id-3" + }, + { + "cluster_id": "cluster-id-4" + } + ], + "matcher": [ + { + "name": "test-res-1", + "region": "eastus", + "type": "Standard_D32as_v4" + } + ], + "prioritization": false, + "status": "Active" + } + ] + } + argumentDocs: + allowed_usage: (Number) Allowed usage of the commitment. The value is between 0 (0%) and 1 (100%). + assignments: (Block List) List of assigned clusters for the commitment. If prioritization is enabled, the order of the assignments indicates the priority. The first assignment has the highest priority. (see below for nested schema) + azure_reservations: (List of Object) List of Azure reservations. (see below for nested schema) + azure_reservations_csv: (String) CSV file containing reservations exported from Azure. + cluster_id: (String) ID of the cluster to assign the commitment to. + commitment_configs: (Block List) List of commitment configurations. (see below for nested schema) + count: (Number) + cpu: (Number) + create: (String) + cud_id: (String) + cud_status: (String) + end_timestamp: (String) + gcp_cuds: (List of Object) List of GCP CUDs. (see below for nested schema) + gcp_cuds_json: (String) JSON file containing CUDs exported from GCP. + id: (String) The ID of this resource. + instance_type: (String) + matcher: '(Block List, Min: 1, Max: 1) Matcher used to map config to a commitment. (see below for nested schema)' + memory_mb: (Number) + name: (String) Name of the commitment to match. + plan: (String) + prioritization: (Boolean) If enabled, it's possible to assign priorities to the assigned clusters. + priority: (Number) Priority of the assignment. The lower the value, the higher the priority. 1 is the highest priority. + region: (String) Region of the commitment to match. + reservation_id: (String) + reservation_status: (String) + scope: (String) + scope_resource_group: (String) + scope_subscription: (String) + start_timestamp: (String) + status: (String) Status of the commitment in CAST AI. + timeouts: (Block, Optional) (see below for nested schema) + type: (String) Type of the commitment to match. For compute resources, it's the type of the machine. + update: (String) + importStatements: [] castai_eks_cluster: subCategory: "" description: EKS cluster resource allows connecting an existing EKS cluster to CAST AI. @@ -249,6 +344,7 @@ resources: volume_kms_key_arn: (String) AWS KMS key ARN for encrypting EBS volume attached to the node volume_throughput: (Number) AWS EBS volume throughput in MiB/s to be used for CAST provisioned nodes volume_type: '(String) AWS EBS volume type to be used for CAST provisioned nodes. One of: gp3, io1, io2' + zones: (List of String, Deprecated) List of preferred availability zones to choose from when provisioning new nodes. importStatements: - $ terraform import castai_node_configuration.default /default - $ terraform import 'module.castai-eks-cluster.castai_node_configuration.this["default"]' /default @@ -284,6 +380,7 @@ resources: affinity: (Block List) (see below for nested schema) architectures: '(List of String) List of acceptable instance CPU architectures, the default is amd64. Allowed values: amd64, arm64.' az_name: (String) Availability zone name. + azs: (List of String) The list of AZ names to consider for the node template, if empty or not set all AZs are considered. cluster_id: (String) CAST AI cluster id. compute_optimized: (Boolean) Compute optimized instance constraint - will only pick compute optimized nodes if true. configuration_id: (String) CAST AI node configuration id to be used for node template. diff --git a/config/schema.json b/config/schema.json index 191b609..c80d330 100644 --- a/config/schema.json +++ b/config/schema.json @@ -1 +1 @@ -{"format_version":"1.0","provider_schemas":{"registry.terraform.io/castai/castai":{"provider":{"version":0,"block":{"attributes":{"api_token":{"type":"string","description":"The token used to connect to CAST AI API.","description_kind":"plain","required":true},"api_url":{"type":"string","description":"CAST.AI API url.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"resource_schemas":{"castai_aks_cluster":{"version":0,"block":{"attributes":{"client_id":{"type":"string","description":"Azure AD application ID that is created and used by CAST AI.","description_kind":"plain","required":true},"client_secret":{"type":"string","description":"Azure AD application password that will be used by CAST AI.","description_kind":"plain","required":true,"sensitive":true},"cluster_token":{"type":"string","description":"CAST AI cluster token.","description_kind":"plain","computed":true,"sensitive":true},"credentials_id":{"type":"string","description":"CAST AI internal credentials ID","description_kind":"plain","computed":true},"delete_nodes_on_disconnect":{"type":"bool","description":"Should CAST AI remove nodes managed by CAST.AI on disconnect.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"AKS cluster name.","description_kind":"plain","required":true},"node_resource_group":{"type":"string","description":"Azure resource group in which nodes are and will be created.","description_kind":"plain","required":true},"region":{"type":"string","description":"AKS cluster region.","description_kind":"plain","required":true},"subscription_id":{"type":"string","description":"ID of the Azure subscription.","description_kind":"plain","required":true},"tenant_id":{"type":"string","description":"Azure AD tenant ID from the used subscription.","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"AKS cluster resource allows connecting an existing AKS cluster to CAST AI.","description_kind":"plain"}},"castai_autoscaler":{"version":0,"block":{"attributes":{"autoscaler_policies":{"type":"string","description":"computed value to store full policies configuration","description_kind":"plain","computed":true},"autoscaler_policies_json":{"type":"string","description":"autoscaler policies JSON string to override current autoscaler settings","description_kind":"plain","optional":true},"cluster_id":{"type":"string","description":"CAST AI cluster id","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"CAST AI autoscaler resource to manage autoscaler settings","description_kind":"plain"}},"castai_eks_cluster":{"version":0,"block":{"attributes":{"account_id":{"type":"string","description":"ID of AWS account","description_kind":"plain","required":true},"assume_role_arn":{"type":"string","description":"AWS IAM role ARN that will be assumed by CAST AI user. This role should allow `sts:AssumeRole` action for CAST AI user that can be retrieved using `castai_eks_user_arn` data source","description_kind":"plain","optional":true},"cluster_token":{"type":"string","description":"computed value to store cluster token","description_kind":"plain","computed":true,"sensitive":true},"credentials_id":{"type":"string","description":"CAST AI internal credentials ID","description_kind":"plain","computed":true},"delete_nodes_on_disconnect":{"type":"bool","description":"Should CAST AI remove nodes managed by CAST AI on disconnect","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"name of your EKS cluster","description_kind":"plain","required":true},"region":{"type":"string","description":"AWS region where the cluster is placed","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"EKS cluster resource allows connecting an existing EKS cluster to CAST AI.","description_kind":"plain"}},"castai_eks_clusterid":{"version":0,"block":{"attributes":{"account_id":{"type":"string","description_kind":"plain","required":true},"cluster_name":{"type":"string","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"castai_eks_user_arn":{"version":0,"block":{"attributes":{"arn":{"type":"string","description_kind":"plain","computed":true},"cluster_id":{"type":"string","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"castai_evictor_advanced_config":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"CAST AI cluster id.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"block_types":{"evictor_advanced_config":{"nesting_mode":"list","block":{"attributes":{"aggressive":{"type":"bool","description_kind":"plain","optional":true},"disposable":{"type":"bool","description_kind":"plain","optional":true},"removal_disabled":{"type":"bool","description_kind":"plain","optional":true}},"block_types":{"node_selector":{"nesting_mode":"list","block":{"attributes":{"match_labels":{"type":["map","string"],"description_kind":"plain","optional":true}},"block_types":{"match_expressions":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description_kind":"plain","required":true},"operator":{"type":"string","description_kind":"plain","required":true},"values":{"type":["list","string"],"description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"node selector","description_kind":"plain"}},"pod_selector":{"nesting_mode":"list","block":{"attributes":{"kind":{"type":"string","description_kind":"plain","optional":true},"match_labels":{"type":["map","string"],"description_kind":"plain","optional":true},"namespace":{"type":"string","description_kind":"plain","optional":true}},"block_types":{"match_expressions":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description_kind":"plain","required":true},"operator":{"type":"string","description_kind":"plain","required":true},"values":{"type":["list","string"],"description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"pod selector","description_kind":"plain"}}},"description":"evictor advanced configuration to target specific node/pod","description_kind":"plain"},"min_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"CAST AI eviction config resource to manage evictor properties ","description_kind":"plain"}},"castai_gke_cluster":{"version":0,"block":{"attributes":{"cluster_token":{"type":"string","description":"CAST.AI agent cluster token","description_kind":"plain","computed":true,"sensitive":true},"credentials_id":{"type":"string","description":"CAST AI credentials id for cluster","description_kind":"plain","computed":true},"credentials_json":{"type":"string","description":"GCP credentials.json from ServiceAccount with credentials for CAST AI","description_kind":"plain","optional":true,"sensitive":true},"delete_nodes_on_disconnect":{"type":"bool","description":"Should CAST AI remove nodes managed by CAST.AI on disconnect","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"location":{"type":"string","description":"GCP cluster zone in case of zonal or region in case of regional cluster","description_kind":"plain","required":true},"name":{"type":"string","description":"GKE cluster name","description_kind":"plain","required":true},"project_id":{"type":"string","description":"GCP project id","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"GKE cluster resource allows connecting an existing GKE cluster to CAST AI.","description_kind":"plain"}},"castai_node_configuration":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"CAST AI cluster id","description_kind":"plain","required":true},"container_runtime":{"type":"string","description":"Optional container runtime to be used by kubelet. Applicable for EKS only. Supported values include: `dockerd`, `containerd`","description_kind":"plain","optional":true},"disk_cpu_ratio":{"type":"number","description":"Disk to CPU ratio. Sets the number of GiBs to be added for every CPU on the node. Defaults to 0","description_kind":"plain","optional":true},"docker_config":{"type":"string","description":"Optional docker daemon configuration properties in JSON format. Provide only properties that you want to override. Applicable for EKS only. [Available values](https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file)","description_kind":"plain","optional":true},"drain_timeout_sec":{"type":"number","description":"Timeout in seconds for draining the node. Defaults to 0","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"image":{"type":"string","description":"Image to be used while provisioning the node. If nothing is provided will be resolved to latest available image based on Kubernetes version if possible ","description_kind":"plain","optional":true},"init_script":{"type":"string","description":"Init script to be run on your instance at launch. Should not contain any sensitive data. Value should be base64 encoded","description_kind":"plain","optional":true},"kubelet_config":{"type":"string","description":"Optional kubelet configuration properties in JSON format. Provide only properties that you want to override. Applicable for EKS only. [Available values](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/)","description_kind":"plain","optional":true},"min_disk_size":{"type":"number","description":"Minimal disk size in GiB. Defaults to 100, min 30, max 65536","description_kind":"plain","optional":true},"name":{"type":"string","description":"Name of the node configuration. It must be unique within the cluster. In case of cluster is reonboarded to Terraform, when previously it was onboarded with CAST AI UI, and the name corresponds to previously created node configuration this resource will override existing configuration instead of creating new.","description_kind":"plain","required":true},"ssh_public_key":{"type":"string","description":"SSH public key to be used for provisioned nodes","description_kind":"plain","optional":true},"subnets":{"type":["list","string"],"description":"Subnet ids to be used for provisioned nodes","description_kind":"plain","required":true},"tags":{"type":["map","string"],"description":"Tags to be added on cloud instances for provisioned nodes","description_kind":"plain","optional":true}},"block_types":{"aks":{"nesting_mode":"list","block":{"attributes":{"max_pods_per_node":{"type":"number","description":"Maximum number of pods that can be run on a node, which affects how many IP addresses you will need for each node. Defaults to 30","description_kind":"plain","optional":true},"os_disk_type":{"type":"string","description":"Type of managed os disk attached to the node. (See [disk types](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types)). One of: standard, standard-ssd, premium-ssd (ultra and premium-ssd-v2 are not supported for os disk)","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1},"eks":{"nesting_mode":"list","block":{"attributes":{"dns_cluster_ip":{"type":"string","description":"IP address to use for DNS queries within the cluster","description_kind":"plain","optional":true},"imds_hop_limit":{"type":"number","description":"Allow configure the IMDSv2 hop limit, the default is 2","description_kind":"plain","optional":true},"imds_v1":{"type":"bool","description":"When the value is true both IMDSv1 and IMDSv2 are enabled. Setting the value to false disables permanently IMDSv1 and might affect legacy workloads running on the node created with this configuration. The default is true if the flag isn't provided","description_kind":"plain","optional":true},"instance_profile_arn":{"type":"string","description":"Cluster's instance profile ARN used for CAST provisioned nodes","description_kind":"plain","required":true},"key_pair_id":{"type":"string","description":"AWS key pair ID to be used for CAST provisioned nodes. Has priority over ssh_public_key","description_kind":"plain","optional":true},"security_groups":{"type":["list","string"],"description":"Cluster's security groups configuration for CAST provisioned nodes","description_kind":"plain","required":true},"volume_iops":{"type":"number","description":"AWS EBS volume IOPS to be used for CAST provisioned nodes","description_kind":"plain","optional":true},"volume_kms_key_arn":{"type":"string","description":"AWS KMS key ARN for encrypting EBS volume attached to the node","description_kind":"plain","optional":true},"volume_throughput":{"type":"number","description":"AWS EBS volume throughput in MiB/s to be used for CAST provisioned nodes","description_kind":"plain","optional":true},"volume_type":{"type":"string","description":"AWS EBS volume type to be used for CAST provisioned nodes. One of: gp3, io1, io2","description_kind":"plain","optional":true}},"block_types":{"target_group":{"nesting_mode":"list","block":{"attributes":{"arn":{"type":"string","description":"AWS target group ARN for CAST provisioned nodes","description_kind":"plain","required":true},"port":{"type":"number","description":"Port for AWS target group for CAST provisioned nodes","description_kind":"plain","optional":true}},"description":"AWS target group configuration for CAST provisioned nodes","description_kind":"plain"},"max_items":1}},"description_kind":"plain"},"max_items":1},"gke":{"nesting_mode":"list","block":{"attributes":{"disk_type":{"type":"string","description":"Type of boot disk attached to the node. (See [disk types](https://cloud.google.com/compute/docs/disks#pdspecs)). One of: pd-standard, pd-balanced, pd-ssd, pd-extreme ","description_kind":"plain","optional":true},"max_pods_per_node":{"type":"number","description":"Maximum number of pods that can be run on a node, which affects how many IP addresses you will need for each node. Defaults to 110","description_kind":"plain","optional":true},"network_tags":{"type":["list","string"],"description":"Network tags to be added on a VM. (See [network tags](https://cloud.google.com/vpc/docs/add-remove-network-tags))","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1},"kops":{"nesting_mode":"list","block":{"attributes":{"key_pair_id":{"type":"string","description":"AWS key pair ID to be used for provisioned nodes. Has priority over sshPublicKey","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Create node configuration for given cluster. Node configuration [reference](https://docs.cast.ai/docs/node-configuration)","description_kind":"plain"}},"castai_node_configuration_default":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"CAST AI cluster id","description_kind":"plain","required":true},"configuration_id":{"type":"string","description":"Id of the node configuration","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"castai_node_template":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"CAST AI cluster id.","description_kind":"plain","optional":true},"configuration_id":{"type":"string","description":"CAST AI node configuration id to be used for node template.","description_kind":"plain","optional":true},"custom_instances_enabled":{"type":"bool","description":"Marks whether custom instances should be used when deciding which parts of inventory are available. Custom instances are only supported in GCP.","description_kind":"plain","optional":true},"custom_instances_with_extended_memory_enabled":{"type":"bool","description":"Marks whether custom instances with extended memory should be used when deciding which parts of inventory are available. Custom instances are only supported in GCP.","description_kind":"plain","optional":true},"custom_labels":{"type":["map","string"],"description":"Custom labels to be added to nodes created from this template.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_default":{"type":"bool","description":"Flag whether the node template is default.","description_kind":"plain","optional":true},"is_enabled":{"type":"bool","description":"Flag whether the node template is enabled and considered for autoscaling.","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the node template.","description_kind":"plain","required":true},"rebalancing_config_min_nodes":{"type":"number","description":"Minimum nodes that will be kept when rebalancing nodes using this node template.","description_kind":"plain","optional":true},"should_taint":{"type":"bool","description":"Marks whether the templated nodes will have a taint.","description_kind":"plain","optional":true}},"block_types":{"constraints":{"nesting_mode":"list","block":{"attributes":{"architectures":{"type":["list","string"],"description":"List of acceptable instance CPU architectures, the default is amd64. Allowed values: amd64, arm64.","description_kind":"plain","optional":true,"computed":true},"compute_optimized":{"type":"bool","description":"Compute optimized instance constraint - will only pick compute optimized nodes if true.","description_kind":"plain","optional":true},"enable_spot_diversity":{"type":"bool","description":"Enable/disable spot diversity policy. When enabled, autoscaler will try to balance between diverse and cost optimal instance types.","description_kind":"plain","optional":true},"fallback_restore_rate_seconds":{"type":"number","description":"Fallback restore rate in seconds: defines how much time should pass before spot fallback should be attempted to be restored to real spot.","description_kind":"plain","optional":true},"is_gpu_only":{"type":"bool","description":"GPU instance constraint - will only pick nodes with GPU if true","description_kind":"plain","optional":true},"max_cpu":{"type":"number","description":"Max CPU cores per node.","description_kind":"plain","optional":true},"max_memory":{"type":"number","description":"Max Memory (Mib) per node.","description_kind":"plain","optional":true},"min_cpu":{"type":"number","description":"Min CPU cores per node.","description_kind":"plain","optional":true},"min_memory":{"type":"number","description":"Min Memory (Mib) per node.","description_kind":"plain","optional":true},"on_demand":{"type":"bool","description":"Should include on-demand instances in the considered pool.","description_kind":"plain","optional":true,"computed":true},"os":{"type":["list","string"],"description":"List of acceptable instance Operating Systems, the default is linux. Allowed values: linux, windows.","description_kind":"plain","optional":true,"computed":true},"spot":{"type":"bool","description":"Should include spot instances in the considered pool.","description_kind":"plain","optional":true},"spot_diversity_price_increase_limit_percent":{"type":"number","description":"Allowed node configuration price increase when diversifying instance types. E.g. if the value is 10%, then the overall price of diversified instance types can be 10% higher than the price of the optimal configuration.","description_kind":"plain","optional":true},"spot_interruption_predictions_enabled":{"type":"bool","description":"Enable/disable spot interruption predictions.","description_kind":"plain","optional":true},"spot_interruption_predictions_type":{"type":"string","description":"Spot interruption predictions type. Can be either \"aws-rebalance-recommendations\" or \"interruption-predictions\".","description_kind":"plain","optional":true},"storage_optimized":{"type":"bool","description":"Storage optimized instance constraint - will only pick storage optimized nodes if true","description_kind":"plain","optional":true},"use_spot_fallbacks":{"type":"bool","description":"Spot instance fallback constraint - when true, on-demand instances will be created, when spots are unavailable.","description_kind":"plain","optional":true}},"block_types":{"custom_priority":{"nesting_mode":"list","block":{"attributes":{"instance_families":{"type":["list","string"],"description":"Instance families to prioritize in this tier.","description_kind":"plain","optional":true},"on_demand":{"type":"bool","description":"If true, this tier will apply to on-demand instances.","description_kind":"plain","optional":true},"spot":{"type":"bool","description":"If true, this tier will apply to spot instances.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"dedicated_node_affinity":{"nesting_mode":"list","block":{"attributes":{"az_name":{"type":"string","description":"Availability zone name.","description_kind":"plain","required":true},"instance_types":{"type":["list","string"],"description":"Instance/node types in this node group.","description_kind":"plain","required":true},"name":{"type":"string","description":"Name of node group.","description_kind":"plain","required":true}},"block_types":{"affinity":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Key of the node affinity selector.","description_kind":"plain","required":true},"operator":{"type":"string","description":"Operator of the node affinity selector. Allowed values: In, NotIn, Exists, DoesNotExist, Gt, Lt.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"Values of the node affinity selector.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description":"Dedicated node affinity - creates preference for instances to be created on sole tenancy or dedicated nodes. This\n feature is only available for GCP clusters and sole tenancy nodes with local\n SSDs or GPUs are not supported. If the sole tenancy or dedicated nodes don't have capacity for selected instance\n type, the Autoscaler will fall back to multi-tenant instance types available for this Node Template.\n Other instance constraints are applied when the Autoscaler picks available instance types that can be created on\n the sole tenancy or dedicated node (example: setting min CPU to 16).","description_kind":"plain"}},"gpu":{"nesting_mode":"list","block":{"attributes":{"exclude_names":{"type":["list","string"],"description":"Names of the GPUs to exclude.","description_kind":"plain","optional":true},"include_names":{"type":["list","string"],"description":"Instance families to include when filtering (excludes all other families).","description_kind":"plain","optional":true},"manufacturers":{"type":["list","string"],"description":"Manufacturers of the gpus to select - NVIDIA, AMD.","description_kind":"plain","optional":true},"max_count":{"type":"number","description":"Max GPU count for the instance type to have.","description_kind":"plain","optional":true},"min_count":{"type":"number","description":"Min GPU count for the instance type to have.","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1},"instance_families":{"nesting_mode":"list","block":{"attributes":{"exclude":{"type":["list","string"],"description":"Instance families to include when filtering (excludes all other families).","description_kind":"plain","optional":true},"include":{"type":["list","string"],"description":"Instance families to exclude when filtering (includes all other families).","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1}},"description_kind":"plain"},"max_items":1},"custom_taints":{"nesting_mode":"list","block":{"attributes":{"effect":{"type":"string","description":"Effect of a taint to be added to nodes created from this template, the default is NoSchedule. Allowed values: NoSchedule, NoExecute.","description_kind":"plain","optional":true},"key":{"type":"string","description":"Key of a taint to be added to nodes created from this template.","description_kind":"plain","required":true},"value":{"type":"string","description":"Value of a taint to be added to nodes created from this template.","description_kind":"plain","optional":true}},"description":"Custom taints to be added to the nodes created from this template. `shouldTaint` has to be `true` in order to create/update the node template with custom taints. If `shouldTaint` is `true`, but no custom taints are provided, the nodes will be tainted with the default node template taint.","description_kind":"plain"}},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"CAST AI node template resource to manage node templates","description_kind":"plain"}},"castai_organization_members":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"members":{"type":["list","string"],"description":"A list of email addresses corresponding to users who should be given member access to the organization.","description_kind":"plain","optional":true},"organization_id":{"type":"string","description":"CAST AI organization ID.","description_kind":"plain","required":true},"owners":{"type":["list","string"],"description":"A list of email addresses corresponding to users who should be given owner access to the organization.","description_kind":"plain","optional":true},"viewers":{"type":["list","string"],"description":"A list of email addresses corresponding to users who should be given viewer access to the organization.","description_kind":"plain","optional":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"CAST AI organization members resource to manage organization members","description_kind":"plain"}},"castai_rebalancing_job":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"CAST AI cluster id.","description_kind":"plain","required":true},"enabled":{"type":"bool","description":"The job will only be executed if it's enabled.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"rebalancing_schedule_id":{"type":"string","description":"Rebalancing schedule of this job.","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Job assigns a rebalancing schedule to a cluster.","description_kind":"plain"}},"castai_rebalancing_schedule":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the schedule.","description_kind":"plain","required":true}},"block_types":{"launch_configuration":{"nesting_mode":"list","block":{"attributes":{"keep_drain_timeout_nodes":{"type":"bool","description":"Defines whether the nodes that failed to get drained until a predefined timeout, will be kept with a rebalancing.cast.ai/status=drain-failed annotation instead of forcefully drained.","description_kind":"plain","optional":true},"node_ttl_seconds":{"type":"number","description":"Specifies amount of time since node creation before the node is allowed to be considered for automated rebalancing.","description_kind":"plain","optional":true},"num_targeted_nodes":{"type":"number","description":"Maximum number of nodes that will be selected for rebalancing.","description_kind":"plain","optional":true},"rebalancing_min_nodes":{"type":"number","description":"Minimum number of nodes that should be kept in the cluster after rebalancing.","description_kind":"plain","optional":true},"selector":{"type":"string","description":"Node selector in JSON format.","description_kind":"plain","optional":true},"target_node_selection_algorithm":{"type":"string","description":"Defines the algorithm used to select the target nodes for rebalancing.","description_kind":"plain","optional":true}},"block_types":{"execution_conditions":{"nesting_mode":"list","block":{"attributes":{"achieved_savings_percentage":{"type":"number","description":"The percentage of the predicted savings that must be achieved in order to fully execute the plan.If the savings are not achieved after creating the new nodes, the plan will fail and delete the created nodes.","description_kind":"plain","optional":true},"enabled":{"type":"bool","description":"Enables or disables the execution conditions.","description_kind":"plain","required":true}},"description_kind":"plain"},"max_items":1}},"description_kind":"plain"},"min_items":1,"max_items":1},"schedule":{"nesting_mode":"list","block":{"attributes":{"cron":{"type":"string","description":"Cron expression defining when the schedule should trigger.\n\n The `cron` expression can optionally include the `CRON_TZ` variable at the beginning to specify the timezone in which the schedule should be interpreted.\n\n Example:\n ```plaintext\n CRON_TZ=America/New_York 0 12 * * ?\n ```\n In the example above, the `CRON_TZ` variable is set to \"America/New_York\" indicating that the cron expression should be interpreted in the Eastern Time (ET) timezone.\n\n To retrieve a list of available timezone values, you can use the following API endpoint:\n\n GET https://api.cast.ai/v1/time-zones\n\n When using the `CRON_TZ` variable, ensure that the specified timezone is valid and supported by checking the list of available timezones from the API endpoint. If the `CRON_TZ` variable is not specified, the cron expression will be interpreted in the UTC timezone.","description_kind":"plain","required":true}},"description_kind":"plain"},"min_items":1,"max_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}},"trigger_conditions":{"nesting_mode":"list","block":{"attributes":{"savings_percentage":{"type":"number","description":"Defines the minimum percentage of savings expected.","description_kind":"plain","required":true}},"description_kind":"plain"},"min_items":1,"max_items":1}},"description":"CAST AI rebalancing schedule resource to manage rebalancing schedules.","description_kind":"plain"}},"castai_reservations":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"organization_id":{"type":"string","description":"organization","description_kind":"plain","optional":true},"reservations":{"type":["list",["object",{"count":"string","end_date":"string","instance_type":"string","name":"string","price":"string","provider":"string","region":"string","start_date":"string","zone_id":"string","zone_name":"string"}]],"description_kind":"plain","computed":true},"reservations_csv":{"type":"string","description":"csv file containing reservations","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Reservation represents cloud service provider reserved instances that can be used by CAST AI autoscaler.","description_kind":"plain"}},"castai_sso_connection":{"version":0,"block":{"attributes":{"email_domain":{"type":"string","description":"Email domain of the connection","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Connection name","description_kind":"plain","required":true}},"block_types":{"aad":{"nesting_mode":"list","block":{"attributes":{"ad_domain":{"type":"string","description":"Azure AD domain","description_kind":"plain","required":true},"client_id":{"type":"string","description":"Azure AD client ID","description_kind":"plain","required":true},"client_secret":{"type":"string","description":"Azure AD client secret","description_kind":"plain","required":true,"sensitive":true}},"description":"Azure AD connector","description_kind":"plain"},"max_items":1},"okta":{"nesting_mode":"list","block":{"attributes":{"client_id":{"type":"string","description":"Okta client ID","description_kind":"plain","required":true},"client_secret":{"type":"string","description":"Okta client secret","description_kind":"plain","required":true,"sensitive":true},"okta_domain":{"type":"string","description":"Okta domain","description_kind":"plain","required":true}},"description":"Okta connector","description_kind":"plain"},"max_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"SSO Connection resource allows creating SSO trust relationship with CAST AI.","description_kind":"plain"}}},"data_source_schemas":{"castai_eks_settings":{"version":0,"block":{"attributes":{"account_id":{"type":"string","description_kind":"plain","required":true},"cluster":{"type":"string","description_kind":"plain","required":true},"iam_managed_policies":{"type":["set","string"],"description_kind":"plain","computed":true},"iam_policy_json":{"type":"string","description_kind":"plain","computed":true},"iam_user_policy_json":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description_kind":"plain","required":true},"vpc":{"type":"string","description_kind":"plain","required":true}},"description":"Retrieve IAM policy, IAM User Policy and instance profile policies for the specified cluster","description_kind":"plain"}},"castai_eks_user_arn":{"version":0,"block":{"attributes":{"arn":{"type":"string","description_kind":"plain","computed":true},"cluster_id":{"type":"string","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain","deprecated":true}},"castai_gke_user_policies":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"policy":{"type":["list","string"],"description_kind":"plain","computed":true}},"description_kind":"plain"}},"castai_organization":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description_kind":"plain","required":true}},"description":"Retrieve organization ID","description_kind":"plain"}}}}}} +{"format_version":"1.0","provider_schemas":{"registry.terraform.io/castai/castai":{"provider":{"version":0,"block":{"attributes":{"api_token":{"type":"string","description":"The token used to connect to CAST AI API.","description_kind":"plain","required":true},"api_url":{"type":"string","description":"CAST.AI API url.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"resource_schemas":{"castai_aks_cluster":{"version":0,"block":{"attributes":{"client_id":{"type":"string","description":"Azure AD application ID that is created and used by CAST AI.","description_kind":"plain","required":true},"client_secret":{"type":"string","description":"Azure AD application password that will be used by CAST AI.","description_kind":"plain","required":true,"sensitive":true},"cluster_token":{"type":"string","description":"CAST AI cluster token.","description_kind":"plain","computed":true,"sensitive":true},"credentials_id":{"type":"string","description":"CAST AI internal credentials ID","description_kind":"plain","computed":true},"delete_nodes_on_disconnect":{"type":"bool","description":"Should CAST AI remove nodes managed by CAST.AI on disconnect.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"AKS cluster name.","description_kind":"plain","required":true},"node_resource_group":{"type":"string","description":"Azure resource group in which nodes are and will be created.","description_kind":"plain","required":true},"region":{"type":"string","description":"AKS cluster region.","description_kind":"plain","required":true},"subscription_id":{"type":"string","description":"ID of the Azure subscription.","description_kind":"plain","required":true},"tenant_id":{"type":"string","description":"Azure AD tenant ID from the used subscription.","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"AKS cluster resource allows connecting an existing AKS cluster to CAST AI.","description_kind":"plain"}},"castai_autoscaler":{"version":0,"block":{"attributes":{"autoscaler_policies":{"type":"string","description":"computed value to store full policies configuration","description_kind":"plain","computed":true},"autoscaler_policies_json":{"type":"string","description":"autoscaler policies JSON string to override current autoscaler settings","description_kind":"plain","optional":true},"cluster_id":{"type":"string","description":"CAST AI cluster id","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"CAST AI autoscaler resource to manage autoscaler settings","description_kind":"plain"}},"castai_commitments":{"version":0,"block":{"attributes":{"azure_reservations":{"type":["list",["object",{"allowed_usage":"number","assignments":["list",["object",{"cluster_id":"string","priority":"number"}]],"count":"number","end_timestamp":"string","id":"string","instance_type":"string","name":"string","plan":"string","prioritization":"bool","region":"string","reservation_id":"string","reservation_status":"string","scope":"string","scope_resource_group":"string","scope_subscription":"string","start_timestamp":"string","status":"string"}]],"description":"List of Azure reservations.","description_kind":"plain","computed":true},"azure_reservations_csv":{"type":"string","description":"CSV file containing reservations exported from Azure.","description_kind":"plain","optional":true},"gcp_cuds":{"type":["list",["object",{"allowed_usage":"number","assignments":["list",["object",{"cluster_id":"string","priority":"number"}]],"cpu":"number","cud_id":"string","cud_status":"string","end_timestamp":"string","id":"string","memory_mb":"number","name":"string","plan":"string","prioritization":"bool","region":"string","start_timestamp":"string","status":"string","type":"string"}]],"description":"List of GCP CUDs.","description_kind":"plain","computed":true},"gcp_cuds_json":{"type":"string","description":"JSON file containing CUDs exported from GCP.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"block_types":{"commitment_configs":{"nesting_mode":"list","block":{"attributes":{"allowed_usage":{"type":"number","description":"Allowed usage of the commitment. The value is between 0 (0%) and 1 (100%).","description_kind":"plain","optional":true},"prioritization":{"type":"bool","description":"If enabled, it's possible to assign priorities to the assigned clusters.","description_kind":"plain","optional":true},"status":{"type":"string","description":"Status of the commitment in CAST AI.","description_kind":"plain","optional":true}},"block_types":{"assignments":{"nesting_mode":"list","block":{"attributes":{"cluster_id":{"type":"string","description":"ID of the cluster to assign the commitment to.","description_kind":"plain","required":true},"priority":{"type":"number","description":"Priority of the assignment. The lower the value, the higher the priority. 1 is the highest priority.","description_kind":"plain","computed":true}},"description":"List of assigned clusters for the commitment. If prioritization is enabled, the order of the assignments indicates the priority. The first assignment has the highest priority.","description_kind":"plain"}},"matcher":{"nesting_mode":"list","block":{"attributes":{"name":{"type":"string","description":"Name of the commitment to match.","description_kind":"plain","required":true},"region":{"type":"string","description":"Region of the commitment to match.","description_kind":"plain","required":true},"type":{"type":"string","description":"Type of the commitment to match. For compute resources, it's the type of the machine.","description_kind":"plain","optional":true}},"description":"Matcher used to map config to a commitment.","description_kind":"plain"},"min_items":1,"max_items":1}},"description":"List of commitment configurations.","description_kind":"plain"}},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Commitments represent cloud service provider reserved instances (Azure) and commited use discounts (GCP) that can be used by CAST AI autoscaler.","description_kind":"plain"}},"castai_eks_cluster":{"version":0,"block":{"attributes":{"account_id":{"type":"string","description":"ID of AWS account","description_kind":"plain","required":true},"assume_role_arn":{"type":"string","description":"AWS IAM role ARN that will be assumed by CAST AI user. This role should allow `sts:AssumeRole` action for CAST AI user that can be retrieved using `castai_eks_user_arn` data source","description_kind":"plain","optional":true},"cluster_token":{"type":"string","description":"computed value to store cluster token","description_kind":"plain","computed":true,"sensitive":true},"credentials_id":{"type":"string","description":"CAST AI internal credentials ID","description_kind":"plain","computed":true},"delete_nodes_on_disconnect":{"type":"bool","description":"Should CAST AI remove nodes managed by CAST AI on disconnect","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"name of your EKS cluster","description_kind":"plain","required":true},"region":{"type":"string","description":"AWS region where the cluster is placed","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"EKS cluster resource allows connecting an existing EKS cluster to CAST AI.","description_kind":"plain"}},"castai_eks_clusterid":{"version":0,"block":{"attributes":{"account_id":{"type":"string","description_kind":"plain","required":true},"cluster_name":{"type":"string","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description_kind":"plain","required":true}},"description_kind":"plain"}},"castai_eks_user_arn":{"version":0,"block":{"attributes":{"arn":{"type":"string","description_kind":"plain","computed":true},"cluster_id":{"type":"string","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain"}},"castai_evictor_advanced_config":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"CAST AI cluster id.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"block_types":{"evictor_advanced_config":{"nesting_mode":"list","block":{"attributes":{"aggressive":{"type":"bool","description_kind":"plain","optional":true},"disposable":{"type":"bool","description_kind":"plain","optional":true},"removal_disabled":{"type":"bool","description_kind":"plain","optional":true}},"block_types":{"node_selector":{"nesting_mode":"list","block":{"attributes":{"match_labels":{"type":["map","string"],"description_kind":"plain","optional":true}},"block_types":{"match_expressions":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description_kind":"plain","required":true},"operator":{"type":"string","description_kind":"plain","required":true},"values":{"type":["list","string"],"description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"node selector","description_kind":"plain"}},"pod_selector":{"nesting_mode":"list","block":{"attributes":{"kind":{"type":"string","description_kind":"plain","optional":true},"match_labels":{"type":["map","string"],"description_kind":"plain","optional":true},"namespace":{"type":"string","description_kind":"plain","optional":true}},"block_types":{"match_expressions":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description_kind":"plain","required":true},"operator":{"type":"string","description_kind":"plain","required":true},"values":{"type":["list","string"],"description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"pod selector","description_kind":"plain"}}},"description":"evictor advanced configuration to target specific node/pod","description_kind":"plain"},"min_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"CAST AI eviction config resource to manage evictor properties ","description_kind":"plain"}},"castai_gke_cluster":{"version":0,"block":{"attributes":{"cluster_token":{"type":"string","description":"CAST.AI agent cluster token","description_kind":"plain","computed":true,"sensitive":true},"credentials_id":{"type":"string","description":"CAST AI credentials id for cluster","description_kind":"plain","computed":true},"credentials_json":{"type":"string","description":"GCP credentials.json from ServiceAccount with credentials for CAST AI","description_kind":"plain","optional":true,"sensitive":true},"delete_nodes_on_disconnect":{"type":"bool","description":"Should CAST AI remove nodes managed by CAST.AI on disconnect","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"location":{"type":"string","description":"GCP cluster zone in case of zonal or region in case of regional cluster","description_kind":"plain","required":true},"name":{"type":"string","description":"GKE cluster name","description_kind":"plain","required":true},"project_id":{"type":"string","description":"GCP project id","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"GKE cluster resource allows connecting an existing GKE cluster to CAST AI.","description_kind":"plain"}},"castai_node_configuration":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"CAST AI cluster id","description_kind":"plain","required":true},"container_runtime":{"type":"string","description":"Optional container runtime to be used by kubelet. Applicable for EKS only. Supported values include: `dockerd`, `containerd`","description_kind":"plain","optional":true},"disk_cpu_ratio":{"type":"number","description":"Disk to CPU ratio. Sets the number of GiBs to be added for every CPU on the node. Defaults to 0","description_kind":"plain","optional":true},"docker_config":{"type":"string","description":"Optional docker daemon configuration properties in JSON format. Provide only properties that you want to override. Applicable for EKS only. [Available values](https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file)","description_kind":"plain","optional":true},"drain_timeout_sec":{"type":"number","description":"Timeout in seconds for draining the node. Defaults to 0","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"image":{"type":"string","description":"Image to be used while provisioning the node. If nothing is provided will be resolved to latest available image based on Kubernetes version if possible ","description_kind":"plain","optional":true},"init_script":{"type":"string","description":"Init script to be run on your instance at launch. Should not contain any sensitive data. Value should be base64 encoded","description_kind":"plain","optional":true},"kubelet_config":{"type":"string","description":"Optional kubelet configuration properties in JSON format. Provide only properties that you want to override. Applicable for EKS only. [Available values](https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/)","description_kind":"plain","optional":true},"min_disk_size":{"type":"number","description":"Minimal disk size in GiB. Defaults to 100, min 30, max 65536","description_kind":"plain","optional":true},"name":{"type":"string","description":"Name of the node configuration. It must be unique within the cluster. In case of cluster is reonboarded to Terraform, when previously it was onboarded with CAST AI UI, and the name corresponds to previously created node configuration this resource will override existing configuration instead of creating new.","description_kind":"plain","required":true},"ssh_public_key":{"type":"string","description":"SSH public key to be used for provisioned nodes","description_kind":"plain","optional":true},"subnets":{"type":["list","string"],"description":"Subnet ids to be used for provisioned nodes","description_kind":"plain","required":true},"tags":{"type":["map","string"],"description":"Tags to be added on cloud instances for provisioned nodes","description_kind":"plain","optional":true}},"block_types":{"aks":{"nesting_mode":"list","block":{"attributes":{"max_pods_per_node":{"type":"number","description":"Maximum number of pods that can be run on a node, which affects how many IP addresses you will need for each node. Defaults to 30","description_kind":"plain","optional":true},"os_disk_type":{"type":"string","description":"Type of managed os disk attached to the node. (See [disk types](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types)). One of: standard, standard-ssd, premium-ssd (ultra and premium-ssd-v2 are not supported for os disk)","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1},"eks":{"nesting_mode":"list","block":{"attributes":{"dns_cluster_ip":{"type":"string","description":"IP address to use for DNS queries within the cluster","description_kind":"plain","optional":true},"imds_hop_limit":{"type":"number","description":"Allow configure the IMDSv2 hop limit, the default is 2","description_kind":"plain","optional":true},"imds_v1":{"type":"bool","description":"When the value is true both IMDSv1 and IMDSv2 are enabled. Setting the value to false disables permanently IMDSv1 and might affect legacy workloads running on the node created with this configuration. The default is true if the flag isn't provided","description_kind":"plain","optional":true},"instance_profile_arn":{"type":"string","description":"Cluster's instance profile ARN used for CAST provisioned nodes","description_kind":"plain","required":true},"key_pair_id":{"type":"string","description":"AWS key pair ID to be used for CAST provisioned nodes. Has priority over ssh_public_key","description_kind":"plain","optional":true},"security_groups":{"type":["list","string"],"description":"Cluster's security groups configuration for CAST provisioned nodes","description_kind":"plain","required":true},"volume_iops":{"type":"number","description":"AWS EBS volume IOPS to be used for CAST provisioned nodes","description_kind":"plain","optional":true},"volume_kms_key_arn":{"type":"string","description":"AWS KMS key ARN for encrypting EBS volume attached to the node","description_kind":"plain","optional":true},"volume_throughput":{"type":"number","description":"AWS EBS volume throughput in MiB/s to be used for CAST provisioned nodes","description_kind":"plain","optional":true},"volume_type":{"type":"string","description":"AWS EBS volume type to be used for CAST provisioned nodes. One of: gp3, io1, io2","description_kind":"plain","optional":true}},"block_types":{"target_group":{"nesting_mode":"list","block":{"attributes":{"arn":{"type":"string","description":"AWS target group ARN for CAST provisioned nodes","description_kind":"plain","required":true},"port":{"type":"number","description":"Port for AWS target group for CAST provisioned nodes","description_kind":"plain","optional":true}},"description":"AWS target group configuration for CAST provisioned nodes","description_kind":"plain"},"max_items":1}},"description_kind":"plain"},"max_items":1},"gke":{"nesting_mode":"list","block":{"attributes":{"disk_type":{"type":"string","description":"Type of boot disk attached to the node. (See [disk types](https://cloud.google.com/compute/docs/disks#pdspecs)). One of: pd-standard, pd-balanced, pd-ssd, pd-extreme ","description_kind":"plain","optional":true},"max_pods_per_node":{"type":"number","description":"Maximum number of pods that can be run on a node, which affects how many IP addresses you will need for each node. Defaults to 110","description_kind":"plain","optional":true},"network_tags":{"type":["list","string"],"description":"Network tags to be added on a VM. (See [network tags](https://cloud.google.com/vpc/docs/add-remove-network-tags))","description_kind":"plain","optional":true},"zones":{"type":["list","string"],"description":"List of preferred availability zones to choose from when provisioning new nodes.","description_kind":"plain","deprecated":true,"optional":true}},"description_kind":"plain"},"max_items":1},"kops":{"nesting_mode":"list","block":{"attributes":{"key_pair_id":{"type":"string","description":"AWS key pair ID to be used for provisioned nodes. Has priority over sshPublicKey","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Create node configuration for given cluster. Node configuration [reference](https://docs.cast.ai/docs/node-configuration)","description_kind":"plain"}},"castai_node_configuration_default":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"CAST AI cluster id","description_kind":"plain","required":true},"configuration_id":{"type":"string","description":"Id of the node configuration","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description_kind":"plain"}},"castai_node_template":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"CAST AI cluster id.","description_kind":"plain","optional":true},"configuration_id":{"type":"string","description":"CAST AI node configuration id to be used for node template.","description_kind":"plain","optional":true},"custom_instances_enabled":{"type":"bool","description":"Marks whether custom instances should be used when deciding which parts of inventory are available. Custom instances are only supported in GCP.","description_kind":"plain","optional":true},"custom_instances_with_extended_memory_enabled":{"type":"bool","description":"Marks whether custom instances with extended memory should be used when deciding which parts of inventory are available. Custom instances are only supported in GCP.","description_kind":"plain","optional":true},"custom_labels":{"type":["map","string"],"description":"Custom labels to be added to nodes created from this template.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"is_default":{"type":"bool","description":"Flag whether the node template is default.","description_kind":"plain","optional":true},"is_enabled":{"type":"bool","description":"Flag whether the node template is enabled and considered for autoscaling.","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the node template.","description_kind":"plain","required":true},"rebalancing_config_min_nodes":{"type":"number","description":"Minimum nodes that will be kept when rebalancing nodes using this node template.","description_kind":"plain","optional":true},"should_taint":{"type":"bool","description":"Marks whether the templated nodes will have a taint.","description_kind":"plain","optional":true}},"block_types":{"constraints":{"nesting_mode":"list","block":{"attributes":{"architectures":{"type":["list","string"],"description":"List of acceptable instance CPU architectures, the default is amd64. Allowed values: amd64, arm64.","description_kind":"plain","optional":true,"computed":true},"azs":{"type":["list","string"],"description":"The list of AZ names to consider for the node template, if empty or not set all AZs are considered.","description_kind":"plain","optional":true},"compute_optimized":{"type":"bool","description":"Compute optimized instance constraint - will only pick compute optimized nodes if true.","description_kind":"plain","optional":true},"enable_spot_diversity":{"type":"bool","description":"Enable/disable spot diversity policy. When enabled, autoscaler will try to balance between diverse and cost optimal instance types.","description_kind":"plain","optional":true},"fallback_restore_rate_seconds":{"type":"number","description":"Fallback restore rate in seconds: defines how much time should pass before spot fallback should be attempted to be restored to real spot.","description_kind":"plain","optional":true},"is_gpu_only":{"type":"bool","description":"GPU instance constraint - will only pick nodes with GPU if true","description_kind":"plain","optional":true},"max_cpu":{"type":"number","description":"Max CPU cores per node.","description_kind":"plain","optional":true},"max_memory":{"type":"number","description":"Max Memory (Mib) per node.","description_kind":"plain","optional":true},"min_cpu":{"type":"number","description":"Min CPU cores per node.","description_kind":"plain","optional":true},"min_memory":{"type":"number","description":"Min Memory (Mib) per node.","description_kind":"plain","optional":true},"on_demand":{"type":"bool","description":"Should include on-demand instances in the considered pool.","description_kind":"plain","optional":true,"computed":true},"os":{"type":["list","string"],"description":"List of acceptable instance Operating Systems, the default is linux. Allowed values: linux, windows.","description_kind":"plain","optional":true,"computed":true},"spot":{"type":"bool","description":"Should include spot instances in the considered pool.","description_kind":"plain","optional":true},"spot_diversity_price_increase_limit_percent":{"type":"number","description":"Allowed node configuration price increase when diversifying instance types. E.g. if the value is 10%, then the overall price of diversified instance types can be 10% higher than the price of the optimal configuration.","description_kind":"plain","optional":true},"spot_interruption_predictions_enabled":{"type":"bool","description":"Enable/disable spot interruption predictions.","description_kind":"plain","optional":true},"spot_interruption_predictions_type":{"type":"string","description":"Spot interruption predictions type. Can be either \"aws-rebalance-recommendations\" or \"interruption-predictions\".","description_kind":"plain","optional":true},"storage_optimized":{"type":"bool","description":"Storage optimized instance constraint - will only pick storage optimized nodes if true","description_kind":"plain","optional":true},"use_spot_fallbacks":{"type":"bool","description":"Spot instance fallback constraint - when true, on-demand instances will be created, when spots are unavailable.","description_kind":"plain","optional":true}},"block_types":{"custom_priority":{"nesting_mode":"list","block":{"attributes":{"instance_families":{"type":["list","string"],"description":"Instance families to prioritize in this tier.","description_kind":"plain","optional":true},"on_demand":{"type":"bool","description":"If true, this tier will apply to on-demand instances.","description_kind":"plain","optional":true},"spot":{"type":"bool","description":"If true, this tier will apply to spot instances.","description_kind":"plain","optional":true}},"description_kind":"plain"}},"dedicated_node_affinity":{"nesting_mode":"list","block":{"attributes":{"az_name":{"type":"string","description":"Availability zone name.","description_kind":"plain","required":true},"instance_types":{"type":["list","string"],"description":"Instance/node types in this node group.","description_kind":"plain","required":true},"name":{"type":"string","description":"Name of node group.","description_kind":"plain","required":true}},"block_types":{"affinity":{"nesting_mode":"list","block":{"attributes":{"key":{"type":"string","description":"Key of the node affinity selector.","description_kind":"plain","required":true},"operator":{"type":"string","description":"Operator of the node affinity selector. Allowed values: In, NotIn, Exists, DoesNotExist, Gt, Lt.","description_kind":"plain","required":true},"values":{"type":["list","string"],"description":"Values of the node affinity selector.","description_kind":"plain","required":true}},"description_kind":"plain"}}},"description":"Dedicated node affinity - creates preference for instances to be created on sole tenancy or dedicated nodes. This\n feature is only available for GCP clusters and sole tenancy nodes with local\n SSDs or GPUs are not supported. If the sole tenancy or dedicated nodes don't have capacity for selected instance\n type, the Autoscaler will fall back to multi-tenant instance types available for this Node Template.\n Other instance constraints are applied when the Autoscaler picks available instance types that can be created on\n the sole tenancy or dedicated node (example: setting min CPU to 16).","description_kind":"plain"}},"gpu":{"nesting_mode":"list","block":{"attributes":{"exclude_names":{"type":["list","string"],"description":"Names of the GPUs to exclude.","description_kind":"plain","optional":true},"include_names":{"type":["list","string"],"description":"Instance families to include when filtering (excludes all other families).","description_kind":"plain","optional":true},"manufacturers":{"type":["list","string"],"description":"Manufacturers of the gpus to select - NVIDIA, AMD.","description_kind":"plain","optional":true},"max_count":{"type":"number","description":"Max GPU count for the instance type to have.","description_kind":"plain","optional":true},"min_count":{"type":"number","description":"Min GPU count for the instance type to have.","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1},"instance_families":{"nesting_mode":"list","block":{"attributes":{"exclude":{"type":["list","string"],"description":"Instance families to include when filtering (excludes all other families).","description_kind":"plain","optional":true},"include":{"type":["list","string"],"description":"Instance families to exclude when filtering (includes all other families).","description_kind":"plain","optional":true}},"description_kind":"plain"},"max_items":1}},"description_kind":"plain"},"max_items":1},"custom_taints":{"nesting_mode":"list","block":{"attributes":{"effect":{"type":"string","description":"Effect of a taint to be added to nodes created from this template, the default is NoSchedule. Allowed values: NoSchedule, NoExecute.","description_kind":"plain","optional":true},"key":{"type":"string","description":"Key of a taint to be added to nodes created from this template.","description_kind":"plain","required":true},"value":{"type":"string","description":"Value of a taint to be added to nodes created from this template.","description_kind":"plain","optional":true}},"description":"Custom taints to be added to the nodes created from this template. `shouldTaint` has to be `true` in order to create/update the node template with custom taints. If `shouldTaint` is `true`, but no custom taints are provided, the nodes will be tainted with the default node template taint.","description_kind":"plain"}},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"CAST AI node template resource to manage node templates","description_kind":"plain"}},"castai_organization_members":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"members":{"type":["list","string"],"description":"A list of email addresses corresponding to users who should be given member access to the organization.","description_kind":"plain","optional":true},"organization_id":{"type":"string","description":"CAST AI organization ID.","description_kind":"plain","required":true},"owners":{"type":["list","string"],"description":"A list of email addresses corresponding to users who should be given owner access to the organization.","description_kind":"plain","optional":true},"viewers":{"type":["list","string"],"description":"A list of email addresses corresponding to users who should be given viewer access to the organization.","description_kind":"plain","optional":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"CAST AI organization members resource to manage organization members","description_kind":"plain"}},"castai_rebalancing_job":{"version":0,"block":{"attributes":{"cluster_id":{"type":"string","description":"CAST AI cluster id.","description_kind":"plain","required":true},"enabled":{"type":"bool","description":"The job will only be executed if it's enabled.","description_kind":"plain","optional":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"rebalancing_schedule_id":{"type":"string","description":"Rebalancing schedule of this job.","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Job assigns a rebalancing schedule to a cluster.","description_kind":"plain"}},"castai_rebalancing_schedule":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Name of the schedule.","description_kind":"plain","required":true}},"block_types":{"launch_configuration":{"nesting_mode":"list","block":{"attributes":{"keep_drain_timeout_nodes":{"type":"bool","description":"Defines whether the nodes that failed to get drained until a predefined timeout, will be kept with a rebalancing.cast.ai/status=drain-failed annotation instead of forcefully drained.","description_kind":"plain","optional":true},"node_ttl_seconds":{"type":"number","description":"Specifies amount of time since node creation before the node is allowed to be considered for automated rebalancing.","description_kind":"plain","optional":true},"num_targeted_nodes":{"type":"number","description":"Maximum number of nodes that will be selected for rebalancing.","description_kind":"plain","optional":true},"rebalancing_min_nodes":{"type":"number","description":"Minimum number of nodes that should be kept in the cluster after rebalancing.","description_kind":"plain","optional":true},"selector":{"type":"string","description":"Node selector in JSON format.","description_kind":"plain","optional":true},"target_node_selection_algorithm":{"type":"string","description":"Defines the algorithm used to select the target nodes for rebalancing.","description_kind":"plain","optional":true}},"block_types":{"execution_conditions":{"nesting_mode":"list","block":{"attributes":{"achieved_savings_percentage":{"type":"number","description":"The percentage of the predicted savings that must be achieved in order to fully execute the plan.If the savings are not achieved after creating the new nodes, the plan will fail and delete the created nodes.","description_kind":"plain","optional":true},"enabled":{"type":"bool","description":"Enables or disables the execution conditions.","description_kind":"plain","required":true}},"description_kind":"plain"},"max_items":1}},"description_kind":"plain"},"min_items":1,"max_items":1},"schedule":{"nesting_mode":"list","block":{"attributes":{"cron":{"type":"string","description":"Cron expression defining when the schedule should trigger.\n\n The `cron` expression can optionally include the `CRON_TZ` variable at the beginning to specify the timezone in which the schedule should be interpreted.\n\n Example:\n ```plaintext\n CRON_TZ=America/New_York 0 12 * * ?\n ```\n In the example above, the `CRON_TZ` variable is set to \"America/New_York\" indicating that the cron expression should be interpreted in the Eastern Time (ET) timezone.\n\n To retrieve a list of available timezone values, you can use the following API endpoint:\n\n GET https://api.cast.ai/v1/time-zones\n\n When using the `CRON_TZ` variable, ensure that the specified timezone is valid and supported by checking the list of available timezones from the API endpoint. If the `CRON_TZ` variable is not specified, the cron expression will be interpreted in the UTC timezone.","description_kind":"plain","required":true}},"description_kind":"plain"},"min_items":1,"max_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"read":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}},"trigger_conditions":{"nesting_mode":"list","block":{"attributes":{"savings_percentage":{"type":"number","description":"Defines the minimum percentage of savings expected.","description_kind":"plain","required":true}},"description_kind":"plain"},"min_items":1,"max_items":1}},"description":"CAST AI rebalancing schedule resource to manage rebalancing schedules.","description_kind":"plain"}},"castai_reservations":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"organization_id":{"type":"string","description":"organization","description_kind":"plain","optional":true},"reservations":{"type":["list",["object",{"count":"string","end_date":"string","instance_type":"string","name":"string","price":"string","provider":"string","region":"string","start_date":"string","zone_id":"string","zone_name":"string"}]],"description_kind":"plain","computed":true},"reservations_csv":{"type":"string","description":"csv file containing reservations","description_kind":"plain","required":true}},"block_types":{"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"Reservation represents cloud service provider reserved instances that can be used by CAST AI autoscaler.","description_kind":"plain"}},"castai_sso_connection":{"version":0,"block":{"attributes":{"email_domain":{"type":"string","description":"Email domain of the connection","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description":"Connection name","description_kind":"plain","required":true}},"block_types":{"aad":{"nesting_mode":"list","block":{"attributes":{"ad_domain":{"type":"string","description":"Azure AD domain","description_kind":"plain","required":true},"client_id":{"type":"string","description":"Azure AD client ID","description_kind":"plain","required":true},"client_secret":{"type":"string","description":"Azure AD client secret","description_kind":"plain","required":true,"sensitive":true}},"description":"Azure AD connector","description_kind":"plain"},"max_items":1},"okta":{"nesting_mode":"list","block":{"attributes":{"client_id":{"type":"string","description":"Okta client ID","description_kind":"plain","required":true},"client_secret":{"type":"string","description":"Okta client secret","description_kind":"plain","required":true,"sensitive":true},"okta_domain":{"type":"string","description":"Okta domain","description_kind":"plain","required":true}},"description":"Okta connector","description_kind":"plain"},"max_items":1},"timeouts":{"nesting_mode":"single","block":{"attributes":{"create":{"type":"string","description_kind":"plain","optional":true},"delete":{"type":"string","description_kind":"plain","optional":true},"update":{"type":"string","description_kind":"plain","optional":true}},"description_kind":"plain"}}},"description":"SSO Connection resource allows creating SSO trust relationship with CAST AI.","description_kind":"plain"}}},"data_source_schemas":{"castai_eks_settings":{"version":0,"block":{"attributes":{"account_id":{"type":"string","description_kind":"plain","required":true},"cluster":{"type":"string","description_kind":"plain","required":true},"iam_managed_policies":{"type":["set","string"],"description_kind":"plain","computed":true},"iam_policy_json":{"type":"string","description_kind":"plain","computed":true},"iam_user_policy_json":{"type":"string","description_kind":"plain","computed":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"region":{"type":"string","description_kind":"plain","required":true},"vpc":{"type":"string","description_kind":"plain","required":true}},"description":"Retrieve IAM policy, IAM User Policy and instance profile policies for the specified cluster","description_kind":"plain"}},"castai_eks_user_arn":{"version":0,"block":{"attributes":{"arn":{"type":"string","description_kind":"plain","computed":true},"cluster_id":{"type":"string","description_kind":"plain","required":true},"id":{"type":"string","description_kind":"plain","optional":true,"computed":true}},"description_kind":"plain","deprecated":true}},"castai_gke_user_policies":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"policy":{"type":["list","string"],"description_kind":"plain","computed":true}},"description_kind":"plain"}},"castai_organization":{"version":0,"block":{"attributes":{"id":{"type":"string","description_kind":"plain","optional":true,"computed":true},"name":{"type":"string","description_kind":"plain","required":true}},"description":"Retrieve organization ID","description_kind":"plain"}}}}}} diff --git a/package/crds/castai.upbound.io_nodeconfigurations.yaml b/package/crds/castai.upbound.io_nodeconfigurations.yaml index 5547163..a65dbfa 100644 --- a/package/crds/castai.upbound.io_nodeconfigurations.yaml +++ b/package/crds/castai.upbound.io_nodeconfigurations.yaml @@ -288,6 +288,13 @@ spec: items: type: string type: array + zones: + description: |- + (List of String, Deprecated) List of preferred availability zones to choose from when provisioning new nodes. + List of preferred availability zones to choose from when provisioning new nodes. + items: + type: string + type: array type: object type: array image: @@ -574,6 +581,13 @@ spec: items: type: string type: array + zones: + description: |- + (List of String, Deprecated) List of preferred availability zones to choose from when provisioning new nodes. + List of preferred availability zones to choose from when provisioning new nodes. + items: + type: string + type: array type: object type: array image: @@ -952,6 +966,13 @@ spec: items: type: string type: array + zones: + description: |- + (List of String, Deprecated) List of preferred availability zones to choose from when provisioning new nodes. + List of preferred availability zones to choose from when provisioning new nodes. + items: + type: string + type: array type: object type: array id: diff --git a/package/crds/castai.upbound.io_nodetemplates.yaml b/package/crds/castai.upbound.io_nodetemplates.yaml index 4fa75a0..389e6a3 100644 --- a/package/crds/castai.upbound.io_nodetemplates.yaml +++ b/package/crds/castai.upbound.io_nodetemplates.yaml @@ -240,6 +240,12 @@ spec: items: type: string type: array + azs: + description: The list of AZ names to consider for the node + template, if empty or not set all AZs are considered. + items: + type: string + type: array computeOptimized: description: Compute optimized instance constraint - will only pick compute optimized nodes if true. @@ -653,6 +659,12 @@ spec: items: type: string type: array + azs: + description: The list of AZ names to consider for the node + template, if empty or not set all AZs are considered. + items: + type: string + type: array computeOptimized: description: Compute optimized instance constraint - will only pick compute optimized nodes if true. @@ -1078,6 +1090,12 @@ spec: items: type: string type: array + azs: + description: The list of AZ names to consider for the node + template, if empty or not set all AZs are considered. + items: + type: string + type: array computeOptimized: description: Compute optimized instance constraint - will only pick compute optimized nodes if true.