From 4cec6f8daaeeb28c2517c8a50a1fa66026449171 Mon Sep 17 00:00:00 2001 From: Daniel Miakotkin <55418063+danielmkn@users.noreply.github.com> Date: Tue, 22 Jun 2021 09:26:37 -0700 Subject: [PATCH] Arm Template, Xray. Modify RabbitMQ HA functionality (#133) * Xray, rabbitMQ HA cluster modifications --- .../Artifactory/azuredeploy.json | 2 +- .../MP_submission/createUiDefinition.json | 73 ++++++++----------- .../Xray/azuredeploy_xray_vmss.json | 18 ++--- .../Xray/scripts/install_xray.sh | 29 +++++++- 4 files changed, 65 insertions(+), 57 deletions(-) diff --git a/AzureResourceManager/Artifactory/azuredeploy.json b/AzureResourceManager/Artifactory/azuredeploy.json index 2c6082b..ff6d441 100644 --- a/AzureResourceManager/Artifactory/azuredeploy.json +++ b/AzureResourceManager/Artifactory/azuredeploy.json @@ -82,7 +82,7 @@ "defaultValue": "0.0.19", "allowedValues": [ "0.0.8", - "0.0.9", + "0.0.9", "0.0.10", "0.0.11", "0.0.12", diff --git a/AzureResourceManager/Xray/MP_submission/createUiDefinition.json b/AzureResourceManager/Xray/MP_submission/createUiDefinition.json index df4dfa2..f937de8 100644 --- a/AzureResourceManager/Xray/MP_submission/createUiDefinition.json +++ b/AzureResourceManager/Xray/MP_submission/createUiDefinition.json @@ -135,55 +135,43 @@ "label": "3.15.3", "value": "0.0.11" }, - { + { "label": "3.17.2", - "value": "0.0.13" - }, - { + "value": "0.0.13" + }, + { "label": "3.17.4", - "value": "0.0.14" - }, - { - "label": "3.18.0", - "value": "0.0.15" - }, - { - "label": "3.21.2", - "value": "0.0.17" - }, - { - "label": "3.22.1", - "value": "0.0.18" - }, - { - "label": "3.23.0", - "value": "0.0.20" - }, - { - "label": "3.24.2", - "value": "0.0.21" - }, - { - "label": "3.25.1", - "value": "0.0.22" - } + "value": "0.0.14" + }, + { + "label": "3.18.0", + "value": "0.0.15" + }, + { + "label": "3.21.2", + "value": "0.0.17" + }, + { + "label": "3.22.1", + "value": "0.0.18" + }, + { + "label": "3.23.0", + "value": "0.0.20" + }, + { + "label": "3.24.2", + "value": "0.0.21" + }, + { + "label": "3.25.1", + "value": "0.0.22" + } ], "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", @@ -337,7 +325,6 @@ "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]", diff --git a/AzureResourceManager/Xray/azuredeploy_xray_vmss.json b/AzureResourceManager/Xray/azuredeploy_xray_vmss.json index ff2501e..cbcb68f 100644 --- a/AzureResourceManager/Xray/azuredeploy_xray_vmss.json +++ b/AzureResourceManager/Xray/azuredeploy_xray_vmss.json @@ -23,14 +23,14 @@ "allowedValues": [ "0.0.10", "0.0.11", - "0.0.13", - "0.0.14", - "0.0.15", - "0.0.17", - "0.0.18", - "0.0.20", - "0.0.21", - "0.0.22" + "0.0.13", + "0.0.14", + "0.0.15", + "0.0.17", + "0.0.18", + "0.0.20", + "0.0.21", + "0.0.22" ], "metadata": { "description": "Xray-vm image version to deploy." @@ -347,7 +347,7 @@ "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'),'\nACTUAL_DB_ADMIN_USER=',variables('actual_db_user'),'\nDB_ADMIN_PASSWD=',variables('db_password'),'\nMASTER_KEY=',variables('masterKey'),'\nLOCATION=',parameters('location'),'\nJOIN_KEY=',variables('joinKey'),'\n'))]" + "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'),'\nACTUAL_DB_ADMIN_USER=',variables('actual_db_user'),'\nDB_ADMIN_PASSWD=',variables('db_password'),'\nMASTER_KEY=',variables('masterKey'),'\nLOCATION=',parameters('location'),'\nCLUSTER_NAME=',parameters('clusterName'),'\nJOIN_KEY=',variables('joinKey'),'\n'))]" }, "networkProfile": { "networkInterfaceConfigurations": [ diff --git a/AzureResourceManager/Xray/scripts/install_xray.sh b/AzureResourceManager/Xray/scripts/install_xray.sh index bee461f..6f0ef34 100644 --- a/AzureResourceManager/Xray/scripts/install_xray.sh +++ b/AzureResourceManager/Xray/scripts/install_xray.sh @@ -8,6 +8,7 @@ MASTER_KEY=$(cat /var/lib/cloud/instance/user-data.txt | grep "^MASTER_KEY=" | s JOIN_KEY=$(cat /var/lib/cloud/instance/user-data.txt | grep "^JOIN_KEY=" | sed "s/JOIN_KEY=//") LOCATION=$(cat /var/lib/cloud/instance/user-data.txt | grep "^LOCATION=" | sed "s/LOCATION=//") ARTIFACTORY_URL=$(cat /var/lib/cloud/instance/user-data.txt | grep "^ARTIFACTORY_URL=" | sed "s/ARTIFACTORY_URL=//") +CLUSTER_NAME=$(cat /var/lib/cloud/instance/user-data.txt | grep "^CLUSTER_NAME=" | sed "s/CLUSTER_NAME=//") export DEBIAN_FRONTEND=noninteractive @@ -15,6 +16,7 @@ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys CC86BB64 sudo add-apt-repository ppa:rmescandon/yq -y sudo apt update -y sudo apt install yq -y +sudo apt install nmap -y # Create master.key on each node sudo mkdir -p /opt/jfrog/xray/var/etc/security/ @@ -28,10 +30,7 @@ export PARTNER_ID=Partner/ACC-007221 export INTEGRATION_NAME=ARM_xray-template/1.0.0 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) - +# Verify if the app is deploying in GovCloud regex_location_gov="usgov.*" regex_location_dod="usdod.*" @@ -41,13 +40,35 @@ else DB_DOMAIN=azure.com fi +# Modify system.yaml file yq w -i /var/opt/jfrog/xray/etc/system.yaml shared.database.url postgres://${DB_SERVER}.postgres.database.${DB_DOMAIN}:5432/${DB_NAME}?sslmode=disable yq w -i /var/opt/jfrog/xray/etc/system.yaml shared.database.username ${DB_USER} yq w -i /var/opt/jfrog/xray/etc/system.yaml shared.database.actualUsername ${ACTUAL_DB_USER} yq w -i /var/opt/jfrog/xray/etc/system.yaml shared.database.password ${DB_PASSWORD} yq w -i /var/opt/jfrog/xray/etc/system.yaml shared.rabbitMq.password JFXR_RABBITMQ_COOKIE + +# RabbitMQ HA configuration for VMSS +HOSTNAME=$(hostname -s) +ACTIVE_NODE_NAME=$(echo "$HOSTNAME" | sed 's/......$/000000/') +printenv + +if [[ $HOSTNAME =~ 000000 ]]; +then + yq w -i /var/opt/jfrog/xray/etc/system.yaml shared.rabbitMq.erlangCookie.value JFXR_RABBITMQ_COOKIE +else + # Scan the subnet to verify if there are other Xray nodes + # Get the first Xray node name, modify to met RabbitMQ requirements, add into system.yaml + # Modify system.yaml to make a new RabbitMQ node able to connect to the cluster + ACTIVE_NODE_NAME=$(nmap -sn $(hostname -i)/24 | grep -i ${CLUSTER_NAME} | sort | awk 'NR==1{print $5}') + RABBITMQ_ACTIVE_NODE=$(cat /etc/hostname | sed 's/......$//g')$(echo $ACTIVE_NODE_NAME | cut -f1 -d"." | sed -e 's/\(^.*\)\(......$\)/\2/' | tr '[:lower:]' '[:upper:]') + yq w -i /var/opt/jfrog/xray/etc/system.yaml shared.rabbitMq.erlangCookie.value JFXR_RABBITMQ_COOKIE + yq w -i /var/opt/jfrog/xray/etc/system.yaml shared.rabbitMq.clean Y + yq w -i /var/opt/jfrog/xray/etc/system.yaml shared.rabbitMq.active.node.name ${RABBITMQ_ACTIVE_NODE} +fi +HOSTNAME=$(hostname -i) yq w -i /var/opt/jfrog/xray/etc/system.yaml shared.jfrogUrl ${ARTIFACTORY_URL} yq w -i /var/opt/jfrog/xray/etc/system.yaml shared.security.joinKey ${JOIN_KEY} +yq w -i /var/opt/jfrog/xray/etc/system.yaml shared.security.masterKeyFile /opt/jfrog/xray/var/etc/security/master.key yq w -i /var/opt/jfrog/xray/etc/system.yaml shared.node.ip ${HOSTNAME} chown xray:xray -R /opt/jfrog/xray/var/etc/security/* && chown xray:xray -R /opt/jfrog/xray/var/etc/security/