Sync eng/common directory with azure-sdk-tools for PR 4544 (#4080)

* Fix contains method in stress generate function

* Update stress examples to addons 0.2.0. Script QOL fixes.

* Skip CI print for stress matrix. Minor improvements.

* Fix non-matching Chart.yaml files being evaluated too soon

Co-authored-by: Ben Broderick Phillips <bebroder@microsoft.com>
This commit is contained in:
Azure SDK Bot 2022-11-01 15:27:14 -04:00 committed by GitHub
parent e9a322d4b7
commit 5d64990678
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 66 additions and 41 deletions

View File

@ -14,7 +14,8 @@ param (
[Parameter(Mandatory=$False)][string] $DisplayNameFilter,
[Parameter(Mandatory=$False)][array] $Filters,
[Parameter(Mandatory=$False)][array] $Replace,
[Parameter(Mandatory=$False)][array] $NonSparseParameters
[Parameter(Mandatory=$False)][array] $NonSparseParameters,
[Parameter()][switch] $CI = ($null -ne $env:SYSTEM_TEAMPROJECTID)
)
. $PSScriptRoot/job-matrix-functions.ps1
@ -39,6 +40,6 @@ $serialized = SerializePipelineMatrix $matrix
Write-Output $serialized.pretty
if ($null -ne $env:SYSTEM_TEAMPROJECTID) {
if ($CI) {
Write-Output "##vso[task.setVariable variable=matrix;isOutput=true]$($serialized.compressed)"
}
}

View File

@ -30,32 +30,40 @@ function FindStressPackages(
# Bare minimum filter for stress tests
$filters['stressTest'] = 'true'
$packages = @()
$chartFiles = Get-ChildItem -Recurse -Filter 'Chart.yaml' $directory
$chartFiles = Get-ChildItem -Recurse -Filter 'Chart.yaml' $directory
Write-Host "Found chart files:"
Write-Host ($chartFiles -join "`n")
if (!$MatrixFileName) {
$MatrixFileName = '/scenarios-matrix.yaml'
$MatrixFileName = 'scenarios-matrix.yaml'
}
foreach ($chartFile in $chartFiles) {
$chart = ParseChart $chartFile
VerifyAddonsVersion $chart
if (matchesAnnotations $chart $filters) {
$matrixFilePath = (Join-Path $chartFile.Directory.FullName $MatrixFileName)
if (Test-Path $matrixFilePath) {
GenerateScenarioMatrix `
-matrixFilePath $matrixFilePath `
-Selection $MatrixSelection `
-DisplayNameFilter $MatrixDisplayNameFilter `
-Filters $MatrixFilters `
-Replace $MatrixReplace `
-NonSparseParameters $MatrixNonSparseParameters
}
$packages += NewStressTestPackageInfo `
-chart $chart `
-chartFile $chartFile `
-CI:$CI `
-namespaceOverride $namespaceOverride
if (!(matchesAnnotations $chart $filters)) {
Write-Host "Skipping chart file '$chartFile'"
continue
}
VerifyAddonsVersion $chart $chartFile
$matrixFilePath = (Join-Path $chartFile.Directory.FullName $MatrixFileName)
if (Test-Path $matrixFilePath) {
GenerateScenarioMatrix `
-matrixFilePath $matrixFilePath `
-Selection $MatrixSelection `
-DisplayNameFilter $MatrixDisplayNameFilter `
-Filters $MatrixFilters `
-Replace $MatrixReplace `
-NonSparseParameters $MatrixNonSparseParameters
}
$packages += NewStressTestPackageInfo `
-chart $chart `
-chartFile $chartFile `
-CI:$CI `
-namespaceOverride $namespaceOverride
}
return $packages
@ -67,7 +75,7 @@ function ParseChart([string]$chartFile) {
function MatchesAnnotations([hashtable]$chart, [hashtable]$filters) {
foreach ($filter in $filters.GetEnumerator()) {
if (!$chart.annotations -or $chart.annotations[$filter.Key] -ne $filter.Value) {
if (!$chart["annotations"] -or $chart["annotations"][$filter.Key] -ne $filter.Value) {
return $false
}
}
@ -75,11 +83,11 @@ function MatchesAnnotations([hashtable]$chart, [hashtable]$filters) {
return $true
}
function VerifyAddonsVersion([hashtable]$chart) {
function VerifyAddonsVersion([hashtable]$chart, [string]$chartFile) {
foreach ($dependency in $chart.dependencies) {
if ($dependency.name -eq "stress-test-addons" -and
$dependency.version -lt "0.2.0") {
throw "The stress-test-addons version in use is $($dependency.version), please use versions >= 0.2.0"
throw "The stress-test-addons version in use for '$chartFile' is $($dependency.version), please use versions >= 0.2.0"
}
}
}

View File

@ -7,9 +7,11 @@ param(
[Parameter(Mandatory=$False)][array]$NonSparseParameters
)
$ErrorActionPreference = 'Stop'
function GenerateScenarioMatrix(
[string]$matrixFilePath,
[string]$Selection,
[Parameter(Mandatory=$True)][string]$matrixFilePath,
[Parameter(Mandatory=$True)][string]$Selection,
[Parameter(Mandatory=$False)][string]$DisplayNameFilter,
[Parameter(Mandatory=$False)][array]$Filters,
[Parameter(Mandatory=$False)][array]$Replace,
@ -23,12 +25,17 @@ function GenerateScenarioMatrix(
-DisplayNameFilter $DisplayNameFilter `
-Filters $Filters `
-Replace $Replace `
-NonSparseParameters $NonSparseParameters
-NonSparseParameters $NonSparseParameters `
-CI:$False
Write-Host "=================================================="
Write-Host "Generated matrix for $matrixFilePath"
Write-Host $prettyMatrix
$prettyMatrix = $prettyMatrix | ConvertFrom-Json
Write-Host "=================================================="
$matrixObj = $prettyMatrix | ConvertFrom-Json
$scenariosMatrix = @()
foreach($permutation in $prettyMatrix.psobject.properties) {
foreach($permutation in $matrixObj.psobject.properties) {
$entry = @{}
$entry.Name = $permutation.Name -replace '_', '-'
$entry.Scenario = $entry.Name
@ -46,13 +53,14 @@ function GenerateScenarioMatrix(
$values = $valuesYaml | ConvertFrom-Yaml -Ordered
if (!$values) {$values = @{}}
if ($values.ContainsKey('Scenarios')) {
throw "Please use matrix generation for stress test scenarios."
if ($values.Contains('Scenarios')) {
throw "Please remove the 'Scenarios' key from $valuesConfig as it is deprecated."
}
}
$values.scenarios = $scenariosMatrix
$values | ConvertTo-Yaml | Out-File -FilePath (Join-Path $matrixFilePath '../generatedValues.yaml')
$generatedValues = Join-Path (Split-Path $matrixFilePath) 'generatedValues.yaml'
$values | ConvertTo-Yaml | Out-File -FilePath $generatedValues
}
function NewStressTestPackageInfo(

View File

@ -40,8 +40,12 @@ function Login([string]$subscription, [string]$clusterGroup, [switch]$pushImages
$cluster = RunOrExitOnFailure az aks list -g $clusterGroup --subscription $subscription -o json
$clusterName = ($cluster | ConvertFrom-Json).name
$kubeContext = (RunOrExitOnFailure kubectl config view -o json) | ConvertFrom-Json
$defaultNamespace = $kubeContext.contexts.Where({ $_.name -eq $clusterName }).context.namespace
$kubeContext = (RunOrExitOnFailure kubectl config view -o json) | ConvertFrom-Json -AsHashtable
$defaultNamespace = $null
$targetContext = $kubeContext.contexts.Where({ $_.name -eq $clusterName }) | Select -First 1
if ($targetContext -ne $null) {
$defaultNamespace = $targetContext.context.namespace
}
RunOrExitOnFailure az aks get-credentials `
-n "$clusterName" `
@ -201,6 +205,9 @@ function DeployStressPackage(
$dockerFilePath = "$($pkg.Directory)/Dockerfile"
}
$dockerFilePath = [System.IO.Path]::GetFullPath($dockerFilePath).Trim()
if (!(Test-Path $dockerFilePath)) {
continue
}
if ("imageBuildDir" -in $scenario.keys) {
$dockerBuildDir = Join-Path $pkg.Directory $scenario.imageBuildDir
@ -212,7 +219,7 @@ function DeployStressPackage(
}
}
if ($pkg.Dockerfile -or $pkg.DockerBuildDir) {
throw "The chart.yaml docker config is depracated, please use the scenarios matrix instead."
throw "The chart.yaml docker config is deprecated, please use the scenarios matrix instead."
}
@ -249,9 +256,10 @@ function DeployStressPackage(
}
}
$genVal.scenarios = @( foreach ($scenario in $genVal.scenarios) {
$dockerPath = Join-Path $pkg.Directory $scenario.image
if ("image" -notin $scenario) {
$dockerPath = $dockerFilePath
$dockerPath = if ("image" -notin $scenario) {
$dockerFilePath
} else {
Join-Path $pkg.Directory $scenario.image
}
if ([System.IO.Path]::GetFullPath($dockerPath) -eq $dockerFilePath) {
$scenario.imageTag = $imageTag
@ -267,7 +275,7 @@ function DeployStressPackage(
-n $pkg.Namespace `
--install `
--set stress-test-addons.env=$environment `
--values generatedValues.yaml
--values (Join-Path $pkg.Directory generatedValues.yaml)
if ($LASTEXITCODE) {
# Issues like 'UPGRADE FAILED: another operation (install/upgrade/rollback) is in progress'
# can be the result of cancelled `upgrade` operations (e.g. ctrl-c).