Azure, Artifactory and Xray templates. Major ARM template refactoring

This commit is contained in:
danielmkn
2020-08-24 10:53:17 -07:00
parent 38e43bc99b
commit 83178d67bd
65 changed files with 11394 additions and 0 deletions

View File

@@ -0,0 +1,315 @@
{
"$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
"handler": "Microsoft.Azure.CreateUIDef",
"version": "0.1.2-preview",
"parameters": {
"basics": [],
"steps": [
{
"name": "vmCredential",
"label": "VM Credential",
"bladeTitle": "VM Credential",
"subLabel": {
"preValidation": "Provide VM credentials",
"postValidation": "Great - let's move on!"
},
"elements": [
{
"name": "virtualMachine",
"type": "Microsoft.Common.Section",
"elements": [
{
"name": "adminUsername",
"type": "Microsoft.Compute.UserNameTextBox",
"label": "Admin username",
"osPlatform": "Linux",
"constraints": {
"required": true,
"regex": "^[a-z0-9A-Z]{1,30}$",
"validationMessage": "Only alphanumeric characters are allowed, and the value must be 1-30 characters long."
},
"toolTip": "Provide admin username for the virtual machine"
},
{
"name": "adminPassword",
"type": "Microsoft.Compute.CredentialsCombo",
"label": {
"password": "Password",
"confirmPassword": "Confirm password"
},
"osPlatform": "Linux",
"constraints": {
"required": true,
"customPasswordRegex": "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[@$!%*#?&])[A-Za-z\\d@$!%*#?&]{12,}$",
"customValidationMessage": "The password must contain at least 12 characters, with at least 1 uppercase letter, 1 lowercase letter and 1 number."
},
"options": {
"hideConfirmation": false
},
"toolTip": {
"password": "Provide admin password for the virtual machine"
},
"visible": true
}
],
"visible": true
},
{
"name": "vnet",
"type": "Microsoft.Network.VirtualNetworkCombo",
"toolTip": "Provide Virtual Network information",
"label": {
"virtualNetwork": "Virtual Network",
"subnets": "Subnets"
},
"defaultValue": {
"name": "vmx-vnet",
"addressPrefixSize": "/16"
},
"constraints": {
"minAddressPrefixSize": "/24"
},
"subnets": {
"subnet1": {
"label": "Subnet",
"defaultValue": {
"name": "vmx-subnet",
"addressPrefixSize": "/24"
},
"constraints": {
"minAddressPrefixSize": "/29",
"minAddressCount": 8,
"requireContiguousAddresses": true
}
}
}
},
{
"name": "vmSku",
"type": "Microsoft.Compute.SizeSelector",
"label": "Virtual machine size",
"toolTip": "The size of the virtual machine for Xray",
"recommendedSizes": [
"Standard_D4s_v3"
],
"constraints": {
"allowedSizes": [
"Standard_A4_v2",
"Standard_A4",
"Standard_D4s_v3",
"Standard_D8s_v3",
"Standard_D16s_v3",
"Standard_D32s_v3",
"Standard_DS3_v2",
"Standard_D3_v2",
"Standard_DC4s"
]
},
"osPlatform": "Linux",
"count": 1
}
]
},
{
"name": "xrayConfig",
"label": "Xray settings",
"subLabel": {
"preValidation": "Configure Xray Deployment",
"postValidation": "Done!"
},
"bladeTitle": "Xray Settings",
"elements": [
{
"name": "xrayVersion",
"type": "Microsoft.Common.DropDown",
"label": "Xray-vm image version to deploy.",
"defaultValue": "3.6.2",
"toolTip": "Version of Xray to deploy",
"constraints": {
"allowedValues": [
{
"label": "3.6.2",
"value": "0.0.3"
}
],
"required": true
},
"visible": true
},
{
"name": "clusterName",
"type": "Microsoft.Common.TextBox",
"label": "Cluster name",
"toolTip": "Cluster name",
"defaultValue": "",
"constraints": {
"required": true,
"regex": "^[a-z0-9A-Z]{1,30}$",
"validationMessage": "Only alphanumeric characters are allowed, and the value must be 1-30 characters long."
}
},
{
"name": "masterKey",
"type": "Microsoft.Common.PasswordBox",
"label": {
"password": "Xray master Key",
"confirmPassword": "Confirm master Key"
},
"toolTip": "Master key for Xray instance. Generate master.key using command '$openssl rand -hex 16'",
"constraints": {
"required": true,
"regex": "^[a-z0-9A-Z]{1,32}$",
"validationMessage": "Only alphanumeric characters are allowed, and the value must be 1-32 characters long."
},
"options": {
"hideConfirmation": true
}
},
{
"name": "joinKey",
"type": "Microsoft.Common.PasswordBox",
"label": {
"password": "Artifactory join Key",
"confirmPassword": "Confirm join Key"
},
"toolTip": "Join key from Artifactory cluster. You can copy Join key from the Artifactory UI, Security -> Settings -> Connection details",
"constraints": {
"required": true,
"regex": "^[a-z0-9A-Z]{1,32}$",
"validationMessage": "Only alphanumeric characters are allowed, and the value must be 1-32 characters long."
},
"options": {
"hideConfirmation": true
}
},
{
"name": "artifactoryURL",
"type": "Microsoft.Common.TextBox",
"label": "Provide artifactory URL to connect Xray instance",
"defaultValue": "https://myorgartifactory.com",
"toolTip": "Provide Artifactory URL",
"constraints": {
"required": true,
"regex": "^(https?)://[^\\s/$.?#].[^\\s]*$",
"validationMessage": "URL is not valid"
}
}
]
},
{
"name": "databaseConfig",
"label": "Database Configuration",
"subLabel": {
"preValidation": "Configure the Database",
"postValidation": "Done"
},
"bladeTitle": "Database Credential",
"elements": [
{
"name": "infoMessage",
"type": "Microsoft.Common.InfoBox",
"visible": true,
"options": {
"icon": "Info",
"text": "You can deploy a new Postgresql server or use your existing Postgres server and database. Please make sure Postgresql instance is set up correctly before Xray deployment. Check README.md https://github.com/jfrog/JFrog-Cloud-Installers/blob/arm-xray/AzureResourceManager/Xray/README.md#postgresql-deployment. You can use Postgresql template from here https://github.com/jfrog/JFrog-Cloud-Installers/tree/arm-xray/AzureResourceManager/Postgresql"
}
},
{
"name": "db_type",
"type": "Microsoft.Common.DropDown",
"label": "Database options",
"toolTip": "Deploy a new DB instance or use an existing DB",
"constraints": {
"required": true,
"allowedValues": [
{
"label": "Deploy a new Postgresql instance",
"value": "Postgresql_deploy.json"
},
{
"label": "Use existing Postgresql instance",
"value": "Postgresql_existing.json"
}
]
},
"visible": true
},
{
"name": "db_server",
"type": "Microsoft.Common.TextBox",
"label": "Database server name. Skip if a new deployment is selected",
"toolTip": "Database server name",
"constraints": {
"required": false,
"regex": "^[a-z0-9A-Z]{1,15}$",
"validationMessage": "Only alphanumeric characters are allowed, and the value must be 1-15 characters long."
}
},
{
"name": "manual_db_url",
"type": "Microsoft.Common.TextBox",
"label": "Database connection string. Skip if a new deployment is selected",
"toolTip": "Jdbc connection string for MSSQL or Postgresql",
"constraints": {
"required": false,
"regex": "..*",
"validationMessage": "DB connection string is not valid"
}
},
{
"name": "db_user",
"type": "Microsoft.Compute.UserNameTextBox",
"label": "User name",
"toolTip": "Admin username for the database",
"osPlatform": "Linux",
"constraints": {
"required": true,
"regex": "^[a-z0-9A-Z]{1,30}$",
"validationMessage": "Only alphanumeric characters are allowed, and the value must be 1-30 characters long."
}
},
{
"name": "db_password",
"type": "Microsoft.Common.PasswordBox",
"label": {
"password": "Password",
"confirmPassword": "Confirm password"
},
"toolTip": "Admin password for the database",
"constraints": {
"required": true,
"regex": "^(?=.*[A-Za-z])(?=.*\\d)(?=.*[@$!%*#?&])[A-Za-z\\d@$!%*#?&]{12,}$",
"validationMessage": "The password must contain at least 12 characters, with at least 1 uppercase letter, 1 lowercase letter and 1 number."
},
"options": {
"hideConfirmation": false
},
"visible": true
}
]
}
],
"outputs": {
"location": "[location()]",
"adminUsername": "[steps('vmCredential').virtualMachine.adminUsername]",
"adminPassword": "[steps('vmCredential').virtualMachine.adminPassword.password]",
"virtualNetworkName": "[steps('vmCredential').vnet.name]",
"virtualNetworkNewOrExisting": "[steps('vmCredential').vnet.newOrExisting]",
"virtualNetworkAddressPrefix": "[first(steps('vmCredential').vnet.addressPrefixes)]",
"virtualNetworkResourceGroup": "[steps('vmCredential').vnet.resourceGroup]",
"virtualMachineSize": "[steps('vmCredential').vmSku]",
"subnetName": "[steps('vmCredential').vnet.subnets.subnet1.name]",
"subnetAddressPrefix": "[steps('vmCredential').vnet.subnets.subnet1.addressPrefix]",
"xrayVersion": "[steps('xrayConfig').xrayVersion]",
"clusterName": "[steps('xrayConfig').clusterName]",
"artifactoryURL": "[steps('xrayConfig').artifactoryURL]",
"masterKey": "[steps('xrayConfig').masterKey]",
"joinKey": "[steps('xrayConfig').joinKey]",
"db_type": "[steps('databaseConfig').db_type]",
"db_server": "[steps('databaseConfig').db_server]",
"manual_db_url": "[steps('databaseConfig').manual_db_url]",
"db_user": "[steps('databaseConfig').db_user]",
"db_password": "[steps('databaseConfig').db_password]"
}
}
}

View File

@@ -0,0 +1,400 @@
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "Location for the resources."
}
},
"clusterName": {
"type": "string",
"defaultValue": "xray",
"maxLength": 61,
"metadata": {
"description": "String used as a base for naming resources. Must be 3-61 characters in length and globally unique across Azure. A hash is prepended to this string for some resources, and resource-specific information is appended."
}
},
"xrayVersion": {
"type": "string",
"defaultValue": "0.0.3",
"allowedValues": [
"0.0.3"
],
"metadata": {
"description": "Xray-vm image version to deploy."
}
},
"artifactoryURL": {
"type": "string",
"metadata": {
"description": "Artifactory URL"
}
},
"masterKey": {
"type": "securestring",
"maxLength": 64,
"metadata": {
"description": "Master key for Artifactory cluster. Generate master.key using command '$openssl rand -hex 16'"
}
},
"joinKey": {
"type": "securestring",
"maxLength": 64,
"metadata": {
"description": "Join key for Artifactory cluster. Generate join.key using command '$openssl rand -hex 16'"
}
},
"adminUsername": {
"type": "string",
"defaultValue": "testadmin",
"metadata": {
"description": "Username for the Virtual Machine."
}
},
"adminPassword": {
"type": "securestring",
"metadata": {
"description": "Password for the Virtual Machine."
}
},
"virtualNetworkName": {
"type": "string",
"metadata": {
"description": "New or Existing VNet Name"
}
},
"virtualNetworkNewOrExisting": {
"type": "string",
"metadata": {
"description": "Boolean indicating whether the VNet is new or existing"
}
},
"virtualNetworkAddressPrefix": {
"type": "string",
"metadata": {
"description": "VNet address prefix"
}
},
"virtualNetworkResourceGroup": {
"type": "string",
"metadata": {
"description": "Resource group of the VNet"
}
},
"virtualMachineSize": {
"type": "string",
"metadata": {
"description": "The size of the VM"
}
},
"subnetName": {
"type": "string",
"metadata": {
"description": "New or Existing subnet Name"
}
},
"subnetAddressPrefix": {
"type": "string",
"metadata": {
"description": "Subnet address prefix"
}
},
"db_type": {
"type": "string",
"defaultValue": "Postgresql_deploy.json",
"allowedValues": [
"Postgresql_deploy.json",
"Postgresql_existing.json"
],
"metadata": {
"description": "Deploy new Postgresql, MSSQL or use existing DB"
}
},
"manual_db_url": {
"type": "string",
"metadata": {
"description": "DB server URL, if existing DB server is used instead of a new deployment (jdbc:sqlserver://.. or jdbc:postgresql://..)"
}
},
"db_server": {
"type": "string",
"metadata": {
"description": "DB server name, if pre-existing DB is used"
}
},
"db_user": {
"type": "string",
"minLength": 1,
"metadata": {
"description": "Database Admin user name"
}
},
"db_password": {
"type": "securestring",
"minLength": 1,
"metadata": {
"description": "Database Admin password"
}
},
"databases": {
"type": "object",
"defaultValue": {
"properties": [
{
"name": "xray",
"charset": "UTF8",
"collation": "English_United States.1252"
}
]
}
},
"_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": "[deployment().properties.templateLink.uri]"
},
"_artifactsLocationSasToken": {
"type": "securestring",
"metadata": {
"description": "The sasToken required to access _artifactsLocation. When the template is deployed using the accompanying scripts, a sasToken will be automatically generated."
},
"defaultValue": ""
}
},
"variables": {
"namingInfix": "[toLower(substring(concat(parameters('clusterName'), uniqueString(resourceGroup().id)), 0, 9))]",
"storageAccountName": "[concat(uniquestring(resourceGroup().id), 'sawinvm')]",
"publicIPAddressName": "[concat(uniqueString(resourceGroup().id),'IP')]",
"clusterName": "[parameters('clusterName')]",
"nicName": "[concat(variables('clusterName'),'Nic')]",
"ipConfigName": "[concat(variables('namingInfix'), 'ipconfig')]",
"vnetId": {
"new": "[resourceId('Microsoft.Network/virtualNetworks',parameters('virtualNetworkName'))]",
"existing": "[resourceId(parameters('virtualNetworkResourceGroup'),'Microsoft.Network/virtualNetworks',parameters('virtualNetworkName'))]"
},
"subnetId": "[concat(variables('vnetId')[parameters('virtualNetworkNewOrExisting')],'/subnets/',parameters('subnetName'))]",
"publicIPAddressType": "Dynamic",
"db_server": "[parameters('db_server')]",
"db_user": "[concat(parameters('db_user'), '@', parameters('db_server'))]",
"db_password": "[parameters('db_password')]",
"db_location": "[parameters('location')]",
"db_name": "[parameters('databases').properties[0].name]",
"masterKey": "[parameters('masterKey')]",
"joinKey": "[parameters('joinKey')]",
"osType": {
"publisher": "jfrog",
"offer": "x-ray-vm",
"sku": "x-ray-vm",
"version": "[parameters('xrayVersion')]"
},
"imageReference": "[variables('osType')]",
"dbTemplate": "[parameters('db_type')]",
"dbTemplateLocation": "[uri(parameters('_artifactsLocation'), concat('nested/', variables('dbTemplate'), parameters('_artifactsLocationSasToken')))]",
"artifactoryURL": "[parameters('artifactoryURL')]"
},
"resources": [
{
"apiVersion": "2019-05-01",
"name": "pid-04c1c376-5d4b-4771-9a7f-054f5910dcef",
"type": "Microsoft.Resources/deployments",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": []
}
}
},
{
"condition": "[equals(parameters('virtualNetworkNewOrExisting'),'new')]",
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2020-05-01",
"name": "[parameters('virtualNetworkName')]",
"location": "[parameters('location')]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('virtualNetworkAddressPrefix')]"
]
},
"subnets": [
{
"name": "[parameters('subnetName')]",
"properties": {
"addressPrefix": "[parameters('subnetAddressPrefix')]"
}
}
]
}
},
{
"type": "Microsoft.Network/publicIPAddresses",
"name": "[variables('publicIPAddressName')]",
"apiVersion": "2020-05-01",
"location": "[parameters('location')]",
"properties": {
"publicIPAllocationMethod": "[variables('publicIPAddressType')]"
}
},
{
"type": "Microsoft.Network/networkInterfaces",
"name": "[variables('nicName')]",
"apiVersion": "2020-05-01",
"location": "[parameters('location')]",
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"privateIPAllocationMethod": "Dynamic",
"publicIPAddress": {
"id": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]"
},
"subnet": {
"id": "[variables('subnetId')]"
}
}
}
],
"enableIPForwarding": true
},
"dependsOn": [
"[resourceId('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]",
"[resourceId('Microsoft.Network/virtualNetworks/', parameters('virtualNetworkName'))]"
]
},
{
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2018-11-01",
"name": "[variables('storageAccountName')]",
"location": "[parameters('location')]",
"sku": {
"name": "Standard_LRS"
},
"kind": "Storage",
"properties": {}
},
{
"type": "Microsoft.Resources/deployments",
"name": "deploySQLDB",
"apiVersion": "2019-09-01",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[variables('dbTemplateLocation')]",
"contentVersion": "1.0.0.0"
},
"parameters": {
"db_user": {
"value": "[parameters('db_user')]"
},
"db_password": {
"value": "[variables('db_password')]"
},
"db_server": {
"value": "[variables('db_server')]"
},
"db_location": {
"value": "[variables('db_location')]"
},
"databases": {
"value": "[parameters('databases')]"
},
"manual_db_url": {
"value": "[parameters('manual_db_url')]"
}
}
}
},
{
"type": "Microsoft.Compute/virtualMachineScaleSets",
"name": "[concat(variables('namingInfix'), 'xrayScaleset')]",
"location": "[parameters('location')]",
"apiVersion": "2018-10-01",
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
"[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
],
"plan": {
"name": "x-ray-vm",
"publisher": "jfrog",
"product": "x-ray-vm"
},
"sku": {
"name": "[parameters('virtualMachineSize')]",
"tier": "Standard",
"capacity": 1
},
"properties": {
"singlePlacementGroup": true,
"overprovision": false,
"upgradePolicy": {
"mode": "Manual"
},
"virtualMachineProfile": {
"storageProfile": {
"osDisk": {
"caching": "ReadWrite",
"diskSizeGB": 250,
"createOption": "FromImage"
},
"imageReference": "[variables('imageReference')]"
},
"osProfile": {
"computerNamePrefix": "[variables('namingInfix')]",
"adminUsername": "[parameters('adminUsername')]",
"adminPassword": "[parameters('adminPassword')]",
"customData": "[base64(concat('#INSTALL SCRIPT INPUTS\nXRAY_VERSION=', parameters('xrayVersion'),'\nARTIFACTORY_URL=',variables('artifactoryURL'),'\nDB_SERVER=',variables('db_server'),'\nDB_NAME=',variables('db_name'),'\nDB_ADMIN_USER=',variables('db_user'),'\nDB_ADMIN_PASSWD=',variables('db_password'),'\nMASTER_KEY=',variables('masterKey'),'\nJOIN_KEY=',variables('joinKey'),'\n'))]"
},
"networkProfile": {
"networkInterfaceConfigurations": [
{
"name": "[variables('nicName')]",
"properties": {
"primary": true,
"ipConfigurations": [
{
"name": "[concat(variables('ipConfigName'),'1')]",
"properties": {
"subnet": {
"id": "[variables('subnetId')]"
}
}
}
]
}
}
]
},
"extensionProfile": {
"extensions": [
{
"name": "extension1",
"properties": {
"publisher": "Microsoft.Azure.Extensions",
"type": "CustomScript",
"typeHandlerVersion": "2.0",
"autoUpgradeMinorVersion": false,
"settings": {
"fileUris": [
"[uri(parameters('_artifactsLocation'), concat('scripts/install_xray.sh', parameters('_artifactsLocationSasToken')))]"
]
},
"protectedSettings": {
"commandToExecute": "./install_xray.sh >> /opt/installation_log1.txt"
}
}
}
]
}
}
}
}
]
}

View File

@@ -0,0 +1,161 @@
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"db_user": {
"type": "string",
"defaultValue": "xray",
"minLength": 1
},
"db_password": {
"type": "securestring"
},
"db_server": {
"type": "string",
"defaultValue": "xraypostgressrv",
"minLength": 1
},
"db_location": {
"type": "string"
},
"skuCapacity": {
"type": "int",
"defaultValue": 2
},
"skuFamily": {
"type": "string",
"defaultValue": "Gen5"
},
"skuName": {
"type": "string",
"defaultValue": "GP_Gen5_2"
},
"skuSizeMB": {
"type": "int",
"defaultValue": 5120
},
"skuTier": {
"type": "string",
"defaultValue": "GeneralPurpose"
},
"version": {
"type": "string",
"defaultValue": "9.6"
},
"backupRetentionDays": {
"type": "int",
"defaultValue": 7
},
"geoRedundantBackup": {
"type": "string",
"defaultValue": "Disabled"
},
"databases": {
"type": "object"
},
"sslEnforcement": {
"type": "string",
"allowedValues": [
"Enabled",
"Disabled"
],
"defaultValue": "Disabled",
"metadata": {
"description": "SSL Enforcement"
}
},
"publicNetworkAccess": {
"type": "string",
"allowedValues": [
"Enabled",
"Disabled"
],
"defaultValue": "Enabled",
"metadata": {
"description": "Public Network Access"
}
},
"db_edition": {
"type": "string",
"defaultValue": "Basic",
"allowedValues": [
"Basic",
"Standard",
"Premium"
]
},
"manual_db_url": {
"type": "string"
}
},
"variables": {
},
"resources": [
{
"type": "Microsoft.DBforPostgreSQL/servers",
"apiVersion": "2017-12-01",
"location": "[parameters('db_location')]",
"name": "[parameters('db_server')]",
"properties": {
"version": "[parameters('version')]",
"administratorLogin": "[parameters('db_user')]",
"administratorLoginPassword": "[parameters('db_password')]",
"publicNetworkAccess": "[parameters('publicNetworkAccess')]",
"sslEnforcement": "[parameters('sslEnforcement')]",
"storageProfile": {
"storageMB": "[parameters('skuSizeMB')]",
"backupRetentionDays": "[parameters('backupRetentionDays')]",
"geoRedundantBackup": "[parameters('geoRedundantBackup')]"
}
},
"sku": {
"name": "[parameters('skuName')]",
"tier": "[parameters('skuTier')]",
"capacity": "[parameters('skuCapacity')]",
"size": "[parameters('skuSizeMB')]",
"family": "[parameters('skuFamily')]"
},
"resources": [
{
"name": "[uniqueString(parameters('db_server'), 'AllowAllWindowsAzureIps' )]",
"type": "firewallRules",
"apiVersion": "2017-12-01",
"location": "[parameters('db_location')]",
"dependsOn": [
"[resourceId('Microsoft.DBforPostgreSQL/servers', parameters('db_server'))]"
],
"properties": {
"startIpAddress": "0.0.0.0",
"endIpAddress": "0.0.0.0"
}
},
{
"type": "Microsoft.DBforPostgreSQL/servers/databases",
"apiversion": "2017-12-01",
"name": "[concat(parameters('db_server'), '/', parameters('databases').properties[0].name)]",
"dependsOn": [
"[resourceId('Microsoft.DBforPostgreSQL/servers', parameters('db_server'))]"
],
"properties": {
"charset": "[parameters('databases').properties[0].charset]",
"collation": "[parameters('databases').properties[0].collation]"
}
}
]
}
],
"outputs": {
"dbServerName": {
"type": "string",
"value": "[parameters('db_server')]"
},
"db_edition": {
"type": "string",
"value": "[parameters('db_edition')]"
},
"manual_db_url": {
"type": "string",
"value": "[parameters('manual_db_url')]"
}
}
}

View File

@@ -0,0 +1,54 @@
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"db_user": {
"type": "string",
"defaultValue": "artifactory",
"minLength": 1
},
"db_password": {
"type": "securestring"
},
"db_server": {
"type": "string",
"defaultValue": "xraypostgressrv",
"minLength": 1
},
"db_location": {
"type": "string"
},
"databases": {
"type": "object"
},
"manual_db_url": {
"type": "string"
}
},
"variables": {
},
"resources": [
],
"outputs": {
"jdbcConnString": {
"type": "string",
"value": "[parameters('manual_db_url')]"
},
"db_user": {
"type": "string",
"value": "[parameters('db_user')]"
},
"db_server": {
"type": "string",
"value": "[parameters('db_server')]"
},
"db_location": {
"type": "string",
"value": "[parameters('db_location')]"
},
"databases": {
"type": "object",
"value": "[parameters('databases')]"
}
}
}

View File

@@ -0,0 +1,35 @@
#!/bin/bash
DB_NAME=$(cat /var/lib/cloud/instance/user-data.txt | grep "^DB_NAME=" | sed "s/DB_NAME=//")
DB_USER=$(cat /var/lib/cloud/instance/user-data.txt | grep "^DB_ADMIN_USER=" | sed "s/DB_ADMIN_USER=//")
DB_PASSWORD=$(cat /var/lib/cloud/instance/user-data.txt | grep "^DB_ADMIN_PASSWD=" | sed "s/DB_ADMIN_PASSWD=//")
DB_SERVER=$(cat /var/lib/cloud/instance/user-data.txt | grep "^DB_SERVER=" | sed "s/DB_SERVER=//")
MASTER_KEY=$(cat /var/lib/cloud/instance/user-data.txt | grep "^MASTER_KEY=" | sed "s/MASTER_KEY=//")
JOIN_KEY=$(cat /var/lib/cloud/instance/user-data.txt | grep "^JOIN_KEY=" | sed "s/JOIN_KEY=//")
ARTIFACTORY_URL=$(cat /var/lib/cloud/instance/user-data.txt | grep "^ARTIFACTORY_URL=" | sed "s/ARTIFACTORY_URL=//")
export DEBIAN_FRONTEND=noninteractive
# Create master.key on each node
sudo mkdir -p /opt/jfrog/xray/var/etc/security/
cat <<EOF >/opt/jfrog/xray/var/etc/security/master.key
${MASTER_KEY}
EOF
# Xray should have the same join key as the Artifactory instance
# Both application should be deployed in the same Virtual Networks
HOSTNAME=$(hostname -i)
sed -i -e "s/ip:..*/ip: ${HOSTNAME}/" /var/opt/jfrog/xray/etc/system.yaml
sed -i -e "s#jfrogUrl:..*#jfrogUrl: \"${ARTIFACTORY_URL}\"#" /var/opt/jfrog/xray/etc/system.yaml
sed -i -e "s/joinKey:..*/joinKey: ${JOIN_KEY}/" /var/opt/jfrog/xray/etc/system.yaml
# DB configuration
sed -i -e "s/url: postgres:..*/url: \"postgres:\/\/${DB_SERVER}.postgres.database.azure.com:5432\/${DB_NAME}?sslmode=disable\"/" /var/opt/jfrog/xray/etc/system.yaml
sed -i -e "s/username:..*/username: \"${DB_USER}\"/" /var/opt/jfrog/xray/etc/system.yaml
sed -i -e "s/password:..*/password: \"${DB_PASSWORD}\"/" /var/opt/jfrog/xray/etc/system.yaml
chown xray:xray -R /opt/jfrog/xray/var/etc/security/* && chown xray:xray -R /opt/jfrog/xray/var/etc/security/
# Enable and start Xray service
sudo systemctl enable xray.service
sudo systemctl start xray.service
sudo systemctl restart xray.service