diff --git a/openvidu-deployment/community/singlenode/azure/cf-openvidu-singlenode.bicep b/openvidu-deployment/community/singlenode/azure/cf-openvidu-singlenode.bicep index a112fe05..f426e80c 100644 --- a/openvidu-deployment/community/singlenode/azure/cf-openvidu-singlenode.bicep +++ b/openvidu-deployment/community/singlenode/azure/cf-openvidu-singlenode.bicep @@ -16,10 +16,7 @@ and an Elastic IP, you can use this option to generate a Let's Encrypt certifica param certificateType string = 'selfsigned' @description('Previously created Public IP address for the OpenVidu Deployment. Blank will generate a public IP') -param publicIpAddress string = '' - -@description('Name of the PublicIPAddress resource in your azure if you have a resource of publicIPAddress') -param publicIpAddressResourceName string = '' +param publicIpAddressObject object @description('Domain name for the OpenVidu Deployment. Blank will generate default domain') param domainName string = '' @@ -160,32 +157,15 @@ param adminUsername string @description('SSH Key or password for the Virtual Machine.') @secure() -param adminSshKey string +param adminSshKey object /*------------------------------------------- VARIABLES AND VALIDATIONS -------------------------------------------*/ //Condition for ipValid if is filled -var isEmptyIp = publicIpAddress == '' -var ipSegments = split(publicIpAddress, '.') -var isFourSegments = length(ipSegments) == 4 -var seg1valid = isEmptyIp ? true : int(ipSegments[0]) >= 0 && int(ipSegments[0]) <= 255 -var seg2valid = isEmptyIp ? true : int(ipSegments[1]) >= 0 && int(ipSegments[1]) <= 255 -var seg3valid = isEmptyIp ? true : int(ipSegments[2]) >= 0 && int(ipSegments[2]) <= 255 -var seg4valid = isEmptyIp ? true : int(ipSegments[3]) >= 0 && int(ipSegments[3]) <= 255 -var isValidIP = !isEmptyIp && isFourSegments && seg1valid && seg2valid && seg3valid && seg4valid +var isEmptyIp = publicIpAddressObject.newOrExistingOrNone == 'none' //Condition for the domain name var isEmptyDomain = domainName == '' -var domainParts = split(domainName, '.') -var validNumberParts = length(domainParts) >= 2 -var allPartsValid = [ - for part in domainParts: length(part) >= 1 && length(part) <= 63 && !empty(part) && part == toLower(part) && !contains( - part, - '--' - ) && empty(replace(part, '[a-z0-9-]', '')) -] - -var isDomainValid = !isEmptyDomain && validNumberParts && !contains(allPartsValid, false) //Variables for deployment var networkSettings = { @@ -212,7 +192,7 @@ var openviduVMSettings = { publicKeys: [ { path: '/home/${adminUsername}/.ssh/authorized_keys' - keyData: adminSshKey + keyData: adminSshKey.sshPublicKey } ] } @@ -859,7 +839,6 @@ resource openviduServer 'Microsoft.Compute/virtualMachines@2023-09-01' = { osProfile: { computerName: openviduVMSettings.vmName adminUsername: adminUsername - adminPassword: adminSshKey linuxConfiguration: openviduVMSettings.linuxConfiguration } userData: base64(userData) @@ -898,8 +877,16 @@ resource publicIP_OV 'Microsoft.Network/publicIPAddresses@2023-11-01' = if (isEm } } -resource publicIP_OV_ifNotEmpty 'Microsoft.Network/publicIPAddresses@2023-11-01' existing = if (!isEmptyIp == true) { - name: publicIpAddressResourceName +var ipExists = publicIpAddressObject.newOrExisting == 'existing' + +resource publicIP_OV_ifExisting 'Microsoft.Network/publicIPAddresses@2023-11-01' existing = if (ipExists == true) { + name: publicIpAddressObject.name +} + +var ipNew = publicIpAddressObject.newOrExisting == 'new' + +resource publicIP_OV_ifNew 'Microsoft.Network/publicIPAddresses@2023-11-01' existing = if (ipNew == true) { + name: publicIpAddressObject.name } // Create the virtual network @@ -941,7 +928,7 @@ resource netInterface_OV 'Microsoft.Network/networkInterfaces@2023-11-01' = { id: resourceId('Microsoft.Network/virtualNetworks/subnets', vnet_OV.name, networkSettings.subnetName) } publicIPAddress: { - id: isEmptyIp ? publicIP_OV.id : publicIP_OV_ifNotEmpty.id + id: isEmptyIp ? publicIP_OV.id : ipNew ? publicIP_OV_ifNew.id : publicIP_OV_ifExisting.id } } } @@ -1135,19 +1122,3 @@ resource blobContainer 'Microsoft.Storage/storageAccounts/blobServices/container publicAccess: 'None' } } - -/*------------------------------------------- OUTPUTS -------------------------------------------*/ - -output ipValidationStatus string = isValidIP ? 'IP address is valid' : 'IP address not valid' - -output domainValidationStatus string = isDomainValid ? 'Domain is valid' : 'Domain is not valid' - -//Condition if owncert is selected -output ownCertValidationStatus string = (certificateType == 'owncert' && ownPrivateCertificate != '' && ownPublicCertificate != '') - ? 'owncert selected and valid' - : 'You need to fill \'Own Public Certificate\' and \'Own Private Certificate\'' - -//Condition if letsEncrypt is selected -output letsEncryptValidationStatus string = (certificateType == 'letsencrypt' && letsEncryptEmail != '') - ? 'letsEncrypt selected and valid' - : 'You need to fill \'Lets Encrypt Email\'' diff --git a/openvidu-deployment/community/singlenode/azure/cf-openvidu-singlenode.json b/openvidu-deployment/community/singlenode/azure/cf-openvidu-singlenode.json index f84e6b24..3a37670f 100644 --- a/openvidu-deployment/community/singlenode/azure/cf-openvidu-singlenode.json +++ b/openvidu-deployment/community/singlenode/azure/cf-openvidu-singlenode.json @@ -5,7 +5,7 @@ "_generator": { "name": "bicep", "version": "0.35.1.17967", - "templateHash": "8669651229193538403" + "templateHash": "4822526548162539466" } }, "parameters": { @@ -27,20 +27,12 @@ "description": "[selfsigned] Not recommended for production use. If you don't have a FQDN, (DomainName parameter) you can use this option to generate a self-signed certificate.\n[owncert] Valid for productions environments. If you have a FQDN, (DomainName parameter)\nand an Elastic IP, you can use this option to use your own certificate.\n[letsencrypt] Valid for production environments. If you have a FQDN, (DomainName parameter)\nand an Elastic IP, you can use this option to generate a Let's Encrypt certificate.\n" } }, - "publicIpAddress": { - "type": "string", - "defaultValue": "", + "publicIpAddressObject": { + "type": "object", "metadata": { "description": "Previously created Public IP address for the OpenVidu Deployment. Blank will generate a public IP" } }, - "publicIpAddressResourceName": { - "type": "string", - "defaultValue": "", - "metadata": { - "description": "Name of the PublicIPAddress resource in your azure if you have a resource of publicIPAddress" - } - }, "domainName": { "type": "string", "defaultValue": "", @@ -213,7 +205,7 @@ } }, "adminSshKey": { - "type": "securestring", + "type": "secureObject", "metadata": { "description": "SSH Key or password for the Virtual Machine." } @@ -229,30 +221,13 @@ "type": "string", "defaultValue": "", "metadata": { - "description": "Name of the bucket where OpenVidu will store the recordings. If not specified, a default bucket will be created." + "description": "Name of the bucket where OpenVidu will store the recordings if a new Storage account is being creating. If not specified, a default bucket will be created. If you want to use an existing storage account, fill this parameter with the name of the container where the recordings are stored." } } }, "variables": { - "copy": [ - { - "name": "allPartsValid", - "count": "[length(variables('domainParts'))]", - "input": "[and(and(and(and(and(greaterOrEquals(length(variables('domainParts')[copyIndex('allPartsValid')]), 1), lessOrEquals(length(variables('domainParts')[copyIndex('allPartsValid')]), 63)), not(empty(variables('domainParts')[copyIndex('allPartsValid')]))), equals(variables('domainParts')[copyIndex('allPartsValid')], toLower(variables('domainParts')[copyIndex('allPartsValid')]))), not(contains(variables('domainParts')[copyIndex('allPartsValid')], '--'))), empty(replace(variables('domainParts')[copyIndex('allPartsValid')], '[a-z0-9-]', '')))]" - } - ], - "isEmptyIp": "[equals(parameters('publicIpAddress'), '')]", - "ipSegments": "[split(parameters('publicIpAddress'), '.')]", - "isFourSegments": "[equals(length(variables('ipSegments')), 4)]", - "seg1valid": "[if(variables('isEmptyIp'), true(), and(greaterOrEquals(int(variables('ipSegments')[0]), 0), lessOrEquals(int(variables('ipSegments')[0]), 255)))]", - "seg2valid": "[if(variables('isEmptyIp'), true(), and(greaterOrEquals(int(variables('ipSegments')[1]), 0), lessOrEquals(int(variables('ipSegments')[1]), 255)))]", - "seg3valid": "[if(variables('isEmptyIp'), true(), and(greaterOrEquals(int(variables('ipSegments')[2]), 0), lessOrEquals(int(variables('ipSegments')[2]), 255)))]", - "seg4valid": "[if(variables('isEmptyIp'), true(), and(greaterOrEquals(int(variables('ipSegments')[3]), 0), lessOrEquals(int(variables('ipSegments')[3]), 255)))]", - "isValidIP": "[and(and(and(and(and(not(variables('isEmptyIp')), variables('isFourSegments')), variables('seg1valid')), variables('seg2valid')), variables('seg3valid')), variables('seg4valid'))]", + "isEmptyIp": "[equals(parameters('publicIpAddressObject').newOrExistingOrNone, 'none')]", "isEmptyDomain": "[equals(parameters('domainName'), '')]", - "domainParts": "[split(parameters('domainName'), '.')]", - "validNumberParts": "[greaterOrEquals(length(variables('domainParts')), 2)]", - "isDomainValid": "[and(and(not(variables('isEmptyDomain')), variables('validNumberParts')), not(contains(variables('allPartsValid'), false())))]", "networkSettings": { "privateIPaddressNetInterface": "10.0.0.5", "vNetAddressPrefix": "10.0.0.0/16", @@ -276,7 +251,7 @@ "publicKeys": [ { "path": "[format('/home/{0}/.ssh/authorized_keys', parameters('adminUsername'))]", - "keyData": "[parameters('adminSshKey')]" + "keyData": "[parameters('adminSshKey').sshPublicKey]" } ] } @@ -299,6 +274,8 @@ "base64check_app_ready": "[base64(variables('check_app_ready'))]", "base64restart": "[base64(variables('restart'))]", "userDataTemplate": "#!/bin/bash -x\nset -eu -o pipefail\n\necho ${base64install} | base64 -d > /usr/local/bin/install.sh\nchmod +x /usr/local/bin/install.sh\n\n# after_install.sh\necho ${base64after_install} | base64 -d > /usr/local/bin/after_install.sh\nchmod +x /usr/local/bin/after_install.sh\n\n# update_config_from_secret.sh\necho ${base64update_config_from_secret} | base64 -d > /usr/local/bin/update_config_from_secret.sh\nchmod +x /usr/local/bin/update_config_from_secret.sh\n\n# update_secret_from_config.sh\necho ${base64update_secret_from_config} | base64 -d > /usr/local/bin/update_secret_from_config.sh\nchmod +x /usr/local/bin/update_secret_from_config.sh\n\n# get_value_from_config.sh\necho ${base64get_value_from_config} | base64 -d > /usr/local/bin/get_value_from_config.sh\nchmod +x /usr/local/bin/get_value_from_config.sh\n\n# store_secret.sh\necho ${base64store_secret} | base64 -d > /usr/local/bin/store_secret.sh\nchmod +x /usr/local/bin/store_secret.sh\n\necho ${base64check_app_ready} | base64 -d > /usr/local/bin/check_app_ready.sh\nchmod +x /usr/local/bin/check_app_ready.sh\n\necho ${base64restart} | base64 -d > /usr/local/bin/restart.sh\nchmod +x /usr/local/bin/restart.sh\n\necho ${base64config_blobStorage} | base64 -d > /usr/local/bin/config_blobStorage.sh\nchmod +x /usr/local/bin/config_blobStorage.sh\n\n# Install azure cli\ncurl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash\n\naz login --identity --allow-no-subscriptions\n\napt-get update && apt-get install -y\n\nexport HOME=\"/root\"\n\n# Install OpenVidu\n/usr/local/bin/install.sh || { echo \"[OpenVidu] error installing OpenVidu\"; exit 1; }\n\n#Config blob storage\n/usr/local/bin/config_blobStorage.sh || { echo \"[OpenVidu] error configuring Blob Storage\"; exit 1; }\n\n# Start OpenVidu\nsystemctl start openvidu || { echo \"[OpenVidu] error starting OpenVidu\"; exit 1; }\n\n# Update shared secret\n/usr/local/bin/after_install.sh || { echo \"[OpenVidu] error updating shared secret\"; exit 1; }\n\n# Launch on reboot\necho \"@reboot /usr/local/bin/restart.sh >> /var/log/openvidu-restart.log\" 2>&1 | crontab\n\n# Wait for the app\n/usr/local/bin/check_app_ready.sh\n", + "ipExists": "[equals(parameters('publicIpAddressObject').newOrExisting, 'existing')]", + "ipNew": "[equals(parameters('publicIpAddressObject').newOrExisting, 'new')]", "isEmptyStorageAccountName": "[equals(parameters('storageAccountName'), '')]", "isEmptyContainerName": "[equals(parameters('containerName'), '')]" }, @@ -387,7 +364,6 @@ "osProfile": { "computerName": "[variables('openviduVMSettings').vmName]", "adminUsername": "[parameters('adminUsername')]", - "adminPassword": "[parameters('adminSshKey')]", "linuxConfiguration": "[variables('openviduVMSettings').linuxConfiguration]" }, "userData": "[base64(reduce(items(createObject('base64install', base64(reduce(items(createObject('domainName', parameters('domainName'), 'fqdn', if(variables('isEmptyIp'), reference(resourceId('Microsoft.Network/publicIPAddresses', format('{0}-publicIP', parameters('stackName'))), '2023-11-01').dnsSettings.fqdn, parameters('domainName')), 'turnDomainName', parameters('turnDomainName'), 'certificateType', parameters('certificateType'), 'letsEncryptEmail', parameters('letsEncryptEmail'), 'ownPublicCertificate', parameters('ownPublicCertificate'), 'ownPrivateCertificate', parameters('ownPrivateCertificate'), 'turnOwnPublicCertificate', parameters('turnOwnPublicCertificate'), 'turnOwnPrivateCertificate', parameters('turnOwnPrivateCertificate'), 'keyVaultName', variables('keyVaultName'))), createObject('value', variables('installScriptTemplate')), lambda('curr', 'next', createObject('value', replace(lambdaVariables('curr').value, format('${{{0}}}', lambdaVariables('next').key), lambdaVariables('next').value)))).value), 'base64after_install', base64(reduce(items(createObject('domainName', parameters('domainName'), 'fqdn', if(variables('isEmptyIp'), reference(resourceId('Microsoft.Network/publicIPAddresses', format('{0}-publicIP', parameters('stackName'))), '2023-11-01').dnsSettings.fqdn, parameters('domainName')), 'turnDomainName', parameters('turnDomainName'), 'certificateType', parameters('certificateType'), 'letsEncryptEmail', parameters('letsEncryptEmail'), 'ownPublicCertificate', parameters('ownPublicCertificate'), 'ownPrivateCertificate', parameters('ownPrivateCertificate'), 'turnOwnPublicCertificate', parameters('turnOwnPublicCertificate'), 'turnOwnPrivateCertificate', parameters('turnOwnPrivateCertificate'), 'keyVaultName', variables('keyVaultName'))), createObject('value', variables('after_installScriptTemplate')), lambda('curr', 'next', createObject('value', replace(lambdaVariables('curr').value, format('${{{0}}}', lambdaVariables('next').key), lambdaVariables('next').value)))).value), 'base64update_config_from_secret', base64(reduce(items(createObject('domainName', parameters('domainName'), 'fqdn', if(variables('isEmptyIp'), reference(resourceId('Microsoft.Network/publicIPAddresses', format('{0}-publicIP', parameters('stackName'))), '2023-11-01').dnsSettings.fqdn, parameters('domainName')), 'turnDomainName', parameters('turnDomainName'), 'certificateType', parameters('certificateType'), 'letsEncryptEmail', parameters('letsEncryptEmail'), 'ownPublicCertificate', parameters('ownPublicCertificate'), 'ownPrivateCertificate', parameters('ownPrivateCertificate'), 'turnOwnPublicCertificate', parameters('turnOwnPublicCertificate'), 'turnOwnPrivateCertificate', parameters('turnOwnPrivateCertificate'), 'keyVaultName', variables('keyVaultName'))), createObject('value', variables('update_config_from_secretScriptTemplate')), lambda('curr', 'next', createObject('value', replace(lambdaVariables('curr').value, format('${{{0}}}', lambdaVariables('next').key), lambdaVariables('next').value)))).value), 'base64update_secret_from_config', base64(reduce(items(createObject('domainName', parameters('domainName'), 'fqdn', if(variables('isEmptyIp'), reference(resourceId('Microsoft.Network/publicIPAddresses', format('{0}-publicIP', parameters('stackName'))), '2023-11-01').dnsSettings.fqdn, parameters('domainName')), 'turnDomainName', parameters('turnDomainName'), 'certificateType', parameters('certificateType'), 'letsEncryptEmail', parameters('letsEncryptEmail'), 'ownPublicCertificate', parameters('ownPublicCertificate'), 'ownPrivateCertificate', parameters('ownPrivateCertificate'), 'turnOwnPublicCertificate', parameters('turnOwnPublicCertificate'), 'turnOwnPrivateCertificate', parameters('turnOwnPrivateCertificate'), 'keyVaultName', variables('keyVaultName'))), createObject('value', variables('update_secret_from_configScriptTemplate')), lambda('curr', 'next', createObject('value', replace(lambdaVariables('curr').value, format('${{{0}}}', lambdaVariables('next').key), lambdaVariables('next').value)))).value), 'base64get_value_from_config', variables('base64get_value_from_config'), 'base64store_secret', base64(reduce(items(createObject('domainName', parameters('domainName'), 'fqdn', if(variables('isEmptyIp'), reference(resourceId('Microsoft.Network/publicIPAddresses', format('{0}-publicIP', parameters('stackName'))), '2023-11-01').dnsSettings.fqdn, parameters('domainName')), 'turnDomainName', parameters('turnDomainName'), 'certificateType', parameters('certificateType'), 'letsEncryptEmail', parameters('letsEncryptEmail'), 'ownPublicCertificate', parameters('ownPublicCertificate'), 'ownPrivateCertificate', parameters('ownPrivateCertificate'), 'turnOwnPublicCertificate', parameters('turnOwnPublicCertificate'), 'turnOwnPrivateCertificate', parameters('turnOwnPrivateCertificate'), 'keyVaultName', variables('keyVaultName'))), createObject('value', variables('store_secretScriptTemplate')), lambda('curr', 'next', createObject('value', replace(lambdaVariables('curr').value, format('${{{0}}}', lambdaVariables('next').key), lambdaVariables('next').value)))).value), 'base64check_app_ready', variables('base64check_app_ready'), 'base64restart', variables('base64restart'), 'base64config_blobStorage', base64(reduce(items(createObject('storageAccountName', if(variables('isEmptyStorageAccountName'), uniqueString(resourceGroup().id), parameters('storageAccountName')), 'storageAccountKey', listKeys(resourceId('Microsoft.Storage/storageAccounts', uniqueString(resourceGroup().id)), '2021-04-01').keys[0].value, 'storageAccountContainerName', if(variables('isEmptyContainerName'), 'openvidu-appdata', format('{0}', parameters('containerName'))))), createObject('value', variables('config_blobStorageTemplate')), lambda('curr', 'next', createObject('value', replace(lambdaVariables('curr').value, format('${{{0}}}', lambdaVariables('next').key), lambdaVariables('next').value)))).value))), createObject('value', variables('userDataTemplate')), lambda('curr', 'next', createObject('value', replace(lambdaVariables('curr').value, format('${{{0}}}', lambdaVariables('next').key), lambdaVariables('next').value)))).value)]" @@ -474,7 +450,7 @@ "id": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('networkSettings').vNetName, variables('networkSettings').subnetName)]" }, "publicIPAddress": { - "id": "[if(variables('isEmptyIp'), resourceId('Microsoft.Network/publicIPAddresses', format('{0}-publicIP', parameters('stackName'))), resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIpAddressResourceName')))]" + "id": "[if(variables('isEmptyIp'), resourceId('Microsoft.Network/publicIPAddresses', format('{0}-publicIP', parameters('stackName'))), if(variables('ipNew'), resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIpAddressObject').name), resourceId('Microsoft.Network/publicIPAddresses', parameters('publicIpAddressObject').name)))]" } } } @@ -660,23 +636,5 @@ "[resourceId('Microsoft.Storage/storageAccounts', uniqueString(resourceGroup().id))]" ] } - ], - "outputs": { - "ipValidationStatus": { - "type": "string", - "value": "[if(variables('isValidIP'), 'IP address is valid', 'IP address not valid')]" - }, - "domainValidationStatus": { - "type": "string", - "value": "[if(variables('isDomainValid'), 'Domain is valid', 'Domain is not valid')]" - }, - "ownCertValidationStatus": { - "type": "string", - "value": "[if(and(and(equals(parameters('certificateType'), 'owncert'), not(equals(parameters('ownPrivateCertificate'), ''))), not(equals(parameters('ownPublicCertificate'), ''))), 'owncert selected and valid', 'You need to fill ''Own Public Certificate'' and ''Own Private Certificate''')]" - }, - "letsEncryptValidationStatus": { - "type": "string", - "value": "[if(and(equals(parameters('certificateType'), 'letsencrypt'), not(equals(parameters('letsEncryptEmail'), ''))), 'letsEncrypt selected and valid', 'You need to fill ''Lets Encrypt Email''')]" - } - } + ] } \ No newline at end of file diff --git a/openvidu-deployment/community/singlenode/azure/createUiDefinition.json b/openvidu-deployment/community/singlenode/azure/createUiDefinition.json index adef2272..49233acd 100644 --- a/openvidu-deployment/community/singlenode/azure/createUiDefinition.json +++ b/openvidu-deployment/community/singlenode/azure/createUiDefinition.json @@ -70,7 +70,7 @@ "visible": true }, { - "name": "publicIpAddress", + "name": "publicIpAddressObject", "type": "Microsoft.Network.PublicIpAddressCombo", "label": { "publicIpAddress": "Public IP address" @@ -79,7 +79,7 @@ "publicIpAddress": "Previously created Public IP address for the OpenVidu Deployment. Blank will generate a public IP" }, "defaultValue": { - "publicIpAddressName": "" + "publicIpAddressName": "None" }, "options": { "hideNone": false, @@ -358,7 +358,7 @@ "parameters": { "stackName": "[steps('basics').stackName]", "certificateType": "[steps('parameters SSL').certificateType]", - "publicIpAddress": "[steps('parameters SSL').publicIpAddress]", + "publicIpAddressObject": "[steps('parameters SSL').publicIpAddressObject]", "domainName": "[steps('parameters SSL').domainName]", "ownPublicCertificate": "[steps('parameters SSL').ownPublicCertificate]", "ownPrivateCertificate": "[steps('parameters SSL').ownPrivateCertificate]", diff --git a/openvidu-deployment/pro/elastic/azure/cf-openvidu-elastic.json b/openvidu-deployment/pro/elastic/azure/cf-openvidu-elastic.json index 2b2d537f..c7272661 100644 --- a/openvidu-deployment/pro/elastic/azure/cf-openvidu-elastic.json +++ b/openvidu-deployment/pro/elastic/azure/cf-openvidu-elastic.json @@ -5,7 +5,7 @@ "_generator": { "name": "bicep", "version": "0.35.1.17967", - "templateHash": "3871475618690089339" + "templateHash": "5324001294294208652" } }, "parameters": { @@ -400,7 +400,7 @@ "type": "string", "defaultValue": "", "metadata": { - "description": "Name of the bucket where OpenVidu will store the recordings. If not specified, a default bucket will be created." + "description": "Name of the bucket where OpenVidu will store the recordings if a new Storage account is being creating. If not specified, a default bucket will be created. If you want to use an existing storage account, fill this parameter with the name of the container where the recordings are stored." } } }, diff --git a/openvidu-deployment/pro/ha/azure/cf-openvidu-ha.json b/openvidu-deployment/pro/ha/azure/cf-openvidu-ha.json index cbcd85c4..3cff67e6 100644 --- a/openvidu-deployment/pro/ha/azure/cf-openvidu-ha.json +++ b/openvidu-deployment/pro/ha/azure/cf-openvidu-ha.json @@ -5,7 +5,7 @@ "_generator": { "name": "bicep", "version": "0.35.1.17967", - "templateHash": "16513973763938354606" + "templateHash": "15246851867985685865" } }, "parameters": { @@ -406,7 +406,7 @@ "type": "string", "defaultValue": "", "metadata": { - "description": "Name of the bucket where OpenVidu will store the recordings if a new Storage account is being creating. If not specified, a default bucket will be created." + "description": "Name of the bucket where OpenVidu will store the recordings if a new Storage account is being creating. If not specified, a default bucket will be created. If you want to use an existing storage account, fill this parameter with the name of the container where the recordings are stored." } } },