diff --git a/README.md b/README.md index 69f1630..87826ad 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,25 @@ Netscaler Azure templates -------------------------------------- -**Introduction** ----------------- +## Introduction +Welcome to the GitHub repository for Citrix Netscaler Azure templates. This is a repository for [Citrix NetScaler's](https://www.citrix.com/products/netscaler-adc/) templates for deploying Citrix NetScaler in Microsoft Azure Cloud Services. All of the templates in this repository have been developed by the NetScaler engineering team. -Welcome to the GitHub repository for Citrix Netscaler Azure templates for deploying Netscaler in Microsoft Azure Cloud Services. All of the templates in this repository have been developed by the Netscaler engineering team. There are two main directories: Supported and Experimental +## Citrix NetScaler VPX +Citrix NetScaler VPX is a virtual application delivery controller that combines the latest cloud-native features with a simple user experience. The NetScaler optimizes the user experience ensuring that applications are always available by using advanced L4-7 load balancing, traffic management and proven application acceleration such as HTTP compression and caching. -**Supported:** -The Supported directory has Netscaler Azure templates that have been created and fully tested by the Citrix team. Should you run into any issues while using these templates, you can get from Citrix Technical Support teams through standard procedures. +## Citrix NetScaler VPX in Azure +Citrix NetScaler VPX offers are available as resources in the Azure portal. This repository is an extension to provide additional deployments supported by Citrix. -**Experimental:** -The Experimental directory has Azure templates that have not yet completed full testing and are subject to change. Citrix does not provide technical support for templates in this directory. Caution is advised while using these templates. +## About these templates +Each template in this repository has co-located documentation describing the usage and architecture of the template. The templates attempt to codify recommended deployment architecture of the Citrix NetScaler VPX, or to introduce the user to the Citrix NetScaler or to demonstrate a particular feature / edition / option. Users can re-use / modify or enhance the templates to suit their particular production and testing needs. Most templates require sufficient subscriptions to portal.azure.com to create resource and deploy templates. + +## Versioning +The master branch of the repository generally has the latest version of the template. Older released versions are tagged appropriately + +## Support +For production issues with the templates, please contact Citrix Support through your normal support channels. If you have fixes / suggestions for improvements or requests, please raise an issue in this repository. + +## Further reading +- VPX installation in Azure : https://docs.citrix.com/en-us/netscaler/12/deploying-vpx/deploy-vpx-on-azure.html +- Citrix NetScaler 12.0 Documention : https://docs.citrix.com/en-us/netscaler/12.html +- Citrix NetScaler Overview : https://www.citrix.com/products/netscaler-adc/resources/netscaler-vpx.html diff --git a/docs/testfile6.md b/docs/testfile6.md deleted file mode 100644 index 8b13789..0000000 --- a/docs/testfile6.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/experimental/testfile5.md b/experimental/testfile5.md deleted file mode 100644 index 8b13789..0000000 --- a/experimental/testfile5.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/supported/testfilen4.md b/supported/testfilen4.md deleted file mode 100644 index 8b13789..0000000 --- a/supported/testfilen4.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/templates/express_single_nic/README.md b/templates/express_single_nic/README.md new file mode 100644 index 0000000..628d7ed --- /dev/null +++ b/templates/express_single_nic/README.md @@ -0,0 +1,20 @@ +## NetScaler VPX Express +NetScaler VPX Express is a free virtual application delivery controller (normal hourly Azure Virtual Machine rates apply). This Azure custom template deployment can be used for light production loads, testing and prototyping needs. + + +## Azure Custom Template description +This template creates an instance of the VPX Express from the VPX Express SKU image utilising a single subnet within provided virtual network. This template also utilizes a custom script that initializes the VPX instance. Initial configuration performed by the custom script includes network interface configuration, VIP configuration and feature configuration. Further configuration can be performed by logging in to the GUI or via SSH. + +## Network architecture +The Azure custom template deploys the VPX in a single-NIC mode. The standard NetScaler IP addresses: NSIP (management IP), VIP (where load balanced applications are accessed) and SNIP (the IP used to send traffic to backend instances) are all provisioned on the single NIC and are drawn from the (RFC1918) address space of the provided virtual network's subnet. The (RFC1918) NSIP is mapped to the Public IP of the VPX Instance and the RFC1918 VIP is mapped to another public IP. + +## Quick Launch Link + +[![Create NetScaler VPX Express](http://azuredeploy.net/deploybutton.png)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2Fcitrix%2Fnetscaler-azure-templates%2Fmaster%2Ftemplates%2Fexpress_single_nic%2FmainTemplate.json) + + +## Additional Links: + +- VPX installation in Azure : https://docs.citrix.com/en-us/netscaler/12/deploying-vpx/deploy-vpx-on-azure.html +- NetScaler 12.0 Documentation : https://docs.citrix.com/en-us/netscaler/12.html +- NetScaler Overview : https://www.citrix.com/products/netscaler-adc/resources/netscaler-vpx.html \ No newline at end of file diff --git a/templates/express_single_nic/mainTemplate.json b/templates/express_single_nic/mainTemplate.json new file mode 100644 index 0000000..441d7bf --- /dev/null +++ b/templates/express_single_nic/mainTemplate.json @@ -0,0 +1,282 @@ +{ + "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "location": { + "type": "string" + }, + "virtualMachineName": { + "type": "string" + }, + "virtualMachineSize": { + "type": "string" + }, + "adminUsername": { + "type": "string" + }, + "adminPassword": { + "type": "securestring" + }, + "virtualNetworkName": { + "type": "string" + }, + "vnetRG": { + "type": "string" + }, + "vnetNewOrExisting": { + "type": "string" + }, + "networkInterfaceName": { + "type": "string" + }, + "networkSecurityGroupName": { + "type": "string" + }, + "diagnosticsStorageAccountName": { + "type": "string" + }, + "diagnosticsStorageAccountType": { + "type": "string" + }, + "addressPrefix": { + "type": "string" + }, + "subnetName": { + "type": "string" + }, + "subnetPrefix": { + "type": "string" + }, + "baseUrl": { + "defaultValue": "https://github.com/citrix/netscaler-azure-templates", + "type": "String", + "metadata": { + "artifactsBaseUrl": "", + "description": "The base URL for dependent assets" + } + } + }, + "variables": { + "vnetId": "[resourceId(parameters('vnetRG'),'Microsoft.Network/virtualNetworks', parameters('virtualNetworkName'))]", + "subnetRef": "[concat(variables('vnetId'), '/subnets/', parameters('subnetName'))]", + "nicId": "[resourceId('Microsoft.Network/networkInterfaces', parameters('networkInterfaceName'))]" + }, + "resources": [{ + "type": "Microsoft.Compute/virtualMachines/extensions", + "name": "[concat(parameters('virtualMachineName'),'/', 'vpx-express')]", + "apiVersion": "2017-12-01", + "location": "[parameters('location')]", + "dependsOn": [ + "[concat('Microsoft.Compute/virtualMachines/', parameters('virtualMachineName'))]" + ], + "properties": { + "publisher": "Microsoft.OSTCExtensions", + "type": "CustomScriptForLinux", + "typeHandlerVersion": "1.5", + "autoUpgradeMinorVersion": true, + "settings": { + "fileUris": ["https://nsmpscript.blob.core.windows.net/custom-script/express/custom_script.py"], + "enableInternalDNSCheck": "false" + }, + "protectedSettings": { + "commandToExecute": "[concat('/var/python/bin/python custom_script.py ', parameters('adminPassword'))]" + } + } + }, { + "name": "[parameters('virtualMachineName')]", + "type": "Microsoft.Compute/virtualMachines", + "apiVersion": "2017-12-01", + "location": "[parameters('location')]", + "dependsOn": [ + "[concat('Microsoft.Network/networkInterfaces/', parameters('networkInterfaceName'))]", + "[concat('Microsoft.Network/publicIpAddresses/', parameters('virtualMachineName'), '-nsip')]", + "[concat('Microsoft.Storage/storageAccounts/', parameters('diagnosticsStorageAccountName'))]" + ], + "properties": { + "osProfile": { + "computerName": "[parameters('virtualMachineName')]", + "adminUsername": "[parameters('adminUsername')]", + "adminPassword": "[parameters('adminPassword')]", + "customData": "[base64(concat('config=express;username=', parameters('adminUsername') ))]" + }, + "hardwareProfile": { + "vmSize": "[parameters('virtualMachineSize')]" + }, + "storageProfile": { + "imageReference": { + "publisher": "citrix", + "offer": "netscalervpx-120", + "sku": "netscalervpxexpress", + "version": "latest" + }, + "osDisk": { + "createOption": "fromImage", + "managedDisk": { + "storageAccountType": "Standard_LRS" + } + }, + "dataDisks": [] + }, + "networkProfile": { + "networkInterfaces": [{ + "id": "[resourceId('Microsoft.Network/networkInterfaces', parameters('networkInterfaceName'))]" + } + ] + }, + "diagnosticsProfile": { + "bootDiagnostics": { + "enabled": true, + "storageUri": "[reference(resourceId('Microsoft.Storage/storageAccounts', parameters('diagnosticsStorageAccountName')), '2017-10-01').primaryEndpoints['blob']]" + } + } + }, + "plan": { + "name": "netscalervpxexpress", + "publisher": "citrix", + "product": "netscalervpx-120" + } + }, { + "name": "[parameters('diagnosticsStorageAccountName')]", + "type": "Microsoft.Storage/storageAccounts", + "apiVersion": "2017-10-01", + "kind": "Storage", + "location": "[parameters('location')]", + "sku": { + "name": "[parameters('diagnosticsStorageAccountType')]" + }, + "properties": {} + }, { + "name": "[parameters('virtualNetworkName')]", + "type": "Microsoft.Network/virtualNetworks", + "apiVersion": "2017-10-01", + "location": "[parameters('location')]", + "properties": { + "addressSpace": { + "addressPrefixes": [ + "[parameters('addressPrefix')]" + ] + }, + "subnets": [{ + "name": "[parameters('subnetName')]", + "properties": { + "addressPrefix": "[parameters('subnetPrefix')]" + } + } + ] + }, + "condition": "[equals(parameters('vnetNewOrExisting'),'new')]" + }, { + "name": "[parameters('networkInterfaceName')]", + "type": "Microsoft.Network/networkInterfaces", + "apiVersion": "2017-10-01", + "location": "[parameters('location')]", + "dependsOn": [ + "[concat('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]", + "[concat('Microsoft.Network/publicIpAddresses/', parameters('virtualMachineName'), '-vip')]", + "[concat('Microsoft.Network/publicIpAddresses/', parameters('virtualMachineName'), '-nsip')]", + "[concat('Microsoft.Network/networkSecurityGroups/', parameters('networkSecurityGroupName'))]" + ], + "properties": { + "ipConfigurations": [{ + "name": "nsip", + "properties": { + "primary": true, + "subnet": { + "id": "[variables('subnetRef')]" + }, + "privateIPAllocationMethod": "Dynamic", + "publicIpAddress": { + "id": "[resourceId('Microsoft.Network/publicIpAddresses', concat(parameters('virtualMachineName'), '-nsip'))]" + } + } + }, { + "name": "vip", + "properties": { + "subnet": { + "id": "[variables('subnetRef')]" + }, + "privateIPAllocationMethod": "Dynamic", + "publicIpAddress": { + "id": "[resourceId('Microsoft.Network/publicIpAddresses', concat(parameters('virtualMachineName'), '-vip'))]" + } + } + }, { + "name": "snip", + "properties": { + "subnet": { + "id": "[variables('subnetRef')]" + }, + "privateIPAllocationMethod": "Dynamic" + } + } + ], + "networkSecurityGroup": { + "id": "[resourceId('Microsoft.Network/networkSecurityGroups', parameters('networkSecurityGroupName'))]" + } + } + }, { + "name": "[concat(parameters('virtualMachineName'), '-vip')]", + "type": "Microsoft.Network/publicIpAddresses", + "apiVersion": "2017-10-01", + "location": "[parameters('location')]", + "properties": { + "publicIpAllocationMethod": "Dynamic" + }, + "sku": { + "name": "Basic" + } + }, { + "name": "[concat(parameters('virtualMachineName'), '-nsip')]", + "type": "Microsoft.Network/publicIpAddresses", + "apiVersion": "2017-10-01", + "location": "[parameters('location')]", + "properties": { + "publicIpAllocationMethod": "Dynamic" + }, + "sku": { + "name": "Basic" + } + }, { + "name": "[parameters('networkSecurityGroupName')]", + "type": "Microsoft.Network/networkSecurityGroups", + "apiVersion": "2017-10-01", + "location": "[parameters('location')]", + "properties": { + "securityRules": [{ + "name": "ssh-rule", + "properties": { + "description": "Allow remote SSH", + "priority": 1000, + "protocol": "TCP", + "access": "Allow", + "direction": "Inbound", + "sourceAddressPrefix": "Internet", + "sourcePortRange": "*", + "destinationAddressPrefix": "*", + "destinationPortRange": "22" + } + }, { + "name": "web-rule", + "properties": { + "description": "Allow Secure WEB", + "priority": 1001, + "protocol": "Tcp", + "access": "Allow", + "direction": "Inbound", + "sourceAddressPrefix": "Internet", + "sourcePortRange": "*", + "destinationAddressPrefix": "*", + "destinationPortRange": "443" + } + } + ] + } + } + ], + "outputs": { + "adminUsername": { + "type": "string", + "value": "[parameters('adminUsername')]" + } + } +}