Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
127 changes: 33 additions & 94 deletions examples/terraform/jfrog-platform-aws-install/eks.tf
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ module "eks" {
eks_managed_node_group_defaults = {
ami_type = var.ami_type
iam_role_additional_policies = {
AmazonS3FullAccess = "arn:aws:iam::aws:policy/AmazonS3FullAccess"
AmazonS3FullAccess = "arn:aws:iam::aws:policy/AmazonS3FullAccess"
AmazonEBSCSIDriverPolicy = "arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy"
}
pre_bootstrap_user_data = <<-EOF
Expand All @@ -49,9 +49,9 @@ module "eks" {
xvda = {
device_name = "/dev/xvda"
ebs = {
volume_type = "gp3"
volume_size = 50
throughput = 125
volume_type = "gp3"
volume_size = var.eks_root_volume_size
throughput = var.eks_root_throughput
delete_on_termination = true
}
}
Expand All @@ -66,44 +66,19 @@ module "eks" {
artifactory = {
name = "${var.env_name}-artifactory"

instance_types = [(
var.sizing == "large" ? var.artifactory_node_size_large :
var.sizing == "xlarge" ? var.artifactory_node_size_large :
var.sizing == "2xlarge" ? var.artifactory_node_size_large :
var.artifactory_node_size_default
)]
min_size = 1
max_size = 10
desired_size = (
var.sizing == "medium" ? 2 :
var.sizing == "large" ? 3 :
var.sizing == "xlarge" ? 4 :
var.sizing == "2xlarge" ? 6 :
1
)
instance_types = [local.s.artifactory_instance]
min_size = 1
max_size = 10
desired_size = local.s.artifactory_desired

block_device_mappings = {
xvda = {
device_name = "/dev/xvda"
ebs = {
volume_type = "gp3"
volume_size = (
var.sizing == "large" ? var.artifactory_disk_size_large :
var.sizing == "xlarge" ? var.artifactory_disk_size_large :
var.sizing == "2xlarge" ? var.artifactory_disk_size_large :
var.artifactory_disk_size_default
)
iops = (
var.sizing == "large" ? var.artifactory_disk_iops_large :
var.sizing == "xlarge" ? var.artifactory_disk_iops_large :
var.sizing == "2xlarge" ? var.artifactory_disk_iops_large :
var.artifactory_disk_iops_default
)
throughput = (
var.sizing == "large" ? var.artifactory_disk_throughput_large :
var.sizing == "xlarge" ? var.artifactory_disk_throughput_large :
var.sizing == "2xlarge" ? var.artifactory_disk_throughput_large :
var.artifactory_disk_throughput_default
)
volume_type = "gp3"
volume_size = local.s.artifactory_disk_size
iops = local.s.artifactory_disk_iops
throughput = local.s.artifactory_disk_throughput
delete_on_termination = true
}
}
Expand All @@ -117,21 +92,10 @@ module "eks" {
nginx = {
name = "${var.env_name}-nginx"

instance_types = [(
var.sizing == "xlarge" ? var.nginx_node_size_large :
var.sizing == "2xlarge" ? var.nginx_node_size_large :
var.nginx_node_size_default
)]

min_size = 1
max_size = 10
desired_size = (
var.sizing == "medium" ? 2 :
var.sizing == "large" ? 2 :
var.sizing == "xlarge" ? 2 :
var.sizing == "2xlarge" ? 3 :
1
)
instance_types = [local.s.nginx_instance]
min_size = 1
max_size = 10
desired_size = local.s.nginx_desired

labels = {
"group" = "nginx"
Expand All @@ -142,43 +106,19 @@ module "eks" {
xray = {
name = "${var.env_name}-xray"

instance_types = [(
var.sizing == "xlarge" ? var.xray_node_size_xlarge :
var.sizing == "2xlarge" ? var.xray_node_size_xlarge :
var.xray_node_size_default
)]
min_size = 1
max_size = 10
desired_size = (
var.sizing == "medium" ? 2 :
var.sizing == "large" ? 3 :
var.sizing == "xlarge" ? 4 :
var.sizing == "2xlarge" ? 6 :
1
)
instance_types = [local.s.xray_instance]
min_size = 1
max_size = 10
desired_size = local.s.xray_desired

block_device_mappings = {
xvda = {
device_name = "/dev/xvda"
ebs = {
volume_type = "gp3"
volume_size = (
var.sizing == "large" ? var.xray_disk_size_large :
var.sizing == "xlarge" ? var.xray_disk_size_large :
var.sizing == "2xlarge" ? var.xray_disk_size_large :
var.xray_disk_size_default
)
iops = (
var.sizing == "large" ? var.xray_disk_iops_large :
var.sizing == "xlarge" ? var.xray_disk_iops_large :
var.sizing == "2xlarge" ? var.xray_disk_iops_large :
var.xray_disk_iops_default
)
throughput = (
var.sizing == "large" ? var.xray_disk_throughput_large :
var.sizing == "xlarge" ? var.xray_disk_throughput_large :
var.sizing == "2xlarge" ? var.xray_disk_throughput_large :
var.xray_disk_throughput_default
)
volume_type = "gp3"
volume_size = local.s.xray_disk_size
iops = local.s.xray_disk_iops
throughput = local.s.xray_disk_throughput
delete_on_termination = true
}
}
Expand All @@ -194,10 +134,9 @@ module "eks" {
name = "${var.env_name}-extra"

instance_types = [var.extra_node_size]

min_size = 0
max_size = 3
desired_size = var.extra_node_count
min_size = 0
max_size = 3
desired_size = var.extra_node_count

labels = {
"group" = "extra"
Expand All @@ -220,17 +159,17 @@ resource "kubernetes_storage_class" "gp3_storage_class" {
"storageclass.kubernetes.io/is-default-class" = "true"
}
}
storage_provisioner = "ebs.csi.aws.com"
volume_binding_mode = "WaitForFirstConsumer"
storage_provisioner = "ebs.csi.aws.com"
volume_binding_mode = "WaitForFirstConsumer"
allow_volume_expansion = true
parameters = {
"fsType" = "ext4"
"type" = "gp3"
"type" = "gp3"
}
}

module "ebs_csi_irsa_role" {
source = "terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks"
source = "terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks"
version = "~> 5.0"

role_name = "ebs-csi-${module.eks.cluster_name}-${var.region}"
Expand Down
17 changes: 6 additions & 11 deletions examples/terraform/jfrog-platform-aws-install/jfrog-platform.tf
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ provider "kubernetes" {

# Fetch the JFrog Platform Helm chart and untar it to the current directory so we can use the sizing yaml files
resource "null_resource" "fetch_platform_chart" {
triggers = {
version = var.jfrog_platform_chart_version
}
provisioner "local-exec" {
command = "rm -rf jfrog-platform-*.tgz"
}
Expand All @@ -23,17 +26,9 @@ resource "null_resource" "fetch_platform_chart" {

# Create an empty artifactory-license.yaml if missing
resource "local_file" "empty_license" {
count = fileexists("${path.module}/artifactory-license.yaml") ? 0 : 1
count = fileexists("${path.module}/artifactory-license.yaml") ? 0 : 1
filename = "${path.module}/artifactory-license.yaml"
content = "## Empty file to satisfy Helm requirements"
}

# Set the cache-fs-size based on the sizing variable to 80% of the disk size
locals {
cache-fs-size = (var.sizing == "large" ? var.artifactory_disk_size_large * 0.8 :
var.sizing == "xlarge" ? var.artifactory_disk_size_large * 0.8 :
var.sizing == "2xlarge" ? var.artifactory_disk_size_large * 0.8 :
var.artifactory_disk_size_default * 0.8)
content = "## Empty file to satisfy Helm requirements"
}

# Write the artifactory-custom.yaml file with the variables needed
Expand All @@ -42,7 +37,7 @@ resource "local_file" "jfrog_platform_values" {
artifactory:
artifactory:
persistence:
maxCacheSize: "${local.cache-fs-size}000000000"
maxCacheSize: "${local.cache_fs_size}000000000"
awsS3V3:
region: "${var.region}"
bucketName: "${local.artifactory_s3_bucket_name}"
Expand Down
139 changes: 139 additions & 0 deletions examples/terraform/jfrog-platform-aws-install/locals.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
# Centralized sizing configuration map.
# All sizing-driven values are defined here and referenced as local.s.* throughout the configuration.
# To add a new sizing tier, add an entry to sizing_config and update the variable validation in variables.tf.

locals {
sizing_config = {
small = {
# EKS node instance types
artifactory_instance = var.artifactory_node_size_default
xray_instance = var.xray_node_size_default
nginx_instance = var.nginx_node_size_default

# EKS desired node counts
artifactory_desired = 1
xray_desired = 1
nginx_desired = 1

# Artifactory EBS data volume
artifactory_disk_size = var.artifactory_disk_size_default
artifactory_disk_iops = var.artifactory_disk_iops_default
artifactory_disk_throughput = var.artifactory_disk_throughput_default

# Xray EBS data volume
xray_disk_size = var.xray_disk_size_default
xray_disk_iops = var.xray_disk_iops_default
xray_disk_throughput = var.xray_disk_throughput_default

# RDS instance classes
artifactory_rds_instance = var.artifactory_rds_size_default
xray_rds_instance = var.xray_rds_size_default

# RDS allocated storage (GiB)
artifactory_rds_disk = var.artifactory_rds_disk_size_default
xray_rds_disk = var.xray_rds_disk_size_default
}

medium = {
artifactory_instance = var.artifactory_node_size_default
xray_instance = var.xray_node_size_default
nginx_instance = var.nginx_node_size_default

artifactory_desired = 2
xray_desired = 2
nginx_desired = 2

artifactory_disk_size = var.artifactory_disk_size_default
artifactory_disk_iops = var.artifactory_disk_iops_default
artifactory_disk_throughput = var.artifactory_disk_throughput_default

xray_disk_size = var.xray_disk_size_default
xray_disk_iops = var.xray_disk_iops_default
xray_disk_throughput = var.xray_disk_throughput_default

artifactory_rds_instance = var.artifactory_rds_size_medium
xray_rds_instance = var.xray_rds_size_medium

artifactory_rds_disk = var.artifactory_rds_disk_size_medium
xray_rds_disk = var.xray_rds_disk_size_medium
}

large = {
artifactory_instance = var.artifactory_node_size_large
xray_instance = var.xray_node_size_default
nginx_instance = var.nginx_node_size_default

artifactory_desired = 3
xray_desired = 3
nginx_desired = 2

artifactory_disk_size = var.artifactory_disk_size_large
artifactory_disk_iops = var.artifactory_disk_iops_large
artifactory_disk_throughput = var.artifactory_disk_throughput_large

xray_disk_size = var.xray_disk_size_large
xray_disk_iops = var.xray_disk_iops_large
xray_disk_throughput = var.xray_disk_throughput_large

artifactory_rds_instance = var.artifactory_rds_size_large
xray_rds_instance = var.xray_rds_size_large

artifactory_rds_disk = var.artifactory_rds_disk_size_large
xray_rds_disk = var.xray_rds_disk_size_large
}

xlarge = {
artifactory_instance = var.artifactory_node_size_large
xray_instance = var.xray_node_size_xlarge
nginx_instance = var.nginx_node_size_large

artifactory_desired = 4
xray_desired = 4
nginx_desired = 2

artifactory_disk_size = var.artifactory_disk_size_large
artifactory_disk_iops = var.artifactory_disk_iops_large
artifactory_disk_throughput = var.artifactory_disk_throughput_large

xray_disk_size = var.xray_disk_size_large
xray_disk_iops = var.xray_disk_iops_large
xray_disk_throughput = var.xray_disk_throughput_large

artifactory_rds_instance = var.artifactory_rds_size_xlarge
xray_rds_instance = var.xray_rds_size_xlarge

artifactory_rds_disk = var.artifactory_rds_disk_size_xlarge
xray_rds_disk = var.xray_rds_disk_size_xlarge
}

"2xlarge" = {
artifactory_instance = var.artifactory_node_size_large
xray_instance = var.xray_node_size_xlarge
nginx_instance = var.nginx_node_size_large

artifactory_desired = 6
xray_desired = 6
nginx_desired = 3

artifactory_disk_size = var.artifactory_disk_size_large
artifactory_disk_iops = var.artifactory_disk_iops_large
artifactory_disk_throughput = var.artifactory_disk_throughput_large

xray_disk_size = var.xray_disk_size_large
xray_disk_iops = var.xray_disk_iops_large
xray_disk_throughput = var.xray_disk_throughput_large

artifactory_rds_instance = var.artifactory_rds_size_2xlarge
xray_rds_instance = var.xray_rds_size_2xlarge

artifactory_rds_disk = var.artifactory_rds_disk_size_2xlarge
xray_rds_disk = var.xray_rds_disk_size_2xlarge
}
}

# Shorthand for the selected sizing tier — all resources use local.s.*
s = local.sizing_config[var.sizing]

# Artifactory cache size: 80% of the data disk, expressed in bytes for the Helm value
cache_fs_size = local.s.artifactory_disk_size * 0.8
}
1 change: 1 addition & 0 deletions examples/terraform/jfrog-platform-aws-install/metrics.tf
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ resource "helm_release" "metrics_server" {

name = "metrics-server"
chart = "metrics-server"
version = var.metrics_server_chart_version
namespace = "kube-system"

# Repository to install the chart from
Expand Down
Loading
Loading