Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 54 additions & 3 deletions aksarc_jumpstart/deployaksarc.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
Expand Down Expand Up @@ -64,23 +75,63 @@ $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)"
throw
}
}

Write-Host "Setup is ready for AKS Arc deployment"
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 "============================"
58 changes: 49 additions & 9 deletions aksarc_jumpstart/deployaksarc.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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]"
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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%.*}"
}

Expand Down Expand Up @@ -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
157 changes: 151 additions & 6 deletions aksarc_jumpstart/jumpstart.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -79,13 +181,56 @@ 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)"
throw
}
}

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."
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 "============================"
Loading