mirror of
https://github.com/ZwareBear/JFrog-Cloud-Installers.git
synced 2026-01-21 04:06:55 -06:00
Azure, Artifactory and Xray templates. Major ARM template refactoring
This commit is contained in:
315
AzureResourceManager/Xray/MP_submission/createUiDefinition.json
Normal file
315
AzureResourceManager/Xray/MP_submission/createUiDefinition.json
Normal 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]"
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
AzureResourceManager/Xray/MP_submission/jfrog-xray-3-6-2-0.zip
Normal file
BIN
AzureResourceManager/Xray/MP_submission/jfrog-xray-3-6-2-0.zip
Normal file
Binary file not shown.
BIN
AzureResourceManager/Xray/MP_submission/jfrog-xray-3-6-2-1.zip
Normal file
BIN
AzureResourceManager/Xray/MP_submission/jfrog-xray-3-6-2-1.zip
Normal file
Binary file not shown.
400
AzureResourceManager/Xray/MP_submission/mainTemplate.json
Normal file
400
AzureResourceManager/Xray/MP_submission/mainTemplate.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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')]"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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')]"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user