diff --git a/aksarc_jumpstart/deployaksarc.ps1 b/aksarc_jumpstart/deployaksarc.ps1 index 9c897bff..f08aa8cd 100644 --- a/aksarc_jumpstart/deployaksarc.ps1 +++ b/aksarc_jumpstart/deployaksarc.ps1 @@ -25,6 +25,17 @@ param ( [string] $workingDir ) +# Initialize execution status tracking +$executionStatus = @{ + Status = "InProgress" + Script = "deployaksarc.ps1" + StartTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + CompletedSteps = @() + FailedStep = $null + ErrorMessage = "" + ExitCode = 0 +} + if ([string]::IsNullOrEmpty($workingDir)) { $workingDir = "E:\AKSArc" } @@ -64,18 +75,47 @@ $scriptToExecute = [ordered] @{ foreach ($script in $scriptToExecute.GetEnumerator()) { $scriptUrl = $script.Key $scriptName = $script.Value + $scriptBaseName = $scriptName.Split(" ")[0] - $deploymentName = "executescript-$($vmName)-$($scriptName.Split(" ")[0].Replace('.ps1',''))" + $deploymentName = "executescript-$($vmName)-$($scriptBaseName.Replace('.ps1',''))" $commandToExecute = "powershell.exe -ExecutionPolicy Unrestricted -File $scriptName" Write-Host "Executing $commandToExecute from $scriptUrl on VM $vmName ..." try { az deployment group create --name $deploymentName --resource-group $GroupName --template-file ./configuration/executescript-template.json --parameters location=$Location vmName=$vmName scriptFileUri=$scriptUrl commandToExecute=$commandToExecute # --debug if ($LASTEXITCODE -ne 0) { - Write-Host "Azure CLI command failed with exit code $LASTEXITCODE" + $executionStatus.Status = "Failure" + $executionStatus.FailedStep = "ExecuteScript_$scriptBaseName" + $executionStatus.ErrorMessage = "Failed to execute script '$scriptName' on VM '$vmName'. Azure CLI command failed with exit code $LASTEXITCODE" + $executionStatus.ExitCode = $LASTEXITCODE + $executionStatus.EndTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + Write-Host "`n===== EXECUTION STATUS =====" + Write-Host "Status: $($executionStatus.Status)" + Write-Host "Failed Step: $($executionStatus.FailedStep)" + Write-Host "Error Message: $($executionStatus.ErrorMessage)" + Write-Host "Exit Code: $($executionStatus.ExitCode)" + Write-Host "Completed Steps: $($executionStatus.CompletedSteps -join ', ')" + Write-Host "Start Time: $($executionStatus.StartTime)" + Write-Host "End Time: $($executionStatus.EndTime)" + Write-Host "============================" throw "Failed to execute script $scriptName on VM $vmName. Exit code: $LASTEXITCODE" } + $executionStatus.CompletedSteps += "ExecuteScript_$scriptBaseName" } catch { + $executionStatus.Status = "Failure" + $executionStatus.FailedStep = "ExecuteScript_$scriptBaseName" + $executionStatus.ErrorMessage = "An error occurred during AKS Arc cluster deployment: $_" + $executionStatus.ExitCode = 1 + $executionStatus.EndTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + Write-Host "`n===== EXECUTION STATUS =====" + Write-Host "Status: $($executionStatus.Status)" + Write-Host "Failed Step: $($executionStatus.FailedStep)" + Write-Host "Error Message: $($executionStatus.ErrorMessage)" + Write-Host "Exit Code: $($executionStatus.ExitCode)" + Write-Host "Completed Steps: $($executionStatus.CompletedSteps -join ', ')" + Write-Host "Start Time: $($executionStatus.StartTime)" + Write-Host "End Time: $($executionStatus.EndTime)" + Write-Host "============================" Write-Error "An error occurred during AKS Arc cluster deployment: $_" Write-Error "Exception details: $($_.Exception.Message)" Write-Error "Stack trace: $($_.ScriptStackTrace)" @@ -83,4 +123,15 @@ foreach ($script in $scriptToExecute.GetEnumerator()) { } } -Write-Host "Setup is ready for AKS Arc deployment" \ No newline at end of file +Write-Host "Setup is ready for AKS Arc deployment" + +# Final execution status - Success +$executionStatus.Status = "Success" +$executionStatus.EndTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" +Write-Host "`n===== EXECUTION STATUS =====" +Write-Host "Status: $($executionStatus.Status)" +Write-Host "Exit Code: $($executionStatus.ExitCode)" +Write-Host "Completed Steps: $($executionStatus.CompletedSteps -join ', ')" +Write-Host "Start Time: $($executionStatus.StartTime)" +Write-Host "End Time: $($executionStatus.EndTime)" +Write-Host "============================" \ No newline at end of file diff --git a/aksarc_jumpstart/deployaksarc.sh b/aksarc_jumpstart/deployaksarc.sh index d515dc33..6c6d1aac 100755 --- a/aksarc_jumpstart/deployaksarc.sh +++ b/aksarc_jumpstart/deployaksarc.sh @@ -15,6 +15,15 @@ VM_NAME="jumpstartVM" SUBNET_NAME="jumpstartSubnet" WORKING_DIR="E:\\AKSArc" +# Initialize execution status tracking +EXECUTION_STATUS="InProgress" +SCRIPT_NAME="deployaksarc.sh" +START_TIME=$(date +'%Y-%m-%d %H:%M:%S') +COMPLETED_STEPS=() +FAILED_STEP="" +ERROR_MESSAGE="" +EXIT_CODE=0 + # Function to print usage usage() { echo "Usage: $0 [OPTIONS]" @@ -41,6 +50,38 @@ log() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" } +# Function to print execution status +print_execution_status() { + local end_time=$(date +'%Y-%m-%d %H:%M:%S') + echo "" + echo "===== EXECUTION STATUS =====" + echo "Status: $EXECUTION_STATUS" + if [[ "$EXECUTION_STATUS" == "Failure" ]]; then + echo "Failed Step: $FAILED_STEP" + echo "Error Message: $ERROR_MESSAGE" + fi + echo "Exit Code: $EXIT_CODE" + echo "Completed Steps: ${COMPLETED_STEPS[*]}" + echo "Start Time: $START_TIME" + echo "End Time: $end_time" + echo "============================" +} + +# Function to handle errors +handle_error() { + local step_name="$1" + local error_msg="$2" + local exit_code="${3:-1}" + + EXECUTION_STATUS="Failure" + FAILED_STEP="$step_name" + ERROR_MESSAGE="$error_msg" + EXIT_CODE="$exit_code" + + print_execution_status + exit "$exit_code" +} + # Function to check if command exists command_exists() { command -v "$1" >/dev/null 2>&1 @@ -170,8 +211,7 @@ log " Subscription ID: $SUBSCRIPTION_ID" log "Setting Azure subscription context..." az account set --subscription "$SUBSCRIPTION_ID" if [[ $? -ne 0 ]]; then - echo "Error: Failed to set subscription context" - exit 1 + handle_error "SetSubscription" "Failed to set subscription context to '$SUBSCRIPTION_ID'" fi # Get git repository information @@ -214,15 +254,11 @@ execute_script() { commandToExecute="$command_to_execute" if [[ $? -ne 0 ]]; then - echo "Error: Failed to execute script ${script_name%.*}" - echo "This may be due to:" - echo " - MOC not being properly installed" - echo " - Network connectivity issues" - echo " - Azure resource quota limitations" - echo " - Previous deployment steps not completed" - exit 1 + local error_details="Failed to execute script '${script_name}' on VM '$VM_NAME'. This may be due to: MOC not being properly installed, network connectivity issues, Azure resource quota limitations, or previous deployment steps not completed." + handle_error "ExecuteScript_${script_name%.*}" "$error_details" fi + COMPLETED_STEPS+=("ExecuteScript_${script_name%.*}") log "Successfully completed: ${script_name%.*}" } @@ -262,3 +298,7 @@ log "" log "4. Connect to the cluster using kubectl" log "" log "Setup is ready for AKS Arc workload deployment!" + +# Final execution status - Success +EXECUTION_STATUS="Success" +print_execution_status diff --git a/aksarc_jumpstart/jumpstart.ps1 b/aksarc_jumpstart/jumpstart.ps1 index 980fd958..6c5c3eb3 100644 --- a/aksarc_jumpstart/jumpstart.ps1 +++ b/aksarc_jumpstart/jumpstart.ps1 @@ -26,38 +26,140 @@ param ( $subscriptionId ) +# Initialize execution status tracking +$executionStatus = @{ + Status = "InProgress" + Script = "jumpstart.ps1" + StartTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + CompletedSteps = @() + FailedStep = $null + ErrorMessage = "" + ExitCode = 0 +} + # Create Resource Group -az group create --name $GroupName --location $Location +az group create --name $GroupName --location $Location if ($LASTEXITCODE -ne 0) { - Write-Host "Azure CLI command failed with exit code $LASTEXITCODE" + $executionStatus.Status = "Failure" + $executionStatus.FailedStep = "CreateResourceGroup" + $executionStatus.ErrorMessage = "Failed to create resource group '$GroupName' in location '$Location'. Azure CLI command failed with exit code $LASTEXITCODE" + $executionStatus.ExitCode = $LASTEXITCODE + $executionStatus.EndTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + Write-Host "`n===== EXECUTION STATUS =====" + Write-Host "Status: $($executionStatus.Status)" + Write-Host "Failed Step: $($executionStatus.FailedStep)" + Write-Host "Error Message: $($executionStatus.ErrorMessage)" + Write-Host "Exit Code: $($executionStatus.ExitCode)" + Write-Host "Start Time: $($executionStatus.StartTime)" + Write-Host "End Time: $($executionStatus.EndTime)" + Write-Host "============================" exit $LASTEXITCODE } +$executionStatus.CompletedSteps += "CreateResourceGroup" # Create Vnet and VM az deployment group create --resource-group $GroupName --template-file ./configuration/vnet-template.json --parameters vnetName=$vnetName location=$Location subnetName=$subnetName if ($LASTEXITCODE -ne 0) { - Write-Host "Azure CLI command failed with exit code $LASTEXITCODE" + $executionStatus.Status = "Failure" + $executionStatus.FailedStep = "CreateVirtualNetwork" + $executionStatus.ErrorMessage = "Failed to create virtual network '$vnetName' and subnet '$subnetName'. Azure CLI command failed with exit code $LASTEXITCODE" + $executionStatus.ExitCode = $LASTEXITCODE + $executionStatus.EndTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + Write-Host "`n===== EXECUTION STATUS =====" + Write-Host "Status: $($executionStatus.Status)" + Write-Host "Failed Step: $($executionStatus.FailedStep)" + Write-Host "Error Message: $($executionStatus.ErrorMessage)" + Write-Host "Exit Code: $($executionStatus.ExitCode)" + Write-Host "Completed Steps: $($executionStatus.CompletedSteps -join ', ')" + Write-Host "Start Time: $($executionStatus.StartTime)" + Write-Host "End Time: $($executionStatus.EndTime)" + Write-Host "============================" exit $LASTEXITCODE } +$executionStatus.CompletedSteps += "CreateVirtualNetwork" az deployment group create --resource-group $GroupName --template-file ./configuration/vm-template.json --parameters adminUsername=$userName adminPassword=$password vmName=$vmName location=$Location vnetName=$vnetName vmSize="Standard_E16s_v4" subnetName=$subnetName if ($LASTEXITCODE -ne 0) { - Write-Host "Azure CLI command failed with exit code $LASTEXITCODE" + $executionStatus.Status = "Failure" + $executionStatus.FailedStep = "CreateVirtualMachine" + $executionStatus.ErrorMessage = "Failed to create virtual machine '$vmName'. Azure CLI command failed with exit code $LASTEXITCODE" + $executionStatus.ExitCode = $LASTEXITCODE + $executionStatus.EndTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + Write-Host "`n===== EXECUTION STATUS =====" + Write-Host "Status: $($executionStatus.Status)" + Write-Host "Failed Step: $($executionStatus.FailedStep)" + Write-Host "Error Message: $($executionStatus.ErrorMessage)" + Write-Host "Exit Code: $($executionStatus.ExitCode)" + Write-Host "Completed Steps: $($executionStatus.CompletedSteps -join ', ')" + Write-Host "Start Time: $($executionStatus.StartTime)" + Write-Host "End Time: $($executionStatus.EndTime)" + Write-Host "============================" exit $LASTEXITCODE } +$executionStatus.CompletedSteps += "CreateVirtualMachine" # Assign Managed Identity and Contributor Role to VM az vm identity assign --resource-group $GroupName --name $vmName if ($LASTEXITCODE -ne 0) { - Write-Host "Azure CLI command failed with exit code $LASTEXITCODE" + $executionStatus.Status = "Failure" + $executionStatus.FailedStep = "AssignManagedIdentity" + $executionStatus.ErrorMessage = "Failed to assign managed identity to VM '$vmName'. Azure CLI command failed with exit code $LASTEXITCODE" + $executionStatus.ExitCode = $LASTEXITCODE + $executionStatus.EndTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + Write-Host "`n===== EXECUTION STATUS =====" + Write-Host "Status: $($executionStatus.Status)" + Write-Host "Failed Step: $($executionStatus.FailedStep)" + Write-Host "Error Message: $($executionStatus.ErrorMessage)" + Write-Host "Exit Code: $($executionStatus.ExitCode)" + Write-Host "Completed Steps: $($executionStatus.CompletedSteps -join ', ')" + Write-Host "Start Time: $($executionStatus.StartTime)" + Write-Host "End Time: $($executionStatus.EndTime)" + Write-Host "============================" exit $LASTEXITCODE } +$executionStatus.CompletedSteps += "AssignManagedIdentity" $principalId = az vm show --resource-group $GroupName --name $vmName --query identity.principalId -o tsv az role assignment create --assignee $principalId --role Contributor --scope /subscriptions/$subscriptionId +if ($LASTEXITCODE -ne 0) { + $executionStatus.Status = "Failure" + $executionStatus.FailedStep = "AssignContributorRole" + $executionStatus.ErrorMessage = "Failed to assign Contributor role to VM identity. Azure CLI command failed with exit code $LASTEXITCODE" + $executionStatus.ExitCode = $LASTEXITCODE + $executionStatus.EndTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + Write-Host "`n===== EXECUTION STATUS =====" + Write-Host "Status: $($executionStatus.Status)" + Write-Host "Failed Step: $($executionStatus.FailedStep)" + Write-Host "Error Message: $($executionStatus.ErrorMessage)" + Write-Host "Exit Code: $($executionStatus.ExitCode)" + Write-Host "Completed Steps: $($executionStatus.CompletedSteps -join ', ')" + Write-Host "Start Time: $($executionStatus.StartTime)" + Write-Host "End Time: $($executionStatus.EndTime)" + Write-Host "============================" + exit $LASTEXITCODE +} +$executionStatus.CompletedSteps += "AssignContributorRole" #az deployment group create --resource-group $GroupName --template-file a4s-template.json --parameters location=$Location vmName=$vmName arcResourceGroup=$GroupName subscriptionId=$subscriptionId tenantId=$tenantId # Enable Nested Virtualization az vm update --resource-group $GroupName --name $vmName --set additionalCapabilities.enableNestedVirtualization=true +if ($LASTEXITCODE -ne 0) { + $executionStatus.Status = "Failure" + $executionStatus.FailedStep = "EnableNestedVirtualization" + $executionStatus.ErrorMessage = "Failed to enable nested virtualization on VM '$vmName'. Azure CLI command failed with exit code $LASTEXITCODE" + $executionStatus.ExitCode = $LASTEXITCODE + $executionStatus.EndTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + Write-Host "`n===== EXECUTION STATUS =====" + Write-Host "Status: $($executionStatus.Status)" + Write-Host "Failed Step: $($executionStatus.FailedStep)" + Write-Host "Error Message: $($executionStatus.ErrorMessage)" + Write-Host "Exit Code: $($executionStatus.ExitCode)" + Write-Host "Completed Steps: $($executionStatus.CompletedSteps -join ', ')" + Write-Host "Start Time: $($executionStatus.StartTime)" + Write-Host "End Time: $($executionStatus.EndTime)" + Write-Host "============================" + exit $LASTEXITCODE +} +$executionStatus.CompletedSteps += "EnableNestedVirtualization" $gitSource = (git config --get remote.origin.url).Replace("github.com", "raw.githubusercontent.com").Replace("aksArc.git", "aksArc") $branch = (git branch --show-current) @@ -79,8 +181,40 @@ foreach ($script in $scriptToExecute.GetEnumerator()) { Write-Host "Executing $scriptName from $scriptUrl on VM $vmName ..." try { az deployment group create --name $deploymentName --resource-group $GroupName --template-file ./configuration/executescript-template.json --parameters location=$Location vmName=$vmName scriptFileUri=$scriptUrl commandToExecute=$commandToExecute + if ($LASTEXITCODE -ne 0) { + $executionStatus.Status = "Failure" + $executionStatus.FailedStep = "ExecuteScript_$scriptName" + $executionStatus.ErrorMessage = "Failed to execute script '$scriptName' on VM '$vmName'. Azure CLI command failed with exit code $LASTEXITCODE" + $executionStatus.ExitCode = $LASTEXITCODE + $executionStatus.EndTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + Write-Host "`n===== EXECUTION STATUS =====" + Write-Host "Status: $($executionStatus.Status)" + Write-Host "Failed Step: $($executionStatus.FailedStep)" + Write-Host "Error Message: $($executionStatus.ErrorMessage)" + Write-Host "Exit Code: $($executionStatus.ExitCode)" + Write-Host "Completed Steps: $($executionStatus.CompletedSteps -join ', ')" + Write-Host "Start Time: $($executionStatus.StartTime)" + Write-Host "End Time: $($executionStatus.EndTime)" + Write-Host "============================" + throw "Script execution failed: $($executionStatus.ErrorMessage)" + } + $executionStatus.CompletedSteps += "ExecuteScript_$scriptName" } catch { + $executionStatus.Status = "Failure" + $executionStatus.FailedStep = "ExecuteScript_$scriptName" + $executionStatus.ErrorMessage = "An error occurred during script execution: $_" + $executionStatus.ExitCode = 1 + $executionStatus.EndTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" + Write-Host "`n===== EXECUTION STATUS =====" + Write-Host "Status: $($executionStatus.Status)" + Write-Host "Failed Step: $($executionStatus.FailedStep)" + Write-Host "Error Message: $($executionStatus.ErrorMessage)" + Write-Host "Exit Code: $($executionStatus.ExitCode)" + Write-Host "Completed Steps: $($executionStatus.CompletedSteps -join ', ')" + Write-Host "Start Time: $($executionStatus.StartTime)" + Write-Host "End Time: $($executionStatus.EndTime)" + Write-Host "============================" Write-Error "An error occurred during AKS Arc cluster deployment: $_" Write-Error "Exception details: $($_.Exception.Message)" Write-Error "Stack trace: $($_.ScriptStackTrace)" @@ -88,4 +222,15 @@ foreach ($script in $scriptToExecute.GetEnumerator()) { } } -Write-Host "Login to the VM using Bastion or RDP. Wait for MOC install to finish. Then continue with aksarc deployment by running the script deployaksarc.ps1." \ No newline at end of file +Write-Host "Login to the VM using Bastion or RDP. Wait for MOC install to finish. Then continue with aksarc deployment by running the script deployaksarc.ps1." + +# Final execution status - Success +$executionStatus.Status = "Success" +$executionStatus.EndTime = Get-Date -Format "yyyy-MM-dd HH:mm:ss" +Write-Host "`n===== EXECUTION STATUS =====" +Write-Host "Status: $($executionStatus.Status)" +Write-Host "Exit Code: $($executionStatus.ExitCode)" +Write-Host "Completed Steps: $($executionStatus.CompletedSteps -join ', ')" +Write-Host "Start Time: $($executionStatus.StartTime)" +Write-Host "End Time: $($executionStatus.EndTime)" +Write-Host "============================" \ No newline at end of file diff --git a/aksarc_jumpstart/jumpstart.sh b/aksarc_jumpstart/jumpstart.sh index bb63f362..37c44ce5 100755 --- a/aksarc_jumpstart/jumpstart.sh +++ b/aksarc_jumpstart/jumpstart.sh @@ -15,6 +15,15 @@ SUBNET_NAME="jumpstartSubnet" # Valid locations VALID_LOCATIONS=("eastus" "australiaeast") +# Initialize execution status tracking +EXECUTION_STATUS="InProgress" +SCRIPT_NAME="jumpstart.sh" +START_TIME=$(date +'%Y-%m-%d %H:%M:%S') +COMPLETED_STEPS=() +FAILED_STEP="" +ERROR_MESSAGE="" +EXIT_CODE=0 + # Function to print usage usage() { echo "Usage: $0 [OPTIONS]" @@ -39,6 +48,38 @@ log() { echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" } +# Function to print execution status +print_execution_status() { + local end_time=$(date +'%Y-%m-%d %H:%M:%S') + echo "" + echo "===== EXECUTION STATUS =====" + echo "Status: $EXECUTION_STATUS" + if [[ "$EXECUTION_STATUS" == "Failure" ]]; then + echo "Failed Step: $FAILED_STEP" + echo "Error Message: $ERROR_MESSAGE" + fi + echo "Exit Code: $EXIT_CODE" + echo "Completed Steps: ${COMPLETED_STEPS[*]}" + echo "Start Time: $START_TIME" + echo "End Time: $end_time" + echo "============================" +} + +# Function to handle errors +handle_error() { + local step_name="$1" + local error_msg="$2" + local exit_code="${3:-1}" + + EXECUTION_STATUS="Failure" + FAILED_STEP="$step_name" + ERROR_MESSAGE="$error_msg" + EXIT_CODE="$exit_code" + + print_execution_status + exit "$exit_code" +} + # Function to check if command exists command_exists() { command -v "$1" >/dev/null 2>&1 @@ -160,17 +201,16 @@ log " Subscription ID: $SUBSCRIPTION_ID" log "Setting Azure subscription context..." az account set --subscription "$SUBSCRIPTION_ID" if [[ $? -ne 0 ]]; then - echo "Error: Failed to set subscription context" - exit 1 + handle_error "SetSubscription" "Failed to set subscription context to '$SUBSCRIPTION_ID'" fi # Create Resource Group log "Creating resource group '$GROUP_NAME' in '$LOCATION'..." az group create --name "$GROUP_NAME" --location "$LOCATION" if [[ $? -ne 0 ]]; then - echo "Error: Failed to create resource group" - exit 1 + handle_error "CreateResourceGroup" "Failed to create resource group '$GROUP_NAME' in location '$LOCATION'" fi +COMPLETED_STEPS+=("CreateResourceGroup") # Check for required template files VNET_TEMPLATE="./configuration/vnet-template.json" @@ -203,9 +243,9 @@ az deployment group create \ --template-file "$VNET_TEMPLATE" \ --parameters vnetName="$VNET_NAME" location="$LOCATION" subnetName="$SUBNET_NAME" if [[ $? -ne 0 ]]; then - echo "Error: Failed to create virtual network" - exit 1 + handle_error "CreateVirtualNetwork" "Failed to create virtual network '$VNET_NAME' and subnet '$SUBNET_NAME'" fi +COMPLETED_STEPS+=("CreateVirtualNetwork") # Create Virtual Machine log "Creating virtual machine..." @@ -222,23 +262,22 @@ az deployment group create \ vmSize="Standard_E16s_v4" \ subnetName="$SUBNET_NAME" if [[ $? -ne 0 ]]; then - echo "Error: Failed to create virtual machine" - exit 1 + handle_error "CreateVirtualMachine" "Failed to create virtual machine '$VM_NAME'" fi +COMPLETED_STEPS+=("CreateVirtualMachine") # Assign Managed Identity and Contributor Role to VM log "Assigning managed identity to VM..." az vm identity assign --resource-group "$GROUP_NAME" --name "$VM_NAME" if [[ $? -ne 0 ]]; then - echo "Error: Failed to assign managed identity" - exit 1 + handle_error "AssignManagedIdentity" "Failed to assign managed identity to VM '$VM_NAME'" fi +COMPLETED_STEPS+=("AssignManagedIdentity") log "Getting VM principal ID..." PRINCIPAL_ID=$(az vm show --resource-group "$GROUP_NAME" --name "$VM_NAME" --query identity.principalId -o tsv) if [[ -z "$PRINCIPAL_ID" ]]; then - echo "Error: Failed to get VM principal ID" - exit 1 + handle_error "GetPrincipalId" "Failed to get VM principal ID for '$VM_NAME'" fi log "Assigning Contributor role to VM identity..." @@ -247,9 +286,9 @@ az role assignment create \ --role Contributor \ --scope "/subscriptions/$SUBSCRIPTION_ID" if [[ $? -ne 0 ]]; then - echo "Error: Failed to assign Contributor role" - exit 1 + handle_error "AssignContributorRole" "Failed to assign Contributor role to VM identity" fi +COMPLETED_STEPS+=("AssignContributorRole") # Enable Nested Virtualization log "Enabling nested virtualization on VM..." @@ -258,9 +297,9 @@ az vm update \ --name "$VM_NAME" \ --set "additionalCapabilities.enableNestedVirtualization=true" if [[ $? -ne 0 ]]; then - echo "Error: Failed to enable nested virtualization" - exit 1 + handle_error "EnableNestedVirtualization" "Failed to enable nested virtualization on VM '$VM_NAME'" fi +COMPLETED_STEPS+=("EnableNestedVirtualization") # Get git repository information log "Getting git repository information..." @@ -299,9 +338,9 @@ for script_name in "${SCRIPTS_TO_EXECUTE[@]}"; do commandToExecute="$command_to_execute" if [[ $? -ne 0 ]]; then - echo "Error: Failed to execute script $script_name" - exit 1 + handle_error "ExecuteScript_$script_name" "Failed to execute script '$script_name' on VM '$VM_NAME'" fi + COMPLETED_STEPS+=("ExecuteScript_$script_name") done log "Jump start deployment completed successfully!" @@ -316,3 +355,7 @@ log "VM Connection Details:" log " Resource Group: $GROUP_NAME" log " VM Name: $VM_NAME" log " Location: $LOCATION" + +# Final execution status - Success +EXECUTION_STATUS="Success" +print_execution_status