diff --git a/examples/aws/scalardl/example.tfvars b/examples/aws/scalardl/example.tfvars index a2ffb3bbf..217a39c9d 100644 --- a/examples/aws/scalardl/example.tfvars +++ b/examples/aws/scalardl/example.tfvars @@ -14,6 +14,9 @@ scalardl = { # green_image_name = "scalarlabs/scalar-ledger" # green_discoverable_by_envoy = "false" # enable_tdagent = "true" + # database = "cassandra" + # database_contact_points = "cassandra-lb.internal.scalar-labs.com" + # database_contact_port = 9042 # database_username = "cassandra" # database_password = "cassandra" # cassandra_replication_factor = "3" diff --git a/examples/aws/scalardl/locals.tf b/examples/aws/scalardl/locals.tf index d7b699a65..ded1f5a16 100644 --- a/examples/aws/scalardl/locals.tf +++ b/examples/aws/scalardl/locals.tf @@ -23,8 +23,8 @@ locals { } cassandra = { - start_on_initial_boot = data.terraform_remote_state.cassandra.outputs.cassandra_start_on_initial_boot - provision_ids = join(",", data.terraform_remote_state.cassandra.outputs.cassandra_provision_ids) + start_on_initial_boot = var.scalardl.database == "cassandra" ? data.terraform_remote_state.cassandra.outputs.cassandra_start_on_initial_boot : false + provision_ids = var.scalardl.database == "cassandra" ? join(",", data.terraform_remote_state.cassandra.outputs.cassandra_provision_ids) : "" } custom_tags = data.terraform_remote_state.network.outputs.custom_tags diff --git a/examples/azure/scalardl/example.tfvars b/examples/azure/scalardl/example.tfvars index 61036ab30..95627037a 100644 --- a/examples/azure/scalardl/example.tfvars +++ b/examples/azure/scalardl/example.tfvars @@ -14,6 +14,9 @@ scalardl = { # green_discoverable_by_envoy = "false" # green_enable_accelerated_networking = "false" # enable_tdagent = "true" + # database = "cassandra" + # database_contact_points = "cassandra-lb.internal.scalar-labs.com" + # database_contact_port = 9042 # database_username = "cassandra" # database_password = "cassandra" # cassandra_replication_factor = "3" diff --git a/modules/aws/scalardl/cluster/README.md b/modules/aws/scalardl/cluster/README.md index c6cba3859..e9fd9f08f 100644 --- a/modules/aws/scalardl/cluster/README.md +++ b/modules/aws/scalardl/cluster/README.md @@ -14,8 +14,11 @@ The Cluster module deploys a Scalar DL cluster. | bastion_ip | The IP to bastion host used for provisioning | `any` | n/a | yes | | cassandra_replication_factor | The replication factor for the Cassandra schema | `number` | `3` | no | | custom_tags | The map of custom tags | `map(string)` | `{}` | no | -| database_password | The database password | `any` | n/a | yes | -| database_username | The database username | `any` | n/a | yes | +| database | The database. cassandra and dynamo are supported. | `any` | n/a | yes | +| database_contact_points | The database contact points. Specify the region name if the database is dynamo. | `any` | n/a | yes | +| database_contact_port | The database contact port. Ignored if the database is dynamo. | `any` | n/a | yes | +| database_password | The database password. Specify AWS_SECRET_ACCESS_KEY if the database is dynamo. | `any` | n/a | yes | +| database_username | The database username. Specify AWS_ACCESS_KEY_ID if the database is dynamo. | `any` | n/a | yes | | enable_tdagent | A flag to install td-agent that forwards logs to the monitor host | `bool` | `true` | no | | image_id | The image id to initiate | `any` | n/a | yes | | internal_domain | Internal domain | `any` | n/a | yes | diff --git a/modules/aws/scalardl/cluster/main.tf b/modules/aws/scalardl/cluster/main.tf index 2c7a1a7b6..f5ec89dfd 100644 --- a/modules/aws/scalardl/cluster/main.tf +++ b/modules/aws/scalardl/cluster/main.tf @@ -56,7 +56,9 @@ module "scalardl_provision" { scalardl_image_name = var.scalardl_image_name scalardl_image_tag = var.scalardl_image_tag internal_domain = var.internal_domain - database_contact_points = "cassandra-lb.${var.internal_domain}" # TODO: add to variables + database = var.database + database_contact_points = var.database_contact_points + database_contact_port = var.database_contact_port database_username = var.database_username database_password = var.database_password cassandra_replication_factor = var.cassandra_replication_factor diff --git a/modules/aws/scalardl/cluster/vars.tf b/modules/aws/scalardl/cluster/vars.tf index b619b4b93..9ae185a6f 100644 --- a/modules/aws/scalardl/cluster/vars.tf +++ b/modules/aws/scalardl/cluster/vars.tf @@ -73,12 +73,24 @@ variable "internal_domain" { description = "Internal domain" } +variable "database" { + description = "The database. cassandra and dynamo are supported." +} + +variable "database_contact_points" { + description = "The database contact points. Specify the region name if the database is dynamo." +} + +variable "database_contact_port" { + description = "The database contact port. Ignored if the database is dynamo." +} + variable "database_username" { - description = "The database username" + description = "The database username. Specify AWS_ACCESS_KEY_ID if the database is dynamo." } variable "database_password" { - description = "The database password" + description = "The database password. Specify AWS_SECRET_ACCESS_KEY if the database is dynamo." } variable "cassandra_replication_factor" { diff --git a/modules/aws/scalardl/locals.tf b/modules/aws/scalardl/locals.tf index 966f72d38..e8d26ee86 100644 --- a/modules/aws/scalardl/locals.tf +++ b/modules/aws/scalardl/locals.tf @@ -16,7 +16,7 @@ locals { green_subnet_ids = split(",", var.network.green_subnet_ids) internal_domain = var.network.internal_domain - triggers = [var.cassandra.start_on_initial_boot ? var.cassandra.provision_ids : var.network.bastion_provision_id] + triggers = [var.scalardl.database == "cassandra" && var.cassandra.start_on_initial_boot ? var.cassandra.provision_ids : var.network.bastion_provision_id] } ### default @@ -37,6 +37,9 @@ locals { listen_port = 50051 privileged_listen_port = 50052 enable_tdagent = true + database = "cassandra" + database_contact_points = "cassandra-lb.${local.internal_domain}" + database_contact_port = 9042 database_username = "cassandra" database_password = "cassandra" cassandra_replication_factor = 3 diff --git a/modules/aws/scalardl/scalardl.tf b/modules/aws/scalardl/scalardl.tf index 1c1e204d0..64bf67b47 100644 --- a/modules/aws/scalardl/scalardl.tf +++ b/modules/aws/scalardl/scalardl.tf @@ -19,6 +19,9 @@ module "scalardl_blue" { scalardl_image_tag = local.scalardl.blue_image_tag enable_tdagent = local.scalardl.enable_tdagent internal_domain = local.internal_domain + database = local.scalardl.database + database_contact_points = local.scalardl.database_contact_points + database_contact_port = local.scalardl.database_contact_port database_username = local.scalardl.database_username database_password = local.scalardl.database_password cassandra_replication_factor = local.scalardl.cassandra_replication_factor @@ -46,6 +49,9 @@ module "scalardl_green" { scalardl_image_tag = local.scalardl.green_image_tag enable_tdagent = local.scalardl.enable_tdagent internal_domain = local.internal_domain + database = local.scalardl.database + database_contact_points = local.scalardl.database_contact_points + database_contact_port = local.scalardl.database_contact_port database_username = local.scalardl.database_username database_password = local.scalardl.database_password cassandra_replication_factor = local.scalardl.cassandra_replication_factor diff --git a/modules/azure/scalardl/cluster/README.md b/modules/azure/scalardl/cluster/README.md index 6f51f8476..a242f5b20 100644 --- a/modules/azure/scalardl/cluster/README.md +++ b/modules/azure/scalardl/cluster/README.md @@ -15,6 +15,9 @@ The Cluster module deploys a Scalar DL cluster on Azure. | availability_set_id | n/a | `string` | `""` | no | | bastion_ip | The IP to bastion host used for provisioning | `any` | n/a | yes | | cassandra_replication_factor | The replication factor for the Cassandra schema | `number` | `3` | no | +| database | The database | `any` | n/a | yes | +| database_contact_points | The database contact points | `any` | n/a | yes | +| database_contact_port | The database contact port | `any` | n/a | yes | | database_password | The database password | `any` | n/a | yes | | database_username | The database username | `any` | n/a | yes | | enable_accelerated_networking | A flag to enable accelerated networking on network interface | `bool` | `false` | no | diff --git a/modules/azure/scalardl/cluster/main.tf b/modules/azure/scalardl/cluster/main.tf index cf40efa8d..01b6ef423 100644 --- a/modules/azure/scalardl/cluster/main.tf +++ b/modules/azure/scalardl/cluster/main.tf @@ -33,7 +33,9 @@ module "scalardl_provision" { scalardl_image_name = var.scalardl_image_name scalardl_image_tag = var.scalardl_image_tag internal_domain = var.internal_domain - database_contact_points = "cassandra-lb.${var.internal_domain}" # TODO: add to variables + database = var.database + database_contact_points = var.database_contact_points + database_contact_port = var.database_contact_port database_username = var.database_username database_password = var.database_password cassandra_replication_factor = var.cassandra_replication_factor diff --git a/modules/azure/scalardl/cluster/vars.tf b/modules/azure/scalardl/cluster/vars.tf index bc7da1aef..15e683d04 100644 --- a/modules/azure/scalardl/cluster/vars.tf +++ b/modules/azure/scalardl/cluster/vars.tf @@ -81,6 +81,18 @@ variable "internal_domain" { description = "Internal domain" } +variable "database" { + description = "The database" +} + +variable "database_contact_points" { + description = "The database contact points" +} + +variable "database_contact_port" { + description = "The database contact port" +} + variable "database_username" { description = "The database username" } diff --git a/modules/azure/scalardl/locals.tf b/modules/azure/scalardl/locals.tf index 774dfa5e7..c30a87351 100644 --- a/modules/azure/scalardl/locals.tf +++ b/modules/azure/scalardl/locals.tf @@ -34,6 +34,9 @@ locals { green_discoverable_by_envoy = false green_enable_accelerated_networking = false enable_tdagent = true + database = "cassandra" + database_contact_points = "cassandra-lb.${local.internal_domain}" + database_contact_port = 9042 database_username = "cassandra" database_password = "cassandra" cassandra_replication_factor = 3 diff --git a/modules/azure/scalardl/scalardl.tf b/modules/azure/scalardl/scalardl.tf index b4fef5552..000e400d0 100644 --- a/modules/azure/scalardl/scalardl.tf +++ b/modules/azure/scalardl/scalardl.tf @@ -28,6 +28,9 @@ module "scalardl_blue" { enable_tdagent = local.scalardl.enable_tdagent availability_set_id = azurerm_availability_set.scalar_availability_set.id internal_domain = local.internal_domain + database = local.scalardl.database + database_contact_points = local.scalardl.database_contact_points + database_contact_port = local.scalardl.database_contact_port database_username = local.scalardl.database_username database_password = local.scalardl.database_password cassandra_replication_factor = local.scalardl.cassandra_replication_factor @@ -58,6 +61,9 @@ module "scalardl_green" { enable_tdagent = local.scalardl.enable_tdagent availability_set_id = azurerm_availability_set.scalar_availability_set.id internal_domain = local.internal_domain + database = local.scalardl.database + database_contact_points = local.scalardl.database_contact_points + database_contact_port = local.scalardl.database_contact_port database_username = local.scalardl.database_username database_password = local.scalardl.database_password cassandra_replication_factor = local.scalardl.cassandra_replication_factor diff --git a/modules/universal/scalardl/main.tf b/modules/universal/scalardl/main.tf index c79c1afc2..d22f7d070 100644 --- a/modules/universal/scalardl/main.tf +++ b/modules/universal/scalardl/main.tf @@ -189,7 +189,13 @@ resource "null_resource" "scalardl_schema" { provisioner "remote-exec" { inline = [ - "docker run --rm ${var.schema_loader_image} --cassandra -h ${var.database_contact_points} -u ${var.database_username} -p ${var.database_password} -n NetworkTopologyStrategy -R ${var.cassandra_replication_factor}" + format( + "%s %s", + "docker run --rm ${var.schema_loader_image} -h ${var.database_contact_points} -u ${var.database_username} -p ${var.database_password}", + var.database == "cassandra" ? "--cassandra -P ${var.database_contact_port} -n NetworkTopologyStrategy -R ${var.cassandra_replication_factor}" : + var.database == "dynamo" ? "--dynamo --region ${var.database_contact_points}" : + "" + ) ] } } @@ -198,7 +204,13 @@ resource "null_resource" "scalardl_container" { count = var.provision_count triggers = { - triggers = "${null_resource.scalardl_load[count.index].id}${null_resource.scalardl_schema[0].id}" + scalardl_load = null_resource.scalardl_load[count.index].id + scalardl_schema = null_resource.scalardl_schema[0].id + database = var.database + database_contact_points = var.database_contact_points + database_contact_port = var.database_contact_port + database_username = var.database_username + database_password = var.database_password } connection { @@ -213,7 +225,9 @@ resource "null_resource" "scalardl_container" { inline = [ "cd $HOME/provision", "echo export SCALAR_IMAGE=${local.scalar_image} > env", + "echo export SCALAR_DB_STORAGE=${var.database} >> env", "echo export SCALAR_DB_CONTACT_POINTS=${var.database_contact_points} >> env", + "echo export SCALAR_DB_CONTACT_PORT=${var.database_contact_port} >> env", "echo export SCALAR_DB_USERNAME=${var.database_username} >> env", "echo export SCALAR_DB_PASSWORD=${var.database_password} >> env", "source ./env", diff --git a/modules/universal/scalardl/provision/docker-compose.yml b/modules/universal/scalardl/provision/docker-compose.yml index da0ce68d9..7295deb1b 100644 --- a/modules/universal/scalardl/provision/docker-compose.yml +++ b/modules/universal/scalardl/provision/docker-compose.yml @@ -4,7 +4,9 @@ services: scalar: image: ${SCALAR_IMAGE} environment: + - SCALAR_DB_STORAGE=${SCALAR_DB_STORAGE} - SCALAR_DB_CONTACT_POINTS=${SCALAR_DB_CONTACT_POINTS} + - SCALAR_DB_CONTACT_PORT=${SCALAR_DB_CONTACT_PORT} - SCALAR_DB_USERNAME=${SCALAR_DB_USERNAME} - SCALAR_DB_PASSWORD=${SCALAR_DB_PASSWORD} ports: diff --git a/modules/universal/scalardl/vars.tf b/modules/universal/scalardl/vars.tf index 4e091ba4d..78a9b1f0d 100644 --- a/modules/universal/scalardl/vars.tf +++ b/modules/universal/scalardl/vars.tf @@ -51,10 +51,20 @@ variable "internal_domain" { description = "Internal domain" } +variable "database" { + default = "cassandra" + description = "The database. This should be \"cassandra\" or \"dynamo\"" +} + variable "database_contact_points" { description = "The database contact points" } +variable "database_contact_port" { + default = 9042 + description = "The database contact port" +} + variable "database_username" { description = "The database username" }