Skip to content

Commit 4cbd351

Browse files
feat: sqs options (#18)
* feat: sqs options * feat: bump versions of submodules
1 parent 7233361 commit 4cbd351

10 files changed

Lines changed: 103 additions & 23 deletions

File tree

main.tf

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ locals {
1414
}
1515

1616
module "spacelift" {
17-
source = "github.com/spacelift-io/terraform-aws-spacelift-selfhosted?ref=v1.1.0"
17+
source = "github.com/spacelift-io/terraform-aws-spacelift-selfhosted?ref=v1.10.0"
1818

1919
unique_suffix = local.unique_suffix
2020
region = var.aws_region
@@ -46,6 +46,8 @@ module "spacelift" {
4646
rds_preferred_backup_window = var.rds_preferred_backup_window
4747
rds_backup_retention_period = var.rds_backup_retention_period
4848

49+
create_sqs = var.create_sqs
50+
4951
website_endpoint = "https://${var.server_domain}"
5052

5153
s3_retain_on_destroy = var.s3_retain_on_destroy
@@ -59,7 +61,6 @@ module "iam" {
5961
unique_suffix = module.spacelift.unique_suffix
6062
aws_account_id = data.aws_caller_identity.current.account_id
6163
aws_partition = data.aws_partition.current.partition
62-
aws_dns_suffix = data.aws_partition.current.dns_suffix
6364
kms_key_arn = module.spacelift.kms_key_arn
6465
kms_encryption_key_arn = module.spacelift.kms_encryption_key_arn
6566
kms_signing_key_arn = module.spacelift.kms_signing_key_arn
@@ -78,6 +79,8 @@ module "iam" {
7879
server_service_account_name = var.server_service_account_name
7980
drain_service_account_name = var.drain_service_account_name
8081
scheduler_service_account_name = var.scheduler_service_account_name
82+
create_sqs = var.create_sqs
83+
queue_arns = module.spacelift.sqs_queue_arns
8184
}
8285

8386
module "kube_outputs" {
@@ -113,8 +116,10 @@ module "kube_outputs" {
113116
ecr_backend_repository_url = module.spacelift.ecr_backend_repository_url
114117
server_service_account_name = var.server_service_account_name
115118
drain_service_account_name = var.drain_service_account_name
116-
scheduler_service_account_name = var.drain_service_account_name
119+
scheduler_service_account_name = var.scheduler_service_account_name
117120
server_role_arn = module.iam.server_role_arn
118121
drain_role_arn = module.iam.drain_role_arn
119122
scheduler_role_arn = module.iam.scheduler_role_arn
123+
create_sqs = var.create_sqs
124+
queue_urls = module.spacelift.sqs_queue_urls
120125
}

modules/iam/iam_submodule.tf

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
module "iam_roles_and_policies" {
2-
source = "github.com/spacelift-io/terraform-aws-iam-spacelift-selfhosted?ref=v1.1.0"
2+
source = "github.com/spacelift-io/terraform-aws-iam-spacelift-selfhosted?ref=v1.3.1"
33

44
write_as_files = false
55
kubernetes_role_assumption_config = {
6-
aws_account_id = var.aws_account_id
7-
oidc_provider = var.oidc_provider
8-
namespace = var.namespace
9-
server_service_account_name = var.server_service_account_name
10-
drain_service_account_name = var.drain_service_account_name
11-
scheduler_service_account_name = var.scheduler_service_account_name
6+
aws_account_id = var.aws_account_id
7+
oidc_provider = var.oidc_provider
8+
namespace = var.namespace
9+
server_service_account_name = var.server_service_account_name
10+
drain_service_account_name = var.drain_service_account_name
11+
scheduler_service_account_name = var.scheduler_service_account_name
12+
vcs_gateway_service_account_name = "unsupported-today-but-required-for-future-compatibility"
1213
}
1314

14-
aws_partition = var.aws_partition
15-
aws_dns_suffix = var.aws_dns_suffix
15+
aws_partition = var.aws_partition
1616

1717
kms_encryption_key_arn = var.kms_encryption_key_arn
1818
kms_signing_key_arn = var.kms_signing_key_arn
@@ -28,4 +28,15 @@ module "iam_roles_and_policies" {
2828
uploads_bucket_name = var.uploads_bucket_name
2929
user_uploaded_workspaces_bucket_name = var.user_uploaded_workspaces_bucket_name
3030
workspace_bucket_name = var.workspace_bucket_name
31+
32+
sqs_queues = var.create_sqs ? {
33+
deadletter = local.deadletter_queue_arn
34+
deadletter_fifo = local.deadletter_fifo_queue_arn
35+
async_jobs = local.async_jobs_queue_arn
36+
async_jobs_fifo = local.async_jobs_fifo_queue_arn
37+
events_inbox = local.events_inbox_queue_arn
38+
cronjobs = local.cronjobs_queue_arn
39+
webhooks = local.webhooks_queue_arn
40+
iot = local.iot_queue_arn
41+
} : null
3142
}

modules/iam/locals.tf

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
locals {
2+
async_jobs_queue_arn = var.create_sqs ? var.queue_arns["async_jobs"] : ""
3+
async_jobs_fifo_queue_arn = var.create_sqs ? var.queue_arns["async_jobs_fifo"] : ""
4+
events_inbox_queue_arn = var.create_sqs ? var.queue_arns["events_inbox"] : ""
5+
cronjobs_queue_arn = var.create_sqs ? var.queue_arns["cronjobs"] : ""
6+
deadletter_queue_arn = var.create_sqs ? var.queue_arns["deadletter"] : ""
7+
deadletter_fifo_queue_arn = var.create_sqs ? var.queue_arns["deadletter_fifo"] : ""
8+
webhooks_queue_arn = var.create_sqs ? var.queue_arns["webhooks"] : ""
9+
iot_queue_arn = var.create_sqs ? var.queue_arns["iot"] : ""
10+
}

modules/iam/variables.tf

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,6 @@ variable "aws_partition" {
1313
description = "The AWS partition the services are being run in."
1414
}
1515

16-
variable "aws_dns_suffix" {
17-
type = string
18-
description = "The AWS DNS suffix for the region."
19-
}
20-
2116
variable "kms_key_arn" {
2217
type = string
2318
description = "The ARN of the KMS key used for encrypting AWS resources (ECR, S3, etc.)."
@@ -107,3 +102,15 @@ variable "scheduler_service_account_name" {
107102
type = string
108103
description = "The name of the Kubernetes service account used by the server."
109104
}
105+
106+
variable "create_sqs" {
107+
type = bool
108+
description = "Whether to create the SQS queues for Spacelift."
109+
default = false
110+
}
111+
112+
variable "queue_arns" {
113+
type = map(string)
114+
default = null
115+
description = "A map of SQS queue names to arns. Only required if create_sqs is false."
116+
}

modules/kube-outputs/kubernetes-secrets.tftpl

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ stringData:
1515
ENCRYPTION_TYPE: "${ENCRYPTION_TYPE}"
1616
ENCRYPTION_KMS_ENCRYPTION_KEY_ID: "${ENCRYPTION_KMS_ENCRYPTION_KEY_ID}"
1717
ENCRYPTION_KMS_SIGNING_KEY_ID: "${ENCRYPTION_KMS_SIGNING_KEY_ID}"
18-
MESSAGE_QUEUE_TYPE: "postgres"
18+
MESSAGE_QUEUE_TYPE: "${MESSAGE_QUEUE_TYPE}"
1919
OBJECT_STORAGE_TYPE: "aws"
2020
OBJECT_STORAGE_BUCKET_DELIVERIES: "${OBJECT_STORAGE_BUCKET_DELIVERIES}"
2121
OBJECT_STORAGE_BUCKET_LARGE_QUEUE_MESSAGES: "${OBJECT_STORAGE_BUCKET_LARGE_QUEUE_MESSAGES}"
@@ -34,6 +34,20 @@ stringData:
3434
LICENSE_TOKEN: "${LICENSE_TOKEN}"
3535
OBSERVABILITY_VENDOR: "Disabled"
3636
SPACELIFT_PUBLIC_API: "${SPACELIFT_PUBLIC_API}"
37+
%{ if MESSAGE_QUEUE_TYPE == "sqs" ~}
38+
39+
# The above line must be blank for the templating to work correctly.
40+
MESSAGE_QUEUE_SQS_ASYNC_URL: "${MESSAGE_QUEUE_SQS_ASYNC_URL}"
41+
MESSAGE_QUEUE_SQS_ASYNC_FIFO_URL: "${MESSAGE_QUEUE_SQS_ASYNC_FIFO_URL}"
42+
MESSAGE_QUEUE_SQS_CRONJOBS_URL: "${MESSAGE_QUEUE_SQS_CRONJOBS_URL}"
43+
MESSAGE_QUEUE_SQS_DLQ_URL: "${MESSAGE_QUEUE_SQS_DLQ_URL}"
44+
MESSAGE_QUEUE_SQS_DLQ_FIFO_URL: "${MESSAGE_QUEUE_SQS_DLQ_FIFO_URL}"
45+
MESSAGE_QUEUE_SQS_EVENTS_INBOX_URL: "${MESSAGE_QUEUE_SQS_EVENTS_INBOX_URL}"
46+
MESSAGE_QUEUE_SQS_IOT_URL: "${MESSAGE_QUEUE_SQS_IOT_URL}"
47+
MESSAGE_QUEUE_SQS_WEBHOOKS_URL: "${MESSAGE_QUEUE_SQS_WEBHOOKS_URL}"
48+
%{ endif ~}
49+
50+
# The above line must be blank for the templating to work correctly.
3751
---
3852
apiVersion: v1
3953
kind: Secret

modules/kube-outputs/locals.tf

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
locals {
2+
async_jobs_queue_url = var.create_sqs ? var.queue_urls["async_jobs"] : ""
3+
async_jobs_fifo_queue_url = var.create_sqs ? var.queue_urls["async_jobs_fifo"] : ""
4+
events_inbox_queue_url = var.create_sqs ? var.queue_urls["events_inbox"] : ""
5+
cronjobs_queue_url = var.create_sqs ? var.queue_urls["cronjobs"] : ""
6+
deadletter_queue_url = var.create_sqs ? var.queue_urls["deadletter"] : ""
7+
deadletter_fifo_queue_url = var.create_sqs ? var.queue_urls["deadletter_fifo"] : ""
8+
webhooks_queue_url = var.create_sqs ? var.queue_urls["webhooks"] : ""
9+
iot_queue_url = var.create_sqs ? var.queue_urls["iot"] : ""
10+
}

modules/kube-outputs/outputs.tf

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,16 @@ output "kubernetes_secrets" {
4040
SPACELIFT_VERSION = var.spacelift_version != null ? var.spacelift_version : ""
4141
ADMIN_USERNAME = var.admin_username != null ? var.admin_username : ""
4242
ADMIN_PASSWORD = var.admin_password != null ? var.admin_password : ""
43+
44+
MESSAGE_QUEUE_TYPE = var.create_sqs ? "sqs" : "postgres"
45+
MESSAGE_QUEUE_SQS_ASYNC_URL = local.async_jobs_queue_url
46+
MESSAGE_QUEUE_SQS_ASYNC_FIFO_URL = local.async_jobs_fifo_queue_url
47+
MESSAGE_QUEUE_SQS_CRONJOBS_URL = local.cronjobs_queue_url
48+
MESSAGE_QUEUE_SQS_DLQ_URL = local.deadletter_queue_url
49+
MESSAGE_QUEUE_SQS_DLQ_FIFO_URL = local.deadletter_fifo_queue_url
50+
MESSAGE_QUEUE_SQS_EVENTS_INBOX_URL = local.events_inbox_queue_url
51+
MESSAGE_QUEUE_SQS_IOT_URL = local.iot_queue_url
52+
MESSAGE_QUEUE_SQS_WEBHOOKS_URL = local.webhooks_queue_url
4353
})
4454
}
4555

modules/kube-outputs/variables.tf

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,3 +183,15 @@ variable "scheduler_role_arn" {
183183
type = string
184184
description = "The ARN of the IAM role to use for the scheduler service account."
185185
}
186+
187+
variable "create_sqs" {
188+
type = bool
189+
description = "Whether to create the SQS queues for Spacelift."
190+
default = false
191+
}
192+
193+
variable "queue_urls" {
194+
type = map(string)
195+
default = null
196+
description = "A map of SQS queue names to urls. Only required if create_sqs is false."
197+
}

outputs.tf

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,11 +157,6 @@ output "vpc_id" {
157157
description = "ID of the VPC. It will be null if create_vpc is false."
158158
}
159159

160-
output "rds_global_cluster_id" {
161-
description = "ID of the global Aurora cluster. Will be null if create_database is false."
162-
value = var.create_database ? module.spacelift.rds_global_cluster_id : null
163-
}
164-
165160
output "rds_cluster_endpoint" {
166161
description = "Endpoint of the RDS cluster. Will be null if create_database is false."
167162
value = var.create_database ? module.spacelift.rds_cluster_endpoint : null

variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ variable "kms_arn" {
99
default = null
1010
}
1111

12+
variable "create_sqs" {
13+
type = bool
14+
description = "Whether to create the SQS queues for Spacelift."
15+
default = false
16+
}
17+
1218
variable "create_vpc" {
1319
type = bool
1420
description = "Whether to create a VPC for the Spacelift resources. Default is true. Note: if this is false, and create_database is true, you must provide rds_subnet_ids and rds_security_group_ids."

0 commit comments

Comments
 (0)