Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into update-gke-iam-role
Browse files Browse the repository at this point in the history
  • Loading branch information
davex98 committed Aug 9, 2023
2 parents e2501af + 1dfdf5a commit 5a90bf3
Show file tree
Hide file tree
Showing 43 changed files with 8,108 additions and 2,035 deletions.
6 changes: 6 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
name: Build

# Only one instance of this job can be running
concurrency:
group: build-and-test
cancel-in-progress: true

on:
pull_request:
branches: [ '*' ]
Expand Down
10 changes: 9 additions & 1 deletion .github/workflows/examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ on:
- 'examples/**'
jobs:
terraform_validation:
strategy:
matrix:
version: [1.0, 1.2, 1.3, 1.4, latest]
runs-on: ubuntu-latest

steps:
Expand All @@ -15,7 +18,12 @@ jobs:

- name: Set up Terraform
uses: hashicorp/setup-terraform@v2
with:
terraform_version: ${{ matrix.version }}

- name: Print tf version
run: terraform version

- name: Validate Terraform examples
id: validate_examples
run: make validate-terraform-examples
run: make validate-terraform-examples
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@ examples/localdev/*
e2e/**/.env
e2e/**/local.auto.tfvars
terraform.tfstate
.DS_Store
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ init-examples:

generate-sdk:
@echo "==> Generating castai sdk client"
@API_TAGS=ExternalClusterAPI,PoliciesAPI,NodeConfigurationAPI,NodeTemplatesAPI,AuthTokenAPI,ScheduledRebalancingAPI go generate castai/sdk/generate.go
@API_TAGS=ExternalClusterAPI,PoliciesAPI,NodeConfigurationAPI,NodeTemplatesAPI,AuthTokenAPI,ScheduledRebalancingAPI,InventoryAPI,UsersAPI go generate castai/sdk/generate.go

# The following command also rewrites existing documentation
generate-docs:
Expand Down
118 changes: 118 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,124 @@ and usage `castai_eks_cluster.this.cluster_token`
* default value for `imds_v1` was change to `true`, in case that your configuration didn't had this specified
please explicitly set this value to `false`
Migrating from 4.x.x to 5.x.x
---------------------------
Version 5.x.x changed:
* Terraform provider adopts [default node template concept](https://docs.cast.ai/docs/default-node-template)
* Removed `spotInstances` field from `autoscaler_policies_json` attribute in `castai_autoscaler_policies` resource
* Removed `customInstancesEnabled` field from `autoscaler_policies_json` attribute in `castai_autoscaler_policies` resource
* Removed `nodeConstraints` field from `autoscaler_policies_json` attribute in `castai_autoscaler_policies` resource
* All valid fields which were removed from `autoscaler_policies_json` have mapping in `castai_node_template` [resource](https://registry.terraform.io/providers/CastAI/castai/latest/docs/resources/node_template)
Old configuration:
```terraform
resource "castai_autoscaler" "castai_autoscaler_policies" {
cluster_id = data.castai_eks_clusterid.cluster_id.id // or other reference
autoscaler_policies_json = <<-EOT
{
"enabled": true,
"unschedulablePods": {
"enabled": true,
"customInstancesEnabled": true,
"nodeConstraints": {
"enabled": true,
"minCpuCores": 2,
"maxCpuCores": 4,
"minRamMib": 3814,
"maxRamMib": 16384
}
},
"spotInstances": {
"enabled": true,
"clouds": ["gcp"],
"spotBackups": {
"enabled": true
}
},
"nodeDownscaler": {
"enabled": true,
"emptyNodes": {
"enabled": true
},
"evictor": {
"aggressiveMode": true,
"cycleInterval": "5m10s",
"dryRun": false,
"enabled": true,
"nodeGracePeriodMinutes": 10,
"scopedMode": false
}
}
}
EOT
}
```
New configuration:
```terraform
resource "castai_autoscaler" "castai_autoscaler_policies" {
cluster_id = data.castai_eks_clusterid.cluster_id.id // or other reference
autoscaler_policies_json = <<-EOT
{
"enabled": true,
"unschedulablePods": {
"enabled": true
},
"nodeDownscaler": {
"enabled": true,
"emptyNodes": {
"enabled": true
},
"evictor": {
"aggressiveMode": true,
"cycleInterval": "5m10s",
"dryRun": false,
"enabled": true,
"nodeGracePeriodMinutes": 10,
"scopedMode": false
}
}
}
EOT
}
resource "castai_node_template" "default_by_castai" {
cluster_id = data.castai_eks_clusterid.cluster_id.id // or other reference
name = "default-by-castai"
configuration_id = castai_node_configuration.default.id // or other reference
is_default = true
should_taint = false
custom_instances_enabled = true
constraints {
architectures = [
"amd64",
"arm64",
]
on_demand = true
spot = true
use_spot_fallbacks = true
min_cpu = 2
max_cpu = 4
min_memory = 3814
max_memory = 16384
}
depends_on = [ castai_autoscaler.castai_autoscaler_policies ]
}
```
If you have used `castai-eks-cluster` or other modules follow:
https://github.com/castai/terraform-castai-eks-cluster/blob/main/README.md#migrating-from-5xx-to-6xx
Note: `default-by-castai` default node template is created in background by CAST.ai, when creating managed resource
in Terraform the provider will handle create as update. Alternatively you can perform Terraform state import and
everything will work correctly.
Developing the provider
---------------------------
Expand Down
2 changes: 1 addition & 1 deletion castai/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package castai
import (
"context"
"fmt"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
Expand Down Expand Up @@ -45,6 +44,7 @@ func Provider(version string) *schema.Provider {
"castai_node_configuration": resourceNodeConfiguration(),
"castai_node_configuration_default": resourceNodeConfigurationDefault(),
"castai_eks_user_arn": resourceEKSClusterUserARN(),
"castai_reservations": resourceReservations(),
},

DataSourcesMap: map[string]*schema.Resource{
Expand Down
63 changes: 63 additions & 0 deletions castai/reservations/fields.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package reservations

const (
FieldReservationsCSV = "reservations_csv"
FieldReservationsOrganizationId = "organization_id"
FieldReservations = "reservations"
FieldReservationName = "name"
FieldReservationProvider = "provider"
FieldReservationRegion = "region"
FieldReservationInstanceType = "instance_type"
FieldReservationPrice = "price"
FieldReservationCount = "count"
FieldReservationStartDate = "start_date"
FieldReservationEndDate = "end_date"
FieldReservationZoneId = "zone_id"
FieldReservationZoneName = "zone_name"

// Azure specific fields
FieldReservationProductName = "product_name"
FieldReservationQuantity = "quantity"
FieldReservationPurchaseDate = "purchase_date"
FieldReservationExpirationDate = "expiration_date"
FieldReservationType = "type"
FieldReservationDeepLinkToReservation = "deep_link_to_reservation"
)

var reservationResourceFields = []string{
FieldReservationName,
FieldReservationProvider,
FieldReservationRegion,
FieldReservationInstanceType,
FieldReservationPrice,
FieldReservationCount,
FieldReservationStartDate,
FieldReservationEndDate,
FieldReservationZoneId,
FieldReservationZoneName,
FieldReservationProductName,
FieldReservationQuantity,
FieldReservationPurchaseDate,
FieldReservationExpirationDate,
FieldReservationType,
FieldReservationDeepLinkToReservation,
}

var csvColumnAlias = map[string][]string{
FieldReservationName: {FieldReservationName},
FieldReservationProvider: {FieldReservationProvider},
FieldReservationRegion: {FieldReservationRegion},
FieldReservationInstanceType: {FieldReservationInstanceType, FieldReservationProductName},
FieldReservationPrice: {FieldReservationPrice},
FieldReservationCount: {FieldReservationCount, FieldReservationQuantity},
FieldReservationStartDate: {FieldReservationStartDate, FieldReservationPurchaseDate},
FieldReservationEndDate: {FieldReservationEndDate, FieldReservationExpirationDate},
FieldReservationZoneId: {FieldReservationZoneId},
FieldReservationZoneName: {FieldReservationZoneName},
FieldReservationProductName: {FieldReservationProductName},
FieldReservationQuantity: {FieldReservationQuantity},
FieldReservationPurchaseDate: {FieldReservationPurchaseDate},
FieldReservationExpirationDate: {FieldReservationExpirationDate},
FieldReservationType: {FieldReservationType},
FieldReservationDeepLinkToReservation: {FieldReservationDeepLinkToReservation},
}
Loading

0 comments on commit 5a90bf3

Please sign in to comment.