{ "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "parameters": { "_artifactsLocation": { "type": "string", "metadata": { "description": "The base URI where artifacts required by this template are located. When the template is deployed using the accompanying scripts, a private location in the subscription will be used and this value will be automatically generated." }, "defaultValue": "https://raw.githubusercontent.com/wls-eng/arm-oraclelinux-wls-cluster-with-loadbalancer/master/" }, "adminUsername": { "type": "string", "metadata": { "description": "User name for the Virtual Machine." } }, "authenticationType": { "type": "string", "defaultValue": "password", "allowedValues": [ "sshPublicKey", "password" ], "metadata": { "description": "Type of authentication to use on the Virtual Machine. SSH key is recommended." } }, "adminPasswordOrKey": { "type": "securestring", "metadata": { "description": "SSH Key or password for the Virtual Machine. SSH key is recommended." } }, "acceptOTNLicenseAgreement": { "type": "string", "metadata": { "description": "Do you agree to provide OTN credentials to accept OTN License Agreement? Enter Y or y to agree, else N or n" } }, "otnAccountUsername": { "type": "string", "metadata": { "description": "Username for your Oracle Technology Network account" } }, "otnAccountPassword": { "type": "securestring", "metadata": { "description": "Password for your Oracle Technology Network account" } }, "wlsDomainName": { "type": "string", "metadata": { "description": "Provide Weblogic domain name" } }, "wlsUserName": { "type": "string", "metadata": { "description": "Username for your Weblogic domain name" } }, "wlsPassword": { "type": "securestring", "metadata": { "description": "Password for your Weblogic domain name" } }, "managedServerPrefix": { "type": "string", "metadata": { "description": "Provide managed server prefix names" } }, "dnsLabelPrefix": { "type": "string", "metadata": { "description": "Unique DNS Name for the Public IP used to access the Virtual Machine." } }, "dnsNameforLBIP": { "type": "string", "defaultValue": "wlsclusterlb", "metadata": { "description": "DNS for Load Balancer IP" } }, "LBPublicIPAddressName": { "type": "string", "defaultValue": "LBPublicIP", "metadata": { "description": "Public IP Name for the Load Balancer" } }, "linuxOSVersion": { "type": "string", "defaultValue": "7.4", "allowedValues": [ "7.4", "7.3" ], "metadata": { "description": "The Oracle Linux version for the VM. This will pick a fully patched image of this given Oracle Linux version." } }, "numberOfInstances": { "type": "int", "defaultValue": 2, "minValue": 2, "maxValue": 5, "metadata": { "description": "Number of VMs to deploy, limit 5 since this sample is using a single storage account" } }, "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for all resources." } }, "vmSizeSelect": { "type": "string", "defaultValue": "Standard_A3", "allowedValues": [ "Standard_A1", "Standard_A2", "Standard_A3", "Standard_A4" ], "metadata": { "description": "Select appropriate VM Size as per requirement (Standard_A1, Standard_A2, Standard_A3, Standard_A4)" } } }, "variables": { "extensionUrl": "[concat(parameters('_artifactsLocation'), 'scripts/')]", "imagePublisher": "Oracle", "imageOffer": "Oracle-Linux", "managedServerVMName": "managedServerVM", "adminVMName": "adminServerVM", "nicName": "_NIC", "storageAccountName": "[concat('storage',uniquestring(resourceGroup().id))]", "addressPrefix": "10.0.0.0/16", "subnetName": "Subnet", "subnetPrefix": "10.0.0.0/24", "storageAccountType": "Standard_LRS", "publicIPAddressName": "_PublicIP", "publicIPAddressType": "Dynamic", "vmSize": "[parameters('vmSizeSelect')]", "virtualNetworkName": "[concat(parameters('wlsDomainName'),'_VNET')]", "ScriptFolder": "scripts", "ScriptFileName": "setupClusterDomain.sh", "availabilitySetName": "WLSCluster-AvailabilitySet", "adminAvailabilitySetName": "WLSAdmin-AvailabilitySet", "loadBalancerName": "ilb", "loadBalancerFrontEndDefaultPort": 8001, "loadBalancerFrontEndChannelPort": 8501, "lbID": "[resourceId('Microsoft.Network/loadBalancers', variables('loadBalancerName'))]", "publicLBIPAddressID": "[resourceId('Microsoft.Network/publicIPAddresses',parameters('LBPublicIPAddressName'))]", "availabilitySetId": { "id": "[resourceId('Microsoft.Compute/availabilitySets', variables('availabilitySetName'))]" }, "loadBalancerBackendAddressPoolsId": { "id": "[concat(variables('lbID'), '/backendAddressPools/BackendPool1')]" }, "linuxConfiguration": { "disablePasswordAuthentication": true, "ssh": { "publicKeys": [{ "path": "[concat('/home/', parameters('adminUsername'), '/.ssh/authorized_keys')]", "keyData": "[parameters('adminPasswordOrKey')]" }] } }, "subnetRef": "[resourceId('Microsoft.Network/virtualNetworks/subnets', variables('virtualNetworkName'), variables('subnetName'))]" }, "resources": [{ "type": "Microsoft.Storage/storageAccounts", "apiVersion": "2018-11-01", "name": "[variables('storageAccountName')]", "location": "[parameters('location')]", "sku": { "name": "[variables('storageAccountType')]" }, "kind": "Storage", "properties": { } }, { "apiVersion": "2018-04-01", "type": "Microsoft.Compute/availabilitySets", "location": "[parameters('location')]", "name": "[variables('availabilitySetName')]", "properties": { "platformFaultDomainCount": 2, "platformUpdateDomainCount": 2 }, "sku": { "name": "Aligned" } }, { "type": "Microsoft.Network/publicIPAddresses", "apiVersion": "2018-11-01", "name": "[parameters('LBPublicIPAddressName')]", "location": "[resourceGroup().location]", "properties": { "publicIPAllocationMethod": "[variables('publicIPAddressType')]", "dnsSettings": { "domainNameLabel": "[concat(parameters('dnsNameforLBIP'),'-',toLower(resourceGroup().name),'-',toLower(parameters('wlsDomainName')))]" } } }, { "type": "Microsoft.Network/publicIPAddresses", "apiVersion": "2018-11-01", "name": "[concat(variables('adminVMName'),variables('publicIPAddressName'))]", "location": "[parameters('location')]", "properties": { "publicIPAllocationMethod": "[variables('publicIPAddressType')]", "dnsSettings": { "domainNameLabel": "[concat(toLower(parameters('dnsLabelPrefix')),'-',toLower(resourceGroup().name),'-',toLower(parameters('wlsDomainName')),'-',toLower(variables('adminVMName')))]" } } }, { "type": "Microsoft.Network/virtualNetworks", "apiVersion": "2018-11-01", "name": "[variables('virtualNetworkName')]", "location": "[parameters('location')]", "properties": { "addressSpace": { "addressPrefixes": [ "[variables('addressPrefix')]" ] }, "subnets": [{ "name": "[variables('subnetName')]", "properties": { "addressPrefix": "[variables('subnetPrefix')]" } }] } }, { "type": "Microsoft.Network/networkInterfaces", "apiVersion": "2018-11-01", "name": "[concat(variables('adminVMName'),variables('nicName'))]", "location": "[parameters('location')]", "dependsOn": [ "[variables('virtualNetworkName')]" ], "properties": { "ipConfigurations": [{ "name": "ipconfig1", "properties": { "privateIPAllocationMethod": "Dynamic", "publicIPAddress": { "id": "[resourceId('Microsoft.Network/publicIPAddresses',concat(variables('adminVMName'),variables('publicIPAddressName')))]" }, "subnet": { "id": "[variables('subnetRef')]" } } }] } }, { "condition": "[not(equals(copyIndex(),0))]", "type": "Microsoft.Network/networkInterfaces", "apiVersion": "2018-11-01", "name": "[concat(variables('managedServerVMName'),copyIndex(),variables('nicName'))]", "location": "[parameters('location')]", "copy": { "name": "nicLoopForMS", "count": "[parameters('numberOfInstances')]" }, "dependsOn": [ "[variables('virtualNetworkName')]", "[parameters('LBPublicIPAddressName')]", "[variables('loadBalancerName')]" ], "properties": { "ipConfigurations": [{ "name": "ipconfig2", "properties": { "privateIPAllocationMethod": "Dynamic", "subnet": { "id": "[variables('subnetRef')]" }, "loadBalancerBackendAddressPools": [{ "id": "[concat(variables('lbID'), '/backendAddressPools/BackendPool1')]" }] } }] } }, { "apiVersion": "2018-04-01", "type": "Microsoft.Network/loadBalancers", "name": "[variables('loadBalancerName')]", "location": "[resourceGroup().location]", "dependsOn": [ "[parameters('LBPublicIPAddressName')]", "[variables('virtualNetworkName')]" ], "properties": { "frontendIPConfigurations": [{ "properties": { "publicIPAddress": { "id": "[variables('publicLBIPAddressID')]" } }, "name": "LoadBalancerFrontend" }], "backendAddressPools": [{ "name": "BackendPool1" }], "loadBalancingRules": [{ "properties": { "frontendIPConfiguration": { "id": "[concat(resourceId('Microsoft.Network/loadBalancers', variables('loadBalancerName')), '/frontendIpConfigurations/LoadBalancerFrontend')]" }, "backendAddressPool": { "id": "[concat(resourceId('Microsoft.Network/loadBalancers', variables('loadBalancerName')), '/backendAddressPools/BackendPool1')]" }, "probe": { "id": "[concat(resourceId('Microsoft.Network/loadBalancers', variables('loadBalancerName')), '/probes/lbprobe')]" }, "protocol": "Tcp", "frontendPort": "[variables('loadBalancerFrontEndDefaultPort')]", "backendPort": "[variables('loadBalancerFrontEndDefaultPort')]", "idleTimeoutInMinutes": 15, "loadDistribution": "SourceIP" }, "Name": "lbrule" }, { "properties": { "frontendIPConfiguration": { "id": "[concat(resourceId('Microsoft.Network/loadBalancers', variables('loadBalancerName')), '/frontendIpConfigurations/LoadBalancerFrontend')]" }, "backendAddressPool": { "id": "[concat(resourceId('Microsoft.Network/loadBalancers', variables('loadBalancerName')), '/backendAddressPools/BackendPool1')]" }, "probe": { "id": "[concat(resourceId('Microsoft.Network/loadBalancers', variables('loadBalancerName')), '/probes/lbprobeForT3Channel')]" }, "protocol": "Tcp", "frontendPort": "[variables('loadBalancerFrontEndChannelPort')]", "backendPort": "[variables('loadBalancerFrontEndChannelPort')]", "idleTimeoutInMinutes": 15, "loadDistribution": "SourceIP" }, "Name": "lbruleForT3Channel" }], "probes": [{ "properties": { "protocol": "Tcp", "port": "[variables('loadBalancerFrontEndDefaultPort')]", "intervalInSeconds": 15, "numberOfProbes": 2 }, "name": "lbprobe" }, { "properties": { "protocol": "Tcp", "port": "[variables('loadBalancerFrontEndChannelPort')]", "intervalInSeconds": 15, "numberOfProbes": 2 }, "name": "lbprobeForT3Channel" }] } }, { "type": "Microsoft.Compute/virtualMachines", "apiVersion": "2018-10-01", "name": "[variables('adminVMName')]", "location": "[parameters('location')]", "dependsOn": [ "[concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]", "[concat('Microsoft.Network/networkInterfaces/', variables('adminVMName'),variables('nicName'))]", "[concat('Microsoft.Compute/availabilitySets/', variables('availabilitySetName'))]" ], "properties": { "availabilitySet": { "id": "[resourceId('Microsoft.Compute/availabilitySets',variables('availabilitySetName'))]" }, "hardwareProfile": { "vmSize": "[variables('vmSize')]" }, "osProfile": { "computerName": "[variables('adminVMName')]", "adminUsername": "[parameters('adminUsername')]", "adminPassword": "[parameters('adminPasswordOrKey')]", "linuxConfiguration": "[if(equals(parameters('authenticationType'), 'password'), json('null'), variables('linuxConfiguration'))]" }, "storageProfile": { "imageReference": { "publisher": "[variables('imagePublisher')]", "offer": "[variables('imageOffer')]", "sku": "[parameters('linuxOSVersion')]", "version": "latest" }, "osDisk": { "createOption": "FromImage" }, "dataDisks": [{ "diskSizeGB": 900, "lun": 0, "createOption": "Empty" }] }, "networkProfile": { "networkInterfaces": [{ "id": "[resourceId('Microsoft.Network/networkInterfaces',concat(variables('adminVMName'),variables('nicName')))]" }] }, "diagnosticsProfile": { "bootDiagnostics": { "enabled": true, "storageUri": "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), '2016-01-01').primaryEndpoints.blob)]" } } } }, { "condition": "[not(equals(copyIndex(),0))]", "type": "Microsoft.Compute/virtualMachines", "apiVersion": "2018-10-01", "name": "[concat(variables('managedServerVMName'), copyIndex())]", "location": "[parameters('location')]", "copy": { "name": "virtualMachineLoopForMS", "count": "[parameters('numberOfInstances')]" }, "dependsOn": [ "[concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]", "nicLoopForMS", "[concat('Microsoft.Compute/availabilitySets/', variables('availabilitySetName'))]" ], "properties": { "availabilitySet": { "id": "[resourceId('Microsoft.Compute/availabilitySets',variables('availabilitySetName'))]" }, "hardwareProfile": { "vmSize": "[variables('vmSize')]" }, "osProfile": { "computerName": "[concat(variables('managedServerVMName'), copyIndex())]", "adminUsername": "[parameters('adminUsername')]", "adminPassword": "[parameters('adminPasswordOrKey')]", "linuxConfiguration": "[if(equals(parameters('authenticationType'), 'password'), json('null'), variables('linuxConfiguration'))]" }, "storageProfile": { "imageReference": { "publisher": "[variables('imagePublisher')]", "offer": "[variables('imageOffer')]", "sku": "[parameters('linuxOSVersion')]", "version": "latest" }, "osDisk": { "createOption": "FromImage" }, "dataDisks": [{ "diskSizeGB": 900, "lun": 0, "createOption": "Empty" }] }, "networkProfile": { "networkInterfaces": [{ "id": "[resourceId('Microsoft.Network/networkInterfaces',concat(variables('managedServerVMName'),copyIndex(),variables('nicName')))]" }] }, "diagnosticsProfile": { "bootDiagnostics": { "enabled": true, "storageUri": "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), '2016-01-01').primaryEndpoints.blob)]" } } } }, { "type": "Microsoft.Compute/virtualMachines/extensions", "name": "[concat(variables('adminVMName'),'/newuserscript')]", "apiVersion": "2017-12-01", "location": "[parameters('location')]", "dependsOn": [ "[concat('Microsoft.Compute/virtualMachines/',variables('adminVMName'))]" ], "properties": { "publisher": "Microsoft.Azure.Extensions", "type": "CustomScript", "typeHandlerVersion": "2.0", "autoUpgradeMinorVersion": true, "settings": { "fileUris": [ "https://raw.githubusercontent.com/wls-eng/arm-oraclelinux-wls-cluster-with-loadbalancer/master/setupClusterDomain.sh" ], "commandToExecute": "[concat('sh setupClusterDomain.sh',' ',parameters('acceptOTNLicenseAgreement'),' ',parameters('otnAccountUsername'),' ',parameters('otnAccountPassword'),' ',parameters('wlsDomainName'),' ',parameters('wlsUserName'),' ',parameters('wlsPassword'),' ','admin',' ',variables('adminVMName'),' ',reference(parameters('LBPublicIPAddressName')).dnsSettings.fqdn)]" } } }, { "condition": "[not(equals(copyIndex(),0))]", "type": "Microsoft.Compute/virtualMachines/extensions", "name": "[concat(variables('managedServerVMName'),copyIndex(),'/newuserscript')]", "apiVersion": "2017-12-01", "location": "[parameters('location')]", "copy": { "name": "virtualMachineExtensionLoop", "count": "[parameters('numberOfInstances')]" }, "dependsOn": [ "virtualMachineLoopForMS" ], "properties": { "publisher": "Microsoft.Azure.Extensions", "type": "CustomScript", "typeHandlerVersion": "2.0", "autoUpgradeMinorVersion": true, "settings": { "fileUris": [ "https://raw.githubusercontent.com/wls-eng/arm-oraclelinux-wls-cluster-with-loadbalancer/master/setupClusterDomain.sh" ], "commandToExecute": "[concat('sh setupClusterDomain.sh',' ',parameters('acceptOTNLicenseAgreement'),' ',parameters('otnAccountUsername'),' ',parameters('otnAccountPassword'),' ',parameters('wlsDomainName'),' ',parameters('wlsUserName'),' ',parameters('wlsPassword'),' ',concat(parameters('managedServerPrefix'),copyIndex()),' ',variables('adminVMName'),' ',reference(parameters('LBPublicIPAddressName')).dnsSettings.fqdn)]" } } } ], "outputs": { "wlsDomainLocation": { "type": "string", "value": "[concat('/u01/domains/', parameters('wlsDomainName'))]" }, "adminHostName": { "type": "string", "value": "[reference(concat(variables('adminVMName'),variables('publicIPAddressName'))).dnsSettings.fqdn]" }, "adminConsole": { "type": "string", "value": "[concat('http://',reference(concat(variables('adminVMName'),variables('publicIPAddressName'))).dnsSettings.fqdn,':7001/console')]" }, "adminSecuredConsole": { "type": "string", "value": "[concat('https://',reference(concat(variables('adminVMName'),variables('publicIPAddressName'))).dnsSettings.fqdn,':7002/console')]" }, "loadBalancerURL": { "type": "string", "value": "[concat('http://',reference(parameters('LBPublicIPAddressName')).dnsSettings.fqdn,':8001')]" } } }