badalsahani's picture
feat: chroma initial deploy
287a0bc
terraform {
required_providers {
digitalocean = {
source = "digitalocean/digitalocean"
version = "~> 2.0"
}
}
}
# Define provider
variable "do_token" {}
# Configure the DigitalOcean Provider
provider "digitalocean" {
token = var.do_token
}
resource "digitalocean_firewall" "chroma_firewall" {
name = "chroma-firewall"
droplet_ids = [digitalocean_droplet.chroma_instance.id]
inbound_rule {
protocol = "tcp"
port_range = "22"
source_addresses = var.mgmt_source_ranges
}
dynamic "inbound_rule" {
for_each = var.public_access ? [1] : []
content {
protocol = "tcp"
port_range = var.chroma_port
source_addresses = var.source_ranges
}
}
outbound_rule {
protocol = "tcp"
port_range = "1-65535"
destination_addresses = ["0.0.0.0/0", "::/0"]
}
outbound_rule {
protocol = "icmp"
port_range = "1-65535"
destination_addresses = ["0.0.0.0/0", "::/0"]
}
outbound_rule {
protocol = "udp"
port_range = "1-65535"
destination_addresses = ["0.0.0.0/0", "::/0"]
}
tags = local.tags
}
resource "digitalocean_ssh_key" "chroma_keypair" {
name = "chroma_keypair"
public_key = file(var.ssh_public_key)
}
#Create Droplet
resource "digitalocean_droplet" "chroma_instance" {
image = var.instance_image
name = "chroma"
region = var.region
size = var.instance_type
ssh_keys = [digitalocean_ssh_key.chroma_keypair.fingerprint]
user_data = data.template_file.user_data.rendered
tags = local.tags
}
resource "digitalocean_volume" "chroma_volume" {
region = digitalocean_droplet.chroma_instance.region
name = "chroma-volume"
size = var.chroma_data_volume_size
description = "Chroma data volume"
tags = local.tags
}
resource "digitalocean_volume_attachment" "chroma_data_volume_attachment" {
droplet_id = digitalocean_droplet.chroma_instance.id
volume_id = digitalocean_volume.chroma_volume.id
provisioner "remote-exec" {
inline = [
"export VOLUME_ID=${digitalocean_volume.chroma_volume.name} && sudo mkfs -t ext4 /dev/$(lsblk -o +SERIAL | grep $VOLUME_ID | awk '{print $1}')",
"sudo mkdir /chroma-data",
"export VOLUME_ID=${digitalocean_volume.chroma_volume.name} && sudo mount /dev/$(lsblk -o +SERIAL | grep $VOLUME_ID | awk '{print $1}') /chroma-data",
"cat <<EOF | sudo tee /etc/fstab >> /dev/null",
"/dev/disk/by-id/scsi-0DO_Volume_${digitalocean_volume.chroma_volume.name} /chroma-data ext4 defaults,nofail,discard 0 0",
"EOF",
]
connection {
host = digitalocean_droplet.chroma_instance.ipv4_address
type = "ssh"
user = "root"
private_key = file(var.ssh_private_key)
}
}
}
output "instance_public_ip" {
value = digitalocean_droplet.chroma_instance.ipv4_address
description = "The public IP address of the Chroma instance"
}
output "instance_private_ip" {
value = digitalocean_droplet.chroma_instance.ipv4_address_private
description = "The private IP address of the Chroma instance"
}
output "chroma_auth_token" {
description = "The Chroma static auth token"
value = random_password.chroma_token.result
sensitive = true
}
output "chroma_auth_basic" {
description = "The Chroma basic auth credentials"
value = "${local.basic_auth_credentials.username}:${local.basic_auth_credentials.password}"
sensitive = true
}