Automate Azure Stack Hub validation with PowerShell
Validation as a Service (VaaS) provides the ability to automate the launching of tests using the RunVaaSAutomation.ps1 script.
This script can be used to:
- Install prerequisites.
- Install and start the local agent.
- Launch VaaS tests in test pass, solution validation, and package validation workflows.
- Report test results.
The following links contain information about how to run tests via the VaaS portal. Before using the script, you should learn about the required parameters and their values:
- SolutionValidation Workflow: Validate a new Azure Stack Hub solution
- PackageValidation Workflow: Validate OEM packages
- TestPass Workflow: Scheduling a test
Download the automation scripts
Open an elevated PowerShell prompt.
Run the following script to download the automation script:
# Review and update the $RootFolder parameter
$RootFolder = "c:\VaaS"
if (-not(Test-Path($RootFolder))) {
mkdir $RootFolder
}
Invoke-WebRequest -Uri https://storage.azurestackvalidation.com/packages/Microsoft.VaaS.Scripts.latest.nupkg -OutFile "$RootFolder\RunVaaSAutomation.zip"
Expand-Archive -Path "$RootFolder\RunVaaSAutomation.zip" -DestinationPath "$RootFolder\RunVaaSAutomation" -Force
Set-Location "$RootFolder\RunVaaSAutomation"
Launch the solution validation workflow
To learn how to run the solution validation workflow via the VaaS portal, see Validate OEM packages.
Run the following script with the appropriate parameter values:
# Review and update the following parameters
$VaaSAccountUserName = ""
$VaaSAccountPassword = ""
$VaaSAccountTenantId = ""
$ServiceAdminUserName = ""
$ServiceAdminPassword = ""
$TenantAdminUserName = ""
$TenantAdminPassword = ""
$CloudAdminUserName = ""
$CloudAdminPassword = ""
$SolutionName = ''
$ProjectName = ''
$DiagnosticsStorageConnection=''
$VaaSProject_SolutionValidation_Configuration='Min' # enter 'Min' or 'Max'
# No need to modify the following lines
Import-Module .\VaaSAutomation.psm1 -verbose -force
$stampInfo = Get-StampInfo -cloudAdminUserName $CloudAdminUserName -cloudAdminPassword $CloudAdminPassword -retryCount 3 -retryPeriod 30 -outputFolder "."
$AgentName = "$((Get-WmiObject win32_computersystem).DNSHostName).$((Get-WmiObject win32_computersystem).Domain)".ToLower()
$VaaSAccountCredentail = New-Object System.Management.Automation.PSCredential ($VaaSAccountUserName, (ConvertTo-SecureString $VaaSAccountPassword -AsPlainText -Force))
$testParameters = @{}
$projectParameters = @{
"Configuration" = $VaaSProject_SolutionValidation_Configuration;
}
$scriptParameters = @{
'VaaSAccountCredentail' = $VaaSAccountCredentail;
'VaaSAccountTenantId' = $VaaSAccountTenantId;
'VaaSSolutionName' = $SolutionName;
'VaaSProjectType' = 'SolutionValidation';
'VaaSProjectName' = $ProjectName;
'VaaSProjectParameterHashTable'= $projectParameters;
'VaaSTestFilter' = 'Test';
'VaaSTestFilterValue' = '';
'VaaSTestParameterHashTable'= $testParameters;
'VaaSOnPremAgentName'= $AgentName;
'MaxScriptWaitTimeInHours'=48;
'ServiceAdminUserName' = $ServiceAdminUserName;
'ServiceAdminPassword' = $ServiceAdminPassword;
'TenantAdminUserName' = $TenantAdminUserName;
'TenantAdminPassword' = $TenantAdminPassword;
'CloudAdminUserName' = $CloudAdminUserName;
'CloudAdminPassword' = $CloudAdminPassword;
'DiagnosticsStorageConnection' = $DiagnosticsStorageConnection;
}
& .\RunVaaSAutomation.ps1 @scriptParameters
Launch package validation workflow
To learn how to run the package validation workflow via VaaS Port, see Validate OEM packages.
Run the following script with the appropriate parameter values:
# Review and update the following parameters
$VaaSAccountUserName = ""
$VaaSAccountPassword = ""
$VaaSAccountTenantId = ""
$ServiceAdminUserName = ""
$ServiceAdminPassword = ""
$TenantAdminUserName = ""
$TenantAdminPassword = ""
$CloudAdminUserName = ""
$CloudAdminPassword = ""
$SolutionName = ''
$ProjectName = ''
$DiagnosticsStorageConnection=''
$VaaSProject_PackageValidation_PackageBlobUri=''
$VaaSProject_PackageValidation_RequireDigitalSignature = "false" # enter 'true' or 'false' string
$VaaSProject_PackageValidation_LocalPathtoAzureStackUpdatePkgs = ""
$VaaSProject_PackageValidation_LocalPathtoOEMUpdatePkgs = ""
# No need to modify the following lines
Import-Module .\VaaSAutomation.psm1 -verbose -force
$stampInfo = Get-StampInfo -cloudAdminUserName $CloudAdminUserName -cloudAdminPassword $CloudAdminPassword -retryCount 3 -retryPeriod 30 -outputFolder "."
$AgentName = "$((Get-WmiObject win32_computersystem).DNSHostName).$((Get-WmiObject win32_computersystem).Domain)".ToLower()
$VaaSAccountCredentail = New-Object System.Management.Automation.PSCredential ($VaaSAccountUserName, (ConvertTo-SecureString $VaaSAccountPassword -AsPlainText -Force))
$testParameters = @{
"RequireDigitalSignature" = $VaaSProject_PackageValidation_RequireDigitalSignature;
"LocalPathtoAzureStackUpdatePkgs" = $VaaSProject_PackageValidation_LocalPathtoAzureStackUpdatePkgs;
"LocalPathtoOEMUpdatePkgs" = $VaaSProject_PackageValidation_LocalPathtoOEMUpdatePkgs;
}
$projectParameters = @{
"PackageBlobUri" = $VaaSProject_PackageValidation_PackageBlobUri;
}
$scriptParameters = @{
'VaaSAccountCredentail' = $VaaSAccountCredentail;
'VaaSAccountTenantId' = $VaaSAccountTenantId;
'VaaSSolutionName' = $SolutionName;
'VaaSProjectType' = 'PackageValidation';
'VaaSProjectName' = $ProjectName;
'VaaSProjectParameterHashTable' = $projectParameters;
'VaaSTestFilter' = 'Test';
'VaaSTestFilterValue' = '';
'VaaSTestParameterHashTable'= $testParameters;
'VaaSOnPremAgentName'= $AgentName;
'MaxScriptWaitTimeInHours'=96;
'ServiceAdminUserName' = $ServiceAdminUserName;
'ServiceAdminPassword' = $ServiceAdminPassword;
'TenantAdminUserName' = $TenantAdminUserName;
'TenantAdminPassword' = $TenantAdminPassword;
'CloudAdminUserName' = $CloudAdminUserName;
'CloudAdminPassword' = $CloudAdminPassword;
'DiagnosticsStorageConnection' = $DiagnosticsStorageConnection;
}
& .\RunVaaSAutomation.ps1 @scriptParameters
Launch the test pass workflow
To learn how to run the test pass workflow via VaaS port, see Scheduling a test.
Run the following script with the appropriate parameter values:
# Review and update the following parameters
$VaaSAccountUserName = ""
$VaaSAccountPassword = ""
$VaaSAccountTenantId = ""
$ServiceAdminUserName = ""
$ServiceAdminPassword = ""
$TenantAdminUserName = ""
$TenantAdminPassword = ""
$CloudAdminUserName = ""
$CloudAdminPassword = ""
$SolutionName = ''
$ProjectName = ''
$DiagnosticsStorageConnection=''
# No need to modify the following lines
# The following code is an example of running the "Cloud Simulation Engine" test
Import-Module .\VaaSAutomation.psm1 -verbose -force
$stampInfo = Get-StampInfo -cloudAdminUserName $CloudAdminUserName -cloudAdminPassword $CloudAdminPassword -retryCount 3 -retryPeriod 30 -outputFolder "."
$AgentName = "$((Get-WmiObject win32_computersystem).DNSHostName).$((Get-WmiObject win32_computersystem).Domain)".ToLower()
$VaaSAccountCredentail = New-Object System.Management.Automation.PSCredential ($VaaSAccountUserName, (ConvertTo-SecureString $VaaSAccountPassword -AsPlainText -Force))
$VaaSTestFilter='Test'
$VaaSTestFilterValue='cloudsimulation'
$testParameters = @{
'ServiceAdminUser' = $ServiceAdminUserName;
'ServiceAdminPassword' = $ServiceAdminPassword;
'TenantAdminUser' = $TenantAdminUserName;
'TenantAdminPassword' = $TenantAdminPassword;
'CloudAdminUser' = $CloudAdminUserName;
'CloudAdminPassword' = $CloudAdminPassword;
'DomainFQDN' = "";
'DomainAdminUser' = "";
'DomainAdminPassword' = "";
'TenantId' = $stampInfo.AadTenantId;
'ExternalFqdn' = $stampInfo.ExternalDomainFQDN;
'NumberOfNodes' = "$($stampInfo.NumberOfNodes)";
'Region' = $stampInfo.RegionName;
'RunDurationInHours' = 24;
'EnableSuBR' = "false";
'Faults' = "";
'Resources' = "";
'FaultControllerSettings' = "default";
'DiagnosticsStorageConnection' = $diagnosticsStorageConnection;
'DiagnosticsContainerName' = "$(New-Guid).ToString().ToLower()";
'MaxFiddlerCaptureSizeInMB' = "0";
'PackageHashCode' = "";
}
$projectParameters = @{}
$scriptParameters = @{
'VaaSAccountCredentail' = $VaaSAccountCredentail;
'VaaSAccountTenantId' = $VaaSAccountTenantId
'VaaSSolutionName' = $SolutionName;
'VaaSProjectType' = 'TestPass';
'VaaSProjectName' = $ProjectName;
'VaaSProjectParameterHashTable'= $projectParameters;
'VaaSTestFilter'= $VaaSTestFilter;
'VaaSTestFilterValue' = $VaaSTestFilterValue;
'VaaSTestParameterHashTable'= $testParameters;
'VaaSOnPremAgentName' = $AgentName;
'MaxScriptWaitTimeInHours' = 24;
'ServiceAdminUserName' = $ServiceAdminUserName;
'ServiceAdminPassword' = $ServiceAdminPassword;
'TenantAdminUserName' = $TenantAdminUserName;
'TenantAdminPassword' = $TenantAdminPassword;
'CloudAdminUserName' = $CloudAdminUserName;
'CloudAdminPassword' = $CloudAdminPassword;
'DiagnosticsStorageConnection' = $DiagnosticsStorageConnection;
}
& .\RunVaaSAutomation.ps1 @scriptParameters
Parameter table
For more information, see Workflow common parameters.
Parameter | Description |
---|---|
VaaSAccountUserName | Your VaaS user name for VaaS Portal. |
VaaSAccountPassword | Your VaaS password for VaaS Portal. |
VaaSAccountTenantId | Your VaaS tenant GUID. |
ServiceAdminUserName | Your Azure Stack Hub service admin account. |
ServiceAdminPassword | Your Azure Stack Hub service password. |
TenantAdminUserName | The administrator for the primary tenant. |
TenantAdminPassword | The password for the primary tenant. |
CloudAdminUserName | The cloud administrator username. |
CloudAdminPassword | The password for the cloud administrator. |
SolutionName | The name of the VaaS solution. |
ProjectName | The name of the VaaS workflow. |
DiagnosticsStorageConnection | A SAS URL to an Azure Storage account to which diagnostics logs will be copied during test execution. For instructions on generating the SAS URL, see Generate the diagnostics connection string. |
Review the results
Test logs and reports are saved under the current working folder.
For other options, see Monitor and manage tests in the VaaS portal.
Next steps
To learn more about PowerShell on Azure Stack Hub, review the latest modules.
Feedback
https://aka.ms/ContentUserFeedback.
Coming soon: Throughout 2024 we will be phasing out GitHub Issues as the feedback mechanism for content and replacing it with a new feedback system. For more information see:Submit and view feedback for