Categorygithub.com/ravendb/terraform-provider-ravendb
modulepackage
1.0.2
Repository: https://github.com/ravendb/terraform-provider-ravendb.git
Documentation: pkg.go.dev

# README

Terraform provider for RavenDB

Supported Platforms

  • Linux
  • Windows

Where to Ask for Help

If you have any questions, or need further assistance, you can contact us directly.

Requirements

NameVersion
terraform> = 1.0.3

Providers

NameVersion
ravendb1.0.2

Sample usage

Providers

terraform {
  required_providers {
    ravendb = {
      source  = "ravendb/ravendb"
      version = ">=1.0.0"
    }
  }
}
    
provider "aws" {
  region = "us-east-1"
}

Local variables for RavenDB server resource

Example getting RavenDB server parameters from EC2 instances Terraform resources

locals {
  
  # Node tags
  nodes = toset(["a", "b", "c"])
  
  # Ec2 hosts
  hosts = flatten([
    for instance in module.ec2_instances : [
      instance.public_ip
    ]
  ])
  
  # This sample represents the nodes that will be used for unsecured setup.
  ravendb_nodes_urls = flatten([
    for instance in module.ec2_instances: [
       "http://${instance.public_ip}:8080"
    ]
  ])
  
  # This samples represents the nodes that will be used for secure setup.
  ravendb_nodes_urls = [for tag in local.nodes : "https://${tag}.omermichleviz.development.run"]
  
  # This smaples shows the usage of map reduce parameters to a given index.
  maps = [
<<EOT
 map('employees',  function(e) {
  return {
    Country: e.Address.Country,
    Count: 1
  }
}) 
EOT
,
<<EOT
map('employees', function(e) {
  return {
      Country: e.Address.Country,
      Count: 1
  }
})
EOT
  ]

  reduce = <<EOT
groupBy(x => x.Country).aggregate(g => {
  return {
    Country: g.key,
    Count: g.values.reduce((count, val) => val.Count + count, 0)
  }
 })
EOT
  
}

RavenDB server Terraform resource parameters

locals {
  
  # IP addresses for hosts to deploy RavenDB to
  hosts = [
         "3.95.238.149", 
         "3.87.248.150", 
         "3.95.220.189" 
         ]
  
  # This sample represents the nodes that will be used for unsecured setup.
  ravendb_nodes_urls = [
         "http://3.95.238.149:8080", 
         "http://3.87.248.150:8080", 
         "http://3.95.220.189:8080"
         ]
  
  # This samples represents the nodes that will be used for secure setup.
  ravendb_nodes_urls = [
         "https://a.domain.development.run", 
         "https://b.domain.development.run", 
         "https://c.domain.development.run" 
         ]
}

RavenDB server resource

resource "ravendb_server" "server" {
  hosts              = local.hosts
  database           = "firewire"
  unsecured          = true
  cluster_setup_zip  = "/path/to/cluster/setup.zip"
  package {
    version = "5.4.111"
  }
  url {
    list      = local.ravendb_nodes_urls
    http_port = 8080
    tcp_port  = 38880
  }
  license = filebase64("/path/to/license.json")
  settings_override = {
   "Indexing.MapBatchSize" = 16384
  }
  assets = {
   "/path/to/file/file_name.extension" = filebase64("/path/to/file_name.extension")
  }
  ssh {
    user = "ubuntu"
    pem  = filebase64("/path/to/server.pem")
  }
  
  databases_to_delete {
    database {
      name        = "database_name"
      hard_delete = false
    }
  }

  indexes_to_delete {
    index {
      database_name = "database_name"
      indexes_names = [
        "index_name",
        "index_name",
      ]
    }
  }
  
  databases {
    database {
      name              = "database_name"
      replication_nodes =  local.nodes 
      encryption_key    = "base64_encryption_key"
      settings = {
        "Subscriptions.MaxNumberOfConcurrentConnections" = 2000
    }

    indexes {
       index {
          index_name = "index_name"
          maps       = local.map
          reduce     = local.reduce
          configuration = {
            "Indexing.MapBatchSize" = 128
          }
        }
      }
    }
  }
} 

Output

output "public_instance_ips" {
    value = local.list
}
output "database_name" {
    value = ravendb_server.server.database
}

Inputs

NameDescriptionTypeRequired
hostsThe ip addresses of the nodes that terraform will use to setup the RavenDB cluster.listyes
database - optionalThe database name to check whether he is alive or not. It will create the given database if it doesn't existsstringno
cluster_setup_zip - optionalThe cluster setup zip file that is used by RavenDB for setup secured cluster.stringno
licenseThe license file that will be used for the setup of the RavenDB cluster.filebase64yes
package
  • version
  • arch - optional
  • UbuntuVersion - optional
Object that represents the version and the OS RavenDB will be running on. Supported architectures are: amd64, arm64 and arm32. Supported Ubuntu versions are: 18.04, 20.04, 22.04set
  • string
  • string
  • string
yes
unsecuredWhatever to allow to run RavenDB in unsecured mode. This is NOT recommended!boolno
settings_overrideOverriding the settings.json.map[string][string]no
assetsUpload files to an absolute path.map[string][string]no
url
  • list
  • http_url - optional
  • tcp_url - optional
Object that represents the nodes.set
  • List(string)
  • int
  • int
yes
databases - optional
  • database
      • name
      • replication_nodes
      • encryption_key
      • settings
      • indexes
        • index
          • index_name
          • maps
          • reduce
          • configuration
Object that represents creation of databases and indexes.set
  • set
    • string
    • list(string)
    • string
    • map(string)
      • set
        • set
          • string
          • list(string)
          • string
          • map(string)
no
databases_to_delete - optional
  • database
      • name
      • hard_delete
Databases that will be hard/soft deleted.set
  • set
    • string
    • bool
no
indexes_to_delete - optional
  • index
      • name
      • indexes_names
Indexes that will be deleted on a given database.set
  • set
    • string
    • list(string)
no

Debug mode

In order to be able to see debug log you need to define environment variables.

For powershell

$env:TF_LOG="DEBUG"
$env:TF_LOG_PATH='d:/debug_log.txt'

For bash

export TF_LOG=DEBUG
export TF_LOG_PATH=d:/debug_log.txt

Environment variables information

https://www.terraform.io/docs/cli/config/environment-variables.html

Environment variables for running acceptances tests

powershell

$env:TF_ACC=1
export TF_ACC=1

# Packages

No description provided by the author
No description provided by the author