2025-09-24 12:59:54 +02:00
# ------------------------- variables -------------------------
# Variables used by the configuration
variable " projectId " {
2026-02-10 17:37:57 +01:00
description = " GCP project id where the resources will be created. "
2025-09-24 12:59:54 +02:00
type = string
}
variable " region " {
description = " GCP region where resources will be created. "
type = string
2025-12-15 16:50:52 +01:00
default = " europe-west2 "
2025-09-24 12:59:54 +02:00
}
variable " zone " {
description = " GCP zone that some resources will use. "
type = string
2025-12-15 16:50:52 +01:00
default = " europe-west2-b "
2025-09-24 12:59:54 +02:00
}
variable " stackName " {
description = " Stack name for OpenVidu deployment. "
type = string
}
variable " certificateType " {
2026-07-02 17:21:42 +02:00
description = " [selfsigned] Not recommended for production use. Just for testing purposes or development environments. You don't need a FQDN to use this option. [owncert] Valid for production environments. Use your own certificate. You need a FQDN to use this option. [letsencrypt] Valid for production environments. Can be used with or without a FQDN (if no FQDN is provided, the public IP will be used). "
2025-09-24 12:59:54 +02:00
type = string
default = " letsencrypt "
validation {
condition = contains ( [ " selfsigned " , " owncert " , " letsencrypt " ] , var . certificateType )
error_message = " certificateType must be one of: selfsigned, owncert, letsencrypt "
}
}
variable " publicIpAddress " {
description = " Previously created Public IP address for the OpenVidu Deployment. Blank will generate a public IP. "
type = string
default = " "
validation {
condition = can ( regex ( " ^ $ |^([01]? \\ d{1,2}|2[0-4] \\ d|25[0-5]) \\ .([01]? \\ d{1,2}|2[0-4] \\ d|25[0-5]) \\ .([01]? \\ d{1,2}|2[0-4] \\ d|25[0-5]) \\ .([01]? \\ d{1,2}|2[0-4] \\ d|25[0-5]) $ " , var . publicIpAddress ) )
error_message = " The Public Elastic IP does not have a valid IPv4 format "
}
}
variable " domainName " {
description = " Domain name for the OpenVidu Deployment. "
type = string
default = " "
validation {
condition = can ( regex ( " ^ $ |^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])? \\ .)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9] $ " , var . domainName ) )
error_message = " The domain name does not have a valid domain name format "
}
}
variable " ownPublicCertificate " {
2025-12-23 22:11:16 +01:00
description = " If certificate type is 'owncert', this parameter will be used to specify the public certificate in base64 format "
2025-09-24 12:59:54 +02:00
type = string
default = " "
}
variable " ownPrivateCertificate " {
2025-12-23 22:11:16 +01:00
description = " If certificate type is 'owncert', this parameter will be used to specify the private certificate in base64 format "
2025-09-24 12:59:54 +02:00
type = string
default = " "
}
variable " initialMeetAdminPassword " {
description = " Initial password for the 'admin' user in OpenVidu Meet. If not provided, a random password will be generated. "
type = string
default = " "
validation {
condition = can ( regex ( " ^[A-Za-z0-9_-]* $ " , var . initialMeetAdminPassword ) )
error_message = " Must contain only alphanumeric characters (A-Z, a-z, 0-9). Leave empty to generate a random password. "
}
}
variable " initialMeetApiKey " {
description = " Initial API key for OpenVidu Meet. If not provided, no API key will be set and the user can set it later from Meet Console. "
type = string
default = " "
validation {
condition = can ( regex ( " ^[A-Za-z0-9_-]* $ " , var . initialMeetApiKey ) )
error_message = " Must contain only alphanumeric characters (A-Z, a-z, 0-9). Leave empty to not set an initial API key. "
}
}
variable " instanceType " {
description = " Specifies the GCE machine type for your OpenVidu instance "
type = string
2026-02-10 17:36:47 +01:00
default = " e2-standard-4 "
2025-09-24 12:59:54 +02:00
}
variable " bucketName " {
description = " Name of the S3 bucket to store data and recordings. If empty, a bucket will be created "
type = string
default = " "
}
2025-08-27 17:38:50 +02:00
variable " openviduLicense " {
description = " Visit https://openvidu.io/account "
type = string
sensitive = true
}
openvidu-deployment: the same defaults and parameter names on every cloud
The templates of the five clouds had drifted apart. On AWS, Azure and Google
Cloud:
- 200 GB disk for the single node and the Master Nodes, the default where
the template sets its size: Azure and Google Cloud raise it from 100 GB,
as do the AWS High Availability Master Nodes. On Google Cloud an existing
single node or Elastic Master Node keeps its disk when the template is
applied again.
- Google Cloud boots the latest Ubuntu 24.04 (the ubuntu-2404-lts image
family) instead of an image pinned in December 2024; an existing single
node or Master Node is not recreated when a newer image is published.
- Same parameter names on every Terraform and Bicep template, with the old
names deprecated but still honored (they win when set): rtcEngine on the
Google Cloud single node, whose documented name was not applied, and
masterNodeInstanceType on Google Cloud High Availability.
- Azure no longer opens port 9000 (MinIO) on the single node and Elastic:
MinIO does not run there, and the other clouds closed it in 3.9.0.
- The Media Nodes install with the same arguments on every cloud: Azure
passes --master-node-private-ip and no longer --enabled-modules, and the
user-data names the variable MASTER_NODE_PRIVATE_IP everywhere.
The CHANGELOG also lists the DigitalOcean and Oracle Cloud changes made in
their repositories (v2compatibility by default, masterNodeInstanceType,
the Oracle single node size and disk, rtcEngine).
2026-10-27 19:11:15 +01:00
variable " rtcEngine " {
2025-08-27 17:38:50 +02:00
description = " RTCEngine media engine to use. Allowed values are 'pion' and 'mediasoup'. "
type = string
2026-09-29 14:56:16 +02:00
default = " mediasoup "
2025-08-27 17:38:50 +02:00
validation {
openvidu-deployment: the same defaults and parameter names on every cloud
The templates of the five clouds had drifted apart. On AWS, Azure and Google
Cloud:
- 200 GB disk for the single node and the Master Nodes, the default where
the template sets its size: Azure and Google Cloud raise it from 100 GB,
as do the AWS High Availability Master Nodes. On Google Cloud an existing
single node or Elastic Master Node keeps its disk when the template is
applied again.
- Google Cloud boots the latest Ubuntu 24.04 (the ubuntu-2404-lts image
family) instead of an image pinned in December 2024; an existing single
node or Master Node is not recreated when a newer image is published.
- Same parameter names on every Terraform and Bicep template, with the old
names deprecated but still honored (they win when set): rtcEngine on the
Google Cloud single node, whose documented name was not applied, and
masterNodeInstanceType on Google Cloud High Availability.
- Azure no longer opens port 9000 (MinIO) on the single node and Elastic:
MinIO does not run there, and the other clouds closed it in 3.9.0.
- The Media Nodes install with the same arguments on every cloud: Azure
passes --master-node-private-ip and no longer --enabled-modules, and the
user-data names the variable MASTER_NODE_PRIVATE_IP everywhere.
The CHANGELOG also lists the DigitalOcean and Oracle Cloud changes made in
their repositories (v2compatibility by default, masterNodeInstanceType,
the Oracle single node size and disk, rtcEngine).
2026-10-27 19:11:15 +01:00
condition = contains ( [ " pion " , " mediasoup " ] , var . rtcEngine )
error_message = " rtcEngine must be one of: pion, mediasoup "
}
}
variable " RTCEngine " {
description = " Deprecated: use rtcEngine, the name every other Terraform template uses. Still honored: a non-empty value takes precedence over rtcEngine. It will be removed in a future release. "
type = string
default = " "
validation {
condition = contains ( [ " " , " pion " , " mediasoup " ] , var . RTCEngine )
error_message = " RTCEngine must be empty or one of: pion, mediasoup "
2025-08-27 17:38:50 +02:00
}
}
2025-09-24 12:59:54 +02:00
variable " additionalInstallFlags " {
description = " Additional optional flags to pass to the OpenVidu installer (comma-separated, e.g.,'--flag1=value, --flag2'). "
type = string
default = " "
validation {
condition = can ( regex ( " ^[A-Za-z0-9, =_. \\ -]* $ " , var . additionalInstallFlags ) )
error_message = " Must be a comma-separated list of flags (for example, --flag=value, --bool-flag). "
}
}