Skip to content
3 changes: 3 additions & 0 deletions examples/aws/scalardl/example.tfvars
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
4 changes: 2 additions & 2 deletions examples/aws/scalardl/locals.tf
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 3 additions & 0 deletions examples/azure/scalardl/example.tfvars
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
7 changes: 5 additions & 2 deletions modules/aws/scalardl/cluster/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
Expand Down
4 changes: 3 additions & 1 deletion modules/aws/scalardl/cluster/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
16 changes: 14 additions & 2 deletions modules/aws/scalardl/cluster/vars.tf
Original file line number Diff line number Diff line change
Expand Up @@ -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" {
Expand Down
5 changes: 4 additions & 1 deletion modules/aws/scalardl/locals.tf
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
6 changes: 6 additions & 0 deletions modules/aws/scalardl/scalardl.tf
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
3 changes: 3 additions & 0 deletions modules/azure/scalardl/cluster/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 |
Expand Down
4 changes: 3 additions & 1 deletion modules/azure/scalardl/cluster/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
12 changes: 12 additions & 0 deletions modules/azure/scalardl/cluster/vars.tf
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
Expand Down
3 changes: 3 additions & 0 deletions modules/azure/scalardl/locals.tf
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 6 additions & 0 deletions modules/azure/scalardl/scalardl.tf
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
18 changes: 16 additions & 2 deletions modules/universal/scalardl/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -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}" :
Copy link
Contributor

@tei-k tei-k Nov 24, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@ymorimo

I'm not sure how it works with --region ${var.database_contact_points}. 💦

var.database_contact_points is dynamodb.${region}.amazonaws.com ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good point. When DynamoDB is used, the region name should be specified in the contact_points variable.
https://github.com/scalar-labs/scalardb/blob/master/docs/getting-started-with-dynamodb.md#configure-scalar-db
This is also added in the database_contact_points variable's description. https://github.com/scalar-labs/scalar-terraform/pull/237/files#diff-c29567323bde55c7871f3e1b1fd9242c4f268d7d82129d0eb5fce499a78319d4R18

""
)
]
}
}
Expand All @@ -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 {
Expand All @@ -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",
Expand Down
2 changes: 2 additions & 0 deletions modules/universal/scalardl/provision/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
10 changes: 10 additions & 0 deletions modules/universal/scalardl/vars.tf
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
Expand Down