Skip to content

Instantly share code, notes, and snippets.

@evoxmusic
Created July 26, 2023 10:14
Show Gist options
  • Save evoxmusic/418382e953e2e18a950a31547a9f7596 to your computer and use it in GitHub Desktop.
Save evoxmusic/418382e953e2e18a950a31547a9f7596 to your computer and use it in GitHub Desktop.
Qovery - Terraform Export for Windmill
terraform {
required_providers {
qovery = {
source = "qovery/qovery"
version = "0.18.0"
}
}
}
provider "qovery" {
token = var.qovery_access_token
}
resource "qovery_organization" "organization_z51937012" {
name = "Qovery Prod"
plan = "BUSINESS"
description = "Production organization used for Qovery core and related services ✨"
}
resource "qovery_aws_credentials" "aws_creds_z5b99737b" {
organization_id = qovery_organization.organization_z51937012.id
name = "Qovery Prod"
access_key_id = var.access_key_id
secret_access_key = var.secret_access_key
}
resource "qovery_cluster" "cluster_zcb13209d" {
organization_id = qovery_organization.organization_z51937012.id
credentials_id = qovery_aws_credentials.aws_creds_z5b99737b.id
name = "Qovery Prod Backend"
cloud_provider = "AWS"
region = "us-east-2"
instance_type = "t3a.2xlarge"
min_running_nodes = 3
max_running_nodes = 10
state = "DEPLOYED"
features = {
vpc_subnet = "10.0.0.0/16"
static_ip = "false"
}
routing_table = [
]
advanced_settings_json = jsonencode(
{
"registry.image_retention_time" : 31536000,
"load_balancer.size" : "lb-s",
"pleco.resources_ttl" : -1,
"loki.log_retention_in_week" : 12,
"aws.iam.admin_group" : "Admins",
"aws.vpc.enable_s3_flow_logs" : true,
"aws.vpc.flow_logs_retention_days" : 365,
"aws.cloudwatch.eks_logs_retention_days" : 365,
"aws.eks.ec2.metadata_imds" : "optional",
"cloud_provider.container_registry.tags" : {},
"database.postgresql.deny_public_access" : true,
"database.mysql.deny_public_access" : true,
"database.mongodb.deny_public_access" : true,
"database.redis.deny_public_access" : true,
"database.postgresql.allowed_cidrs" : ["10.0.0.0/16"],
"database.mysql.allowed_cidrs" : ["10.0.0.0/16"],
"database.mongodb.allowed_cidrs" : ["10.0.0.0/16"],
"database.redis.allowed_cidrs" : ["10.0.0.0/16"]
}
)
}
resource "qovery_project" "project_z2e51a3dc" {
organization_id = qovery_organization.organization_z51937012.id
name = "Data Eng / Windmill"
description = "Windmill is an open source tool written in Rust to replace Airflow"
}
resource "qovery_environment" "environment_z0fc4f959" {
project_id = qovery_project.project_z2e51a3dc.id
cluster_id = qovery_cluster.cluster_zcb13209d.id
name = "production"
mode = "PRODUCTION"
environment_variables = [
{
key = "METRICS_ADDR"
value = "false"
},
{
key = "RUST_LOG"
value = "info"
},
{
key = "WM_BASE_URL"
value = "https://{{WINDMILL_SERVER_HOST}}"
}
]
}
resource "qovery_database" "database_z7ffdb63c" {
environment_id = qovery_environment.environment_z0fc4f959.id
name = "db"
type = "POSTGRESQL"
version = "14"
mode = "MANAGED"
accessibility = "PRIVATE"
storage = 50
instance_type = "db.t3.medium"
deployment_stage_id = qovery_deployment_stage.deployment_stage_ze428a4f3.id
}
resource "qovery_application" "application_z53db3515" {
environment_id = qovery_environment.environment_z0fc4f959.id
name = "windmill-worker"
git_repository = {
url = "https://github.com/Qovery/windmill.git"
branch = "main"
root_path = "/"
}
cpu = 500
memory = 512
min_running_instances = 3
max_running_instances = 6
auto_preview = false
build_mode = "DOCKER"
dockerfile_path = "Dockerfile"
deployment_stage_id = qovery_deployment_stage.deployment_stage_z3ecd4f41.id
healthchecks = {
readiness_probe = {
type = {
}
initial_delay_seconds = 30
period_seconds = 10
timeout_seconds = 5
failure_threshold = 9
success_threshold = 1
}
liveness_probe = {
type = {
}
initial_delay_seconds = 30
period_seconds = 10
timeout_seconds = 5
failure_threshold = 9
success_threshold = 1
}
}
ports = [
]
storage = [
]
custom_domains = [
]
environment_variables = [
{
key = "KEEP_JOB_DIR"
value = "false"
},
{
key = "DISABLE_SERVER"
value = "true"
},
{
key = "NUM_WORKERS"
value = "1"
}
]
advanced_settings_json = jsonencode(
{
"deployment.delay_start_time_sec" : 30,
"deployment.termination_grace_period_seconds" : 60,
"deployment.custom_domain_check_enabled" : true,
"deployment.update_strategy.type" : "RollingUpdate",
"deployment.update_strategy.rolling_update.max_unavailable_percent" : 25,
"deployment.update_strategy.rolling_update.max_surge_percent" : 25,
"build.timeout_max_sec" : 1800,
"build.cpu_max_in_milli" : 4000,
"build.ram_max_in_gib" : 8,
"network.ingress.proxy_body_size_mb" : 100,
"network.ingress.enable_cors" : false,
"network.ingress.cors_allow_origin" : "*",
"network.ingress.cors_allow_methods" : "GET, PUT, POST, DELETE, PATCH, OPTIONS",
"network.ingress.cors_allow_headers" : "DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization",
"network.ingress.proxy_buffer_size_kb" : 4,
"network.ingress.keepalive_time_seconds" : 3600,
"network.ingress.keepalive_timeout_seconds" : 60,
"network.ingress.send_timeout_seconds" : 60,
"network.ingress.proxy_connect_timeout_seconds" : 60,
"network.ingress.proxy_send_timeout_seconds" : 60,
"network.ingress.proxy_read_timeout_seconds" : 60,
"network.ingress.grpc_send_timeout_seconds" : 60,
"network.ingress.grpc_read_timeout_seconds" : 60,
"network.ingress.enable_sticky_session" : false,
"network.ingress.whitelist_source_range" : "0.0.0.0/0",
"network.ingress.denylist_source_range" : "",
"network.ingress.basic_auth_env_var" : "",
"hpa.cpu.average_utilization_percent" : 60,
"security.service_account_name" : ""
}
)
}
resource "qovery_application" "application_z91b63569" {
environment_id = qovery_environment.environment_z0fc4f959.id
name = "windmill-server"
git_repository = {
url = "https://github.com/Qovery/windmill.git"
branch = "main"
root_path = "/"
}
cpu = 1000
memory = 1024
min_running_instances = 1
max_running_instances = 1
auto_preview = false
build_mode = "DOCKER"
dockerfile_path = "Dockerfile"
deployment_stage_id = qovery_deployment_stage.deployment_stage_z3ecd4f41.id
healthchecks = {
readiness_probe = {
type = {
tcp = {
port = 8000
}
}
initial_delay_seconds = 30
period_seconds = 10
timeout_seconds = 1
failure_threshold = 3
success_threshold = 1
}
liveness_probe = {
type = {
tcp = {
port = 8000
}
}
initial_delay_seconds = 30
period_seconds = 10
timeout_seconds = 5
failure_threshold = 3
success_threshold = 1
}
}
ports = [
{
internal_port = 8000
is_default = true
publicly_accessible = true
external_port = 443
name = "p8000"
protocol = "HTTP"
}
]
storage = [
]
custom_domains = [
{
domain = "https://windmill.qovery.com"
}
]
environment_variables = [
{
key = "NUM_WORKERS"
value = "0"
},
{
key = "DISABLE_SERVER"
value = "false"
},
{
key = "BASIC_AUTH_CREDENTIALS"
value = "qovery:$apr1$iJmyJw2E$YEwbIc0mp6z.KQ5UxZ24V."
}
]
advanced_settings_json = jsonencode(
{
"deployment.delay_start_time_sec" : 30,
"deployment.termination_grace_period_seconds" : 60,
"deployment.custom_domain_check_enabled" : true,
"deployment.update_strategy.type" : "RollingUpdate",
"deployment.update_strategy.rolling_update.max_unavailable_percent" : 25,
"deployment.update_strategy.rolling_update.max_surge_percent" : 25,
"build.timeout_max_sec" : 1800,
"build.cpu_max_in_milli" : 4000,
"build.ram_max_in_gib" : 8,
"network.ingress.proxy_body_size_mb" : 100,
"network.ingress.enable_cors" : false,
"network.ingress.cors_allow_origin" : "*",
"network.ingress.cors_allow_methods" : "GET, PUT, POST, DELETE, PATCH, OPTIONS",
"network.ingress.cors_allow_headers" : "DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization",
"network.ingress.proxy_buffer_size_kb" : 4,
"network.ingress.keepalive_time_seconds" : 3600,
"network.ingress.keepalive_timeout_seconds" : 60,
"network.ingress.send_timeout_seconds" : 60,
"network.ingress.proxy_connect_timeout_seconds" : 60,
"network.ingress.proxy_send_timeout_seconds" : 60,
"network.ingress.proxy_read_timeout_seconds" : 60,
"network.ingress.grpc_send_timeout_seconds" : 60,
"network.ingress.grpc_read_timeout_seconds" : 60,
"network.ingress.enable_sticky_session" : false,
"network.ingress.whitelist_source_range" : "0.0.0.0/0",
"network.ingress.denylist_source_range" : "",
"network.ingress.basic_auth_env_var" : "BASIC_AUTH_CREDENTIALS",
"hpa.cpu.average_utilization_percent" : 60,
"security.service_account_name" : ""
}
)
}
resource "qovery_application" "application_zd3816100" {
environment_id = qovery_environment.environment_z0fc4f959.id
name = "windmill-lsp"
git_repository = {
url = "https://github.com/Qovery/windmill.git"
branch = "main"
root_path = "/"
}
cpu = 500
memory = 512
min_running_instances = 1
max_running_instances = 1
auto_preview = false
build_mode = "DOCKER"
dockerfile_path = "Dockerfile.lsp"
deployment_stage_id = qovery_deployment_stage.deployment_stage_z3ecd4f41.id
healthchecks = {
readiness_probe = {
type = {
tcp = {
port = 3001
}
}
initial_delay_seconds = 30
period_seconds = 10
timeout_seconds = 1
failure_threshold = 3
success_threshold = 1
}
liveness_probe = {
type = {
tcp = {
port = 3001
}
}
initial_delay_seconds = 30
period_seconds = 10
timeout_seconds = 5
failure_threshold = 3
success_threshold = 1
}
}
ports = [
{
internal_port = 3001
is_default = true
publicly_accessible = true
external_port = 443
name = "p3001"
protocol = "HTTP"
}
]
storage = [
]
custom_domains = [
]
advanced_settings_json = jsonencode(
{
"deployment.delay_start_time_sec" : 30,
"deployment.termination_grace_period_seconds" : 60,
"deployment.custom_domain_check_enabled" : true,
"deployment.update_strategy.type" : "RollingUpdate",
"deployment.update_strategy.rolling_update.max_unavailable_percent" : 25,
"deployment.update_strategy.rolling_update.max_surge_percent" : 25,
"build.timeout_max_sec" : 1800,
"build.cpu_max_in_milli" : 4000,
"build.ram_max_in_gib" : 8,
"network.ingress.proxy_body_size_mb" : 100,
"network.ingress.enable_cors" : false,
"network.ingress.cors_allow_origin" : "*",
"network.ingress.cors_allow_methods" : "GET, PUT, POST, DELETE, PATCH, OPTIONS",
"network.ingress.cors_allow_headers" : "DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization",
"network.ingress.proxy_buffer_size_kb" : 4,
"network.ingress.keepalive_time_seconds" : 3600,
"network.ingress.keepalive_timeout_seconds" : 60,
"network.ingress.send_timeout_seconds" : 60,
"network.ingress.proxy_connect_timeout_seconds" : 60,
"network.ingress.proxy_send_timeout_seconds" : 60,
"network.ingress.proxy_read_timeout_seconds" : 60,
"network.ingress.grpc_send_timeout_seconds" : 60,
"network.ingress.grpc_read_timeout_seconds" : 60,
"network.ingress.enable_sticky_session" : false,
"network.ingress.whitelist_source_range" : "0.0.0.0/0",
"network.ingress.denylist_source_range" : "",
"network.ingress.basic_auth_env_var" : "",
"hpa.cpu.average_utilization_percent" : 60,
"security.service_account_name" : ""
}
)
}
resource "qovery_job" "job_z956377f7" {
environment_id = qovery_environment.environment_z0fc4f959.id
name = "init-db"
cpu = 200
memory = 128
max_nb_restart = 0
max_duration_seconds = 300
auto_preview = false
source = {
docker = {
git_repository = {
url = "https://github.com/Qovery/windmill.git"
branch = "main"
root_path = "/init/"
}
dockerfile_path = "Dockerfile"
}
}
schedule {
on_start = {
arguments = ["it"]
entrypoint = "null"
}
}
deployment_stage_id = qovery_deployment_stage.deployment_stage_zf6f678ba.id
healthchecks = {
readiness_probe = {
type = {
}
initial_delay_seconds = 30
period_seconds = 10
timeout_seconds = 5
failure_threshold = 9
success_threshold = 1
}
liveness_probe = {
type = {
}
initial_delay_seconds = 30
period_seconds = 10
timeout_seconds = 5
failure_threshold = 9
success_threshold = 1
}
}
environment_variables = [
{
key = "RESTORE_METHOD"
value = "psql"
}
]
advanced_settings_json = jsonencode(
{
"build.timeout_max_sec" : 1800,
"build.cpu_max_in_milli" : 4000,
"build.ram_max_in_gib" : 8,
"deployment.termination_grace_period_seconds" : 60,
"job.delete_ttl_seconds_after_finished" : null,
"cronjob.concurrency_policy" : "Forbid",
"cronjob.failed_jobs_history_limit" : 1,
"cronjob.success_jobs_history_limit" : 1,
"security.service_account_name" : ""
}
)
}
resource "qovery_deployment_stage" "deployment_stage_ze428a4f3" {
environment_id = qovery_environment.environment_z0fc4f959.id
name = "db stage"
}
resource "qovery_deployment_stage" "deployment_stage_zf6f678ba" {
environment_id = qovery_environment.environment_z0fc4f959.id
name = "init db stage"
is_after = qovery_deployment_stage.deployment_stage_ze428a4f3.id
}
resource "qovery_deployment_stage" "deployment_stage_z3ecd4f41" {
environment_id = qovery_environment.environment_z0fc4f959.id
name = "windmill apps"
is_after = qovery_deployment_stage.deployment_stage_zf6f678ba.id
}
variable "qovery_access_token" {
type = string
}
variable "access_key_id" {
type = string
}
variable "secret_access_key" {
type = string
}
variable "QOVERY_POSTGRESQL_Z7FFDB63C_PASSWORD" {
type = string
}
variable "QOVERY_POSTGRESQL_Z7FFDB63C_DATABASE_URL" {
type = string
}
variable "QOVERY_POSTGRESQL_Z7FFDB63C_DATABASE_URL_INTERNAL" {
type = string
}
variable "DATABASE_URL" {
type = string
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment