Skip to content

Commit eea14b4

Browse files
Added support for EKS
1 parent 7d41e0c commit eea14b4

File tree

11 files changed

+292
-3
lines changed

11 files changed

+292
-3
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
data "aws_eks_cluster" "eks" {
2+
name = var.eks_cluster_name
3+
}
4+
5+
data "aws_vpc" "eks_vpc" {
6+
id = data.aws_eks_cluster.eks.vpc_config[0].vpc_id
7+
}
8+
9+
data "aws_subnets" "eks_subnets" {
10+
filter {
11+
name = "vpc-id"
12+
values = [data.aws_vpc.eks_vpc.id]
13+
}
14+
}
15+
16+
data "aws_subnet" "eks_subnet" {
17+
for_each = toset(data.aws_subnets.eks_subnets.ids)
18+
id = each.value
19+
}
20+
21+
locals {
22+
# Get all subnet CIDR blocks for reserved subnets
23+
subnet_cidrs = [for s in data.aws_subnet.eks_subnet : s.cidr_block]
24+
}
25+
26+
module "castai_omni_cluster" {
27+
source = "../.."
28+
29+
k8s_provider = "eks"
30+
api_url = var.castai_api_url
31+
api_token = var.castai_api_token
32+
organization_id = var.organization_id
33+
cluster_id = var.cluster_id
34+
cluster_name = var.eks_cluster_name
35+
cluster_region = var.eks_cluster_region
36+
37+
api_server_address = data.aws_eks_cluster.eks.endpoint
38+
pod_cidr = data.aws_eks_cluster.eks.kubernetes_network_config[0].service_ipv4_cidr
39+
service_cidr = data.aws_eks_cluster.eks.kubernetes_network_config[0].service_ipv4_cidr
40+
reserved_subnet_cidrs = local.subnet_cidrs
41+
}
42+
43+
module "castai_aws_edge_location" {
44+
source = "github.com/castai/terraform-castai-omni-edge-location-aws"
45+
46+
cluster_id = var.cluster_id
47+
organization_id = var.organization_id
48+
region = "eu-west-1"
49+
50+
tags = {
51+
ManagedBy = "terraform"
52+
}
53+
54+
depends_on = [module.castai_omni_cluster]
55+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
terraform {
2+
required_version = ">= 1.11"
3+
4+
required_providers {
5+
castai = {
6+
source = "castai/castai"
7+
version = ">= 8.3.0"
8+
}
9+
aws = {
10+
source = "hashicorp/aws"
11+
version = ">= 5.0"
12+
}
13+
helm = {
14+
source = "hashicorp/helm"
15+
version = ">= 3.1.1"
16+
}
17+
null = {
18+
source = "hashicorp/null"
19+
version = ">= 3.2.4"
20+
}
21+
external = {
22+
source = "hashicorp/external"
23+
version = ">= 2.3.5"
24+
}
25+
}
26+
}
27+
28+
provider "aws" {
29+
region = var.eks_cluster_region
30+
}
31+
32+
provider "helm" {
33+
kubernetes = {
34+
host = data.aws_eks_cluster.eks.endpoint
35+
cluster_ca_certificate = base64decode(data.aws_eks_cluster.eks.certificate_authority[0].data)
36+
exec = {
37+
api_version = "client.authentication.k8s.io/v1beta1"
38+
command = "aws"
39+
args = [
40+
"eks",
41+
"get-token",
42+
"--cluster-name",
43+
data.aws_eks_cluster.eks.name,
44+
"--region",
45+
var.eks_cluster_region
46+
]
47+
}
48+
}
49+
}
50+
51+
provider "castai" {
52+
api_token = var.castai_api_token
53+
api_url = var.castai_api_url
54+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
gke_project_id = "<place-holder>"
2+
gke_cluster_location = "<place-holder>"
3+
gke_cluster_name = "<place-holder>"
4+
5+
castai_api_url = "https://api.cast.ai"
6+
castai_api_token = "<place-holder>"
7+
cluster_id = "<place-holder>"
8+
organization_id = "<place-holder>"
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
variable "eks_cluster_region" {
2+
description = "EKS cluster region"
3+
type = string
4+
}
5+
6+
variable "eks_cluster_name" {
7+
description = "EKS Cluster Name"
8+
type = string
9+
}
10+
11+
variable "castai_api_url" {
12+
description = "Cast AI API URL"
13+
type = string
14+
default = "https://api.cast.ai"
15+
}
16+
17+
variable "castai_api_token" {
18+
description = "Cast AI API Token"
19+
type = string
20+
sensitive = true
21+
}
22+
23+
variable "organization_id" {
24+
description = "Cast AI Organization ID"
25+
type = string
26+
}
27+
28+
variable "cluster_id" {
29+
description = "Cast AI Cluster ID"
30+
type = string
31+
}

examples/onboarding-with-existing-gke-cluster/main.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ data "google_compute_subnetwork" "gke_subnet" {
2727
module "castai_omni_cluster" {
2828
source = "../.."
2929

30+
k8s_provider = "gke"
3031
api_url = var.castai_api_url
3132
api_token = var.castai_api_token
3233
organization_id = var.organization_id

main.tf

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,14 @@ locals {
88
omni_agent_release = "omni-agent"
99
omni_agent_chart = "omni-agent"
1010
castai_helm_repository = "https://castai.github.io/helm-charts"
11+
12+
# Select the appropriate set_values based on k8s_provider
13+
set_values = var.k8s_provider == "gke" ? module.liqo_helm_values_gke[0].set_values : module.liqo_helm_values_eks[0].set_values
1114
}
1215

13-
# Compute Liqo Helm chart configuration
14-
module "liqo_helm_values" {
16+
# GKE-specific Liqo Helm chart configuration
17+
module "liqo_helm_values_gke" {
18+
count = var.k8s_provider == "gke" ? 1 : 0
1519
source = "./modules/gke"
1620

1721
image_tag = local.liqo_image_tag
@@ -24,6 +28,20 @@ module "liqo_helm_values" {
2428
reserved_subnet_cidrs = var.reserved_subnet_cidrs
2529
}
2630

31+
# EKS-specific Liqo Helm chart configuration
32+
module "liqo_helm_values_eks" {
33+
count = var.k8s_provider == "eks" ? 1 : 0
34+
source = "./modules/eks"
35+
36+
image_tag = local.liqo_image_tag
37+
cluster_name = var.cluster_name
38+
cluster_region = var.cluster_region
39+
api_server_address = var.api_server_address
40+
pod_cidr = var.pod_cidr
41+
service_cidr = var.service_cidr
42+
reserved_subnet_cidrs = var.reserved_subnet_cidrs
43+
}
44+
2745
# Liqo Helm Release
2846
resource "helm_release" "liqo" {
2947
name = local.liqo_release_name
@@ -35,7 +53,7 @@ resource "helm_release" "liqo" {
3553
cleanup_on_fail = true
3654
wait = true
3755

38-
set = module.liqo_helm_values.set_values
56+
set = local.set_values
3957
}
4058

4159
# Wait for Liqo network resources to be ready before proceeding

modules/eks/main.tf

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
locals {
2+
pools_cidrs = ["10.0.0.0/8", "192.168.0.0/16", "172.16.0.0/12", var.service_cidr]
3+
4+
basic_set_values = [
5+
{
6+
name = "tag"
7+
value = var.image_tag
8+
},
9+
{
10+
name = "apiServer.address"
11+
value = var.api_server_address
12+
},
13+
{
14+
name = "discovery.config.clusterID"
15+
value = var.cluster_name
16+
},
17+
{
18+
name = "discovery.config.clusterLabels.liqo\\.io/provider"
19+
value = "eks"
20+
},
21+
{
22+
name = "discovery.config.clusterLabels.topology\\.kubernetes\\.io/region"
23+
value = var.cluster_region
24+
},
25+
{
26+
name = "ipam.podCIDR"
27+
value = var.pod_cidr
28+
},
29+
{
30+
name = "ipam.serviceCIDR"
31+
value = var.service_cidr
32+
},
33+
{
34+
name = "telemetry.enabled"
35+
value = "false"
36+
}
37+
]
38+
39+
pools_set_values = [
40+
for idx, cidr in local.pools_cidrs : {
41+
name = "ipam.pools[${idx}]"
42+
value = cidr
43+
}
44+
]
45+
46+
reserved_subnets_set_values = [
47+
for idx, cidr in var.reserved_subnet_cidrs : {
48+
name = "ipam.reservedSubnets[${idx}]"
49+
value = cidr
50+
}
51+
]
52+
53+
eks_specific_set_values = [
54+
{
55+
name = "networking.fabric.config.fullMasquerade"
56+
value = "true"
57+
},
58+
{
59+
name = "networking.gatewayTemplates.server.service.annotations.service\\.beta\\.kubernetes\\.io/aws-load-balancer-type"
60+
value = "nlb"
61+
}
62+
]
63+
64+
all_set_values = concat(
65+
local.basic_set_values,
66+
local.pools_set_values,
67+
local.reserved_subnets_set_values,
68+
local.eks_specific_set_values
69+
)
70+
}

modules/eks/outputs.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
output "set_values" {
2+
description = "All Helm set values for liqo configuration"
3+
value = local.all_set_values
4+
}

modules/eks/variables.tf

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
variable "image_tag" {
2+
description = "Docker image tag"
3+
type = string
4+
}
5+
6+
variable "cluster_name" {
7+
description = "EKS cluster name"
8+
type = string
9+
}
10+
11+
variable "cluster_region" {
12+
description = "EKS region for topology labels"
13+
type = string
14+
}
15+
16+
variable "api_server_address" {
17+
description = "Kubernetes API server address"
18+
type = string
19+
}
20+
21+
variable "pod_cidr" {
22+
description = "Pod CIDR for IPAM configuration"
23+
type = string
24+
}
25+
26+
variable "service_cidr" {
27+
description = "Service CIDR for IPAM configuration"
28+
type = string
29+
}
30+
31+
variable "reserved_subnet_cidrs" {
32+
description = "List of subnet CIDRs for IPAM reserved subnets"
33+
type = list(string)
34+
default = []
35+
}

modules/eks/versions.tf

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
terraform {
2+
required_version = ">= 1.11"
3+
}

0 commit comments

Comments
 (0)