sources/cassandra/main.tf (86 lines of code) (raw):

resource "google_compute_firewall" "allow_ports" { name = "allow-zdm-ports" network = var.common_params.network allow { protocol = "tcp" ports = ["14002", "9042"] } source_ranges = ["0.0.0.0/0"] target_tags = ["zdm"] } resource "google_compute_instance" "cos_instances" { count = var.common_params.instance_count name = "${var.common_params.instance_name_prefix}-${count.index}" machine_type = var.common_params.machine_type zone = var.common_params.zone boot_disk { initialize_params { image = "projects/cos-cloud/global/images/cos-105-17412-535-55" size = 32 type = "pd-balanced" } } network_interface { network = var.common_params.network access_config {} } tags = ["zdm"] metadata = { enable-oslogin = "TRUE" } } resource "local_file" "zdm_config" { count = var.common_params.instance_count filename = "zdm-config-${count.index}.yaml" content = yamlencode({ origin_contact_points = var.zdm_config.origin_contact_points origin_port = var.zdm_config.origin_port origin_username = var.zdm_config.origin_username origin_password = var.zdm_config.origin_password target_contact_points = var.zdm_config.target_contact_points target_port = var.zdm_config.target_port target_username = var.zdm_config.target_username target_password = var.zdm_config.target_password proxy_listen_address = var.zdm_config.proxy_listen_address proxy_listen_port = var.zdm_config.proxy_listen_port proxy_request_timeout_ms = var.zdm_config.proxy_request_timeout_ms proxy_max_client_connections = var.zdm_config.proxy_max_client_connections proxy_max_stream_ids = var.zdm_config.proxy_max_stream_ids log_level = var.zdm_config.log_level proxy_topology_addresses = join(",", google_compute_instance.cos_instances[*].network_interface[0].network_ip) proxy_topology_index = count.index }) depends_on = [google_compute_instance.cos_instances] } resource "null_resource" "setup_instances" { count = var.common_params.instance_count provisioner "local-exec" { command = <<-EOT for i in {1..3}; do if gcloud compute scp Dockerfile entrypoint.sh zdm-config-${count.index}.yaml ${google_compute_instance.cos_instances[count.index].name}:~/ --project="${var.common_params.spanner_project_id}" --zone "${var.common_params.zone}"; then break fi sleep 10 done for i in {1..3}; do if gcloud compute scp ${var.common_params.service_account_key} ${google_compute_instance.cos_instances[count.index].name}:~/keys.json --project="${var.common_params.spanner_project_id}" --zone "${var.common_params.zone}"; then break fi sleep 10 done for i in {1..3}; do if gcloud compute ssh ${google_compute_instance.cos_instances[count.index].name} --project="${var.common_params.spanner_project_id}" --zone "${var.common_params.zone}" --command="sudo docker build -t docker-test:latest ."; then break fi sleep 10 done for i in {1..3}; do if gcloud compute ssh ${google_compute_instance.cos_instances[count.index].name} --project="${var.common_params.spanner_project_id}" --zone "${var.common_params.zone}" --command="sudo docker run --restart always -d -p 14002:14002 -v ~/zdm-config-${count.index}.yaml:/zdm-config.yaml -v ~/keys.json:/var/keys.json -e SPANNER_PROJECT=${var.common_params.spanner_project_id} -e SPANNER_INSTANCE=${var.common_params.spanner_instance_id} -e SPANNER_DATABASE=${var.common_params.spanner_database_id} -e ZDM_CONFIG=/zdm-config.yaml -e GOOGLE_APPLICATION_CREDENTIALS='/var/keys.json' docker-test:latest"; then break fi sleep 10 done EOT } depends_on = [google_compute_instance.cos_instances, local_file.zdm_config] }