You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 12 Current »

In the Delft-FEWS Basebuild distribution, there is a powershell script called setEnvFromJsonBase64.ps1 that can be used to install a FSS as a service on an Azure Virtual Machine using a custom script extension (CSE). The fssLauncher will be started as a service using the NT AUTHORITY\Network Service account.

# Call the setEnvFromJsonBase64.ps1  script in Azure Custom Script Extension for Virtual Machine Scale Set
"variables": {
       "env": {
           "FEWS_FSS_HOME_DIR": "c:/fews/fss",
           "FEWS_FSS_INDEX_1_DATABASE_URL": "jdbc:postgresql://dummy_hostname:5432/dummy_databasename",
           "FEWS_FSS_INDEX_1_DATABASE_USER": "dummy_username",
           "FEWS_FSS_INDEX_1_DATABASE_ENCRYPTED_PASSWORD": "dummy_encrypted_password",
           "FEWS_FSS_INDEX_1_CLIENT_CONFIG_FILE_NAME": "fss_clientConfig.xml",
           "FEWS_FSS_INDEX_1_GROUP": "windows"
       }
    },
"commandToExecute": "[concat('powershell -ExecutionPolicy UnRestricted ', 
     'Start-BitsTransfer -Source "https://mystorage.blob.core.windows.net/builds/fews-stable-201802-87056-bin.zip" -Destination "c:\bin.zip";',
   'Expand-Archive "c:\bin.zip" -DestinationPath "c:\fews\bin";',
    'Remove-Item -Path "c:\bin.zip";',
   'c:\fews\bin\windows\setEnvFromJsonBase64.ps1 ' base64(string(variables('env'))), ';',
    'c:\fews\bin\windows\fssLauncherRegisterService.bat;',
    'c:\fews\bin\windows\fssLauncherStartService.bat]"


The following is a complete ARM template that is an example on how to deploy a VM using an arm template that installs the FSS Software using a Custom Script Extension.

azuredeploy.json
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "NamingPrefix": {
      "type": "string",
      "minLength": 3,
      "maxLength": 16,
      "defaultValue": "DEVWINFSS",
      "metadata": {
        "description": "VM Naming Prefix"
      }
    },
    "NamingPostfix": {
      "type": "string",
      "defaultValue": "01",
      "maxLength": 2,
      "metadata": {
        "description": "VM Naming Postfix"
      }
    },
    "LocalAdminUser": {
      "type": "string",
      "defaultValue": "XXX",
      "metadata": {
        "description": "Username for the local admin user"
      }
    },
    "LocalAdminPassword": {
      "type": "securestring",
      "defaultValue": "XXX",
      "metadata": {
        "description": "Password for the local admin user"
      }
    },
    "VMSize": {
      "type": "string",
      "allowedValues": [
        "Standard_D4s_v5",
        "Standard_B2s",
        "Standard_B2ms",
        "Standard_B4ms",
        "Standard_B8ms",
        "Standard_D2s_v3",
        "Standard_D4s_v3",
        "Standard_D8s_v3"
      ],
      "defaultValue": "Standard_B2s",
      "metadata": {
        "description": "VM Size SKU."
      }
    },
    "VnetResourceID": {
      "type": "string",
      "defaultValue": "fewsmc00-vnet",
      "metadata": {
        "description": "Resource ID of the Vnet that you would like the VM's NIC to be placed in"
      }
    },
    "SubNetName": {
      "type": "string",
      "defaultValue": "PrivateSubnet",
      "metadata": {
        "description": "the name of the subnet that this VM will placed in"
      }
    },
    "OSVersion": {
      "type": "string",
      "defaultValue": "2019-Datacenter-smalldisk",
      "allowedValues": [
        "2019-Datacenter",
        "2019-Datacenter-smalldisk"
      ],
      "metadata": {
        "description": "The Windows version for the VM. This will pick a fully patched image of this given Windows version. Using the small disk allow creating a c: drive from 32GBytes and up."
      }
    },
    "DiskSizeGB": {
      "type": "string",
      "defaultValue": "32",
      "metadata": {
        "description": "The size of the OS Disk."
      }
    },
    "FewsBaseBuildUrl": {
      "type": "string",
      "defaultValue": "https://myblobstorage.blob.core.windows.net/delft-fews-base-builds/fews-development-202302-121196-bin.zip",
      "metadata": {
        "description": "Basbuild distribution URL"
      }
    },
    "DatabaseUrl": {
      "type": "string",
      "defaultValue": "XXX",
      "metadata": {
        "description": "Database URL. Use a database URL with credentials encoded. The URL can be stored in Azure Keyvault."
      }
    },
    "FssClientConfig": {
      "type": "string",
      "defaultValue": "fss_clientConfig.xml",
      "metadata": {
        "description": "client config to use on this Forecasting Shell Server"
      }
    },
    "ResourceTags": {
      "type": "object",
      "defaultValue": {
        "fssgroup": "windows_scalable"
      }
    },
    "FssGroup": {
      "type": "string",
      "defaultValue": "windows_scalable",
      "metadata": {
        "description": "Group this FSS is part of."
      }
    }
  },
  "variables": {
    "Location": "[resourceGroup().location]",
    "SubnetRef": "[resourceId('Microsoft.Network/virtualNetworks/subnets', parameters('VnetResourceID'), parameters('SubNetName'))]",
    "VMName": "[concat(parameters('NamingPrefix'),parameters('NamingPostfix'))]",
    "NicNamePrivate": "[concat(variables('VMName'), '-nic')]",
    "NicPrivateResource": "[resourceId('Microsoft.Network/networkInterfaces', variables('NicNamePrivate'))]",
    "OSDiskName": "[concat(variables('VMName'), '-osdisk')]",
    "env": {
           "FEWS_FSS_HOME_DIR": "c:/fews/fss",
           "FEWS_FSS_INDEX_1_DATABASE_URL": "[parameters('DatabaseUrl')]",
           "FEWS_FSS_INDEX_1_CLIENT_CONFIG_FILE_NAME": "[parameters('FssClientConfig')]",
           "FEWS_FSS_INDEX_1_GROUP": "[parameters('FssGroup')]"
           },
    "installScript": "Start-BitsTransfer -Source \"__BASEBUILD_DISTRIBUTION_URL__\" -Destination \"c:\\bin.zip\"\nExpand-Archive \"c:\\bin.zip\" -DestinationPath \"c:\\fews\\bin\";\nRemove-Item -Path \"c:\\bin.zip\";\nc:\\fews\\bin\\windows\\setEnvFromJsonBase64.ps1 \"__BASE64_ENV_VARIABLES__\";\nc:\\fews\\bin\\windows\\fssLauncherRegisterService.bat\nc:\\fews\\bin\\windows\\fssLauncherStartService.bat\n$driveLetter = \"C\"\n$size = (Get-PartitionSupportedSize -DriveLetter $driveLetter)\nResize-Partition -DriveLetter $driveLetter -Size $size.SizeMax\n",
    "installData": "[replace(replace(variables('installScript'),'__BASE64_ENV_VARIABLES__',base64(string(variables('env')))),'__BASEBUILD_DISTRIBUTION_URL__',parameters('FewsBaseBuildUrl'))]"
  },
  "resources": [
    {
      "name": "[variables('NicNamePrivate')]",
      "apiVersion": "2018-08-01",
      "type": "Microsoft.Network/networkInterfaces",
      "location": "[variables('Location')]",
      "dependsOn": [],
      "properties": {
          "ipConfigurations": [
              {
                  "name": "ipconfig1",
                  "properties": {
                      "privateIPAllocationMethod": "Dynamic",
                      "subnet": {
                          "id": "[variables('SubnetRef')]"
                      }
                  }
              }
          ]
      }
    },
    {
      "name": "[variables('VMName')]",
      "type": "Microsoft.Compute/virtualMachines",
      "apiVersion": "2019-03-01",
      "location": "[variables('Location')]",
      "tags": "[parameters('ResourceTags')]",
      "dependsOn": [
        "[variables('NicPrivateResource')]"
      ],
      "properties": {
        "hardwareProfile": {
          "vmSize": "[parameters('VMSize')]"
        },
        "osProfile": {
          "computerName": "[variables('VMName')]",
          "adminUsername": "[parameters('LocalAdminUser')]",
          "adminPassword": "[parameters('LocalAdminPassword')]",
          "customData": "[base64(variables('installData'))]"
        },
        "storageProfile": {
          "imageReference": {
            "publisher": "MicrosoftWindowsServer",
            "offer": "WindowsServer",
            "sku": "[parameters('OSVersion')]",
            "version": "latest"
          },
          "osDisk": {
            "name": "[variables('OSDiskName')]",
            "caching": "ReadWrite",
            "createOption": "FromImage",
            "diskSizeGB": "[parameters('DiskSizeGB')]",
            "managedDisk": {
              "storageAccountType": "Premium_LRS"
            }
          },
          "dataDisks": [
          ]
        },
         "networkProfile": {
          "networkInterfaces": [
            {
              "properties": {
                "primary": true
              },
              "id": "[variables('NicPrivateResource')]"
            }
          ]
        },
        "licenseType": "Windows_Server"
      }
    },
    {
      "type": "Microsoft.Compute/virtualMachines/extensions",
      "apiVersion": "2020-06-01",
      "name": "[concat(variables('VMName'), '/', 'DelftFewsForecastingShellServerInstaller')]",
      "location": "[resourceGroup().location]",
      "dependsOn": [
        "[concat('Microsoft.Compute/virtualMachines/', variables('VMName'))]"
      ],
      "properties": {
        "publisher": "Microsoft.Compute",
        "type": "CustomScriptExtension",
        "typeHandlerVersion": "1.9",
        "autoUpgradeMinorVersion": true,
        "protectedSettings": {
          "commandToExecute": "powershell -ExecutionPolicy Unrestricted < %SYSTEMDRIVE%\\AzureData\\CustomData.bin"
        }
      }
    }
  ]
}
 
  • No labels