diff --git a/eng/common/scripts/Helpers/PSModule-Helpers.ps1 b/eng/common/scripts/Helpers/PSModule-Helpers.ps1 index 96f34ff71f4a..fae40d650e4f 100644 --- a/eng/common/scripts/Helpers/PSModule-Helpers.ps1 +++ b/eng/common/scripts/Helpers/PSModule-Helpers.ps1 @@ -48,8 +48,15 @@ function Update-PSModulePath() } # If we want to use another default repository other then PSGallery we can update the default parameters -function Install-ModuleIfNotInstalled($moduleName, $version, $repositoryUrl = $DefaultPSRepositoryUrl) +function Install-ModuleIfNotInstalled() { + [CmdletBinding(SupportsShouldProcess = $true)] + param( + [string]$moduleName, + [string]$version, + [string]$repositoryUrl = $DefaultPSRepositoryUrl + ) + # Check installed modules $modules = (Get-Module -ListAvailable $moduleName) if ($version -as [Version]) { @@ -94,4 +101,4 @@ function Install-ModuleIfNotInstalled($moduleName, $version, $repositoryUrl = $D return $modules[0] } -Update-PSModulePath \ No newline at end of file +Update-PSModulePath diff --git a/eng/common/scripts/common.ps1 b/eng/common/scripts/common.ps1 index c472d180341c..73fe5b7d0393 100644 --- a/eng/common/scripts/common.ps1 +++ b/eng/common/scripts/common.ps1 @@ -54,4 +54,4 @@ $GetOnboardedDocsMsPackagesForMonikerFn = "Get-${Language}-OnboardedDocsMsPackag $GetDocsMsTocDataFn = "Get-${Language}-DocsMsTocData" $GetDocsMsTocChildrenForManagementPackagesFn = "Get-${Language}-DocsMsTocChildrenForManagementPackages" $UpdateDocsMsTocFn = "Get-${Language}-UpdatedDocsMsToc" -$GetPackageLevelReadmeFn = "Get-${Language}-PackageLevelReadme" \ No newline at end of file +$GetPackageLevelReadmeFn = "Get-${Language}-PackageLevelReadme" diff --git a/eng/common/scripts/stress-testing/deploy-stress-tests.ps1 b/eng/common/scripts/stress-testing/deploy-stress-tests.ps1 index f4da78bd5225..01920bdcbfe1 100644 --- a/eng/common/scripts/stress-testing/deploy-stress-tests.ps1 +++ b/eng/common/scripts/stress-testing/deploy-stress-tests.ps1 @@ -21,7 +21,10 @@ param( [switch] $CI = ($null -ne $env:SYSTEM_TEAMPROJECTID), # Optional namespace override, otherwise the shell user or chart annotation will be used - [string]$Namespace + [string]$Namespace, + + # Override remote stress-test-addons with local on-disk addons for development + [System.IO.FileInfo]$LocalAddonsPath ) . $PSScriptRoot/stress-test-deployment-lib.ps1 diff --git a/eng/common/scripts/stress-testing/find-all-stress-packages.ps1 b/eng/common/scripts/stress-testing/find-all-stress-packages.ps1 index 3456cee68951..24c27da485f0 100644 --- a/eng/common/scripts/stress-testing/find-all-stress-packages.ps1 +++ b/eng/common/scripts/stress-testing/find-all-stress-packages.ps1 @@ -9,6 +9,7 @@ class StressTestPackageInfo { [string]$ReleaseName [string]$Dockerfile [string]$DockerBuildDir + [string]$Deployer } function FindStressPackages( @@ -50,6 +51,17 @@ function MatchesAnnotations([hashtable]$chart, [hashtable]$filters) { return $true } +function GetUsername() { + # Check GITHUB_USER for users in codespaces environments, since the default user is `codespaces` and + # we would like to avoid namespace overlaps for different codespaces users. + $stressUser = $env:GITHUB_USER ?? $env:USER ?? $env:USERNAME + # Remove spaces, underscores, etc. that may be in $namespace. + # Value must be a valid RFC 1123 DNS label: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-label-names + $stressUser = $stressUser -replace '_|\W', '-' + + return $stressUser.ToLower() +} + function NewStressTestPackageInfo( [hashtable]$chart, [System.IO.FileInfo]$chartFile, @@ -61,18 +73,7 @@ function NewStressTestPackageInfo( } elseif ($CI) { $chart.annotations.namespace } else { - # Check GITHUB_USER for users in codespaces environments, since the default user is `codespaces` and - # we would like to avoid namespace overlaps for different codespaces users. - $namespace = if ($env:GITHUB_USER) { - $env:GITHUB_USER - } elseif ($env:USER) { - $env:USER - } else { - $env:USERNAME - } - # Remove spaces, underscores, etc. that may be in $namespace. Value must be a valid RFC 1123 DNS label: - # https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#dns-label-names - $namespace -replace '_|\W', '-' + GetUsername } return [StressTestPackageInfo]@{ diff --git a/eng/common/scripts/stress-testing/stress-test-deployment-lib.ps1 b/eng/common/scripts/stress-testing/stress-test-deployment-lib.ps1 index da91279fd63b..0b57f1fb9338 100644 --- a/eng/common/scripts/stress-testing/stress-test-deployment-lib.ps1 +++ b/eng/common/scripts/stress-testing/stress-test-deployment-lib.ps1 @@ -67,11 +67,18 @@ function DeployStressTests( [string]$repository = '', [switch]$pushImages, [string]$clusterGroup = '', - [string]$deployId = 'local', + [string]$deployId = '', [switch]$login, [string]$subscription = '', [switch]$CI, - [string]$Namespace + [string]$Namespace, + [ValidateScript({ + if (!(Test-Path $_)) { + throw "LocalAddonsPath $LocalAddonsPath does not exist" + } + return $true + })] + [System.IO.FileInfo]$LocalAddonsPath ) { if ($environment -eq 'test') { if ($clusterGroup -or $subscription) { @@ -94,10 +101,21 @@ function DeployStressTests( Login -subscription $subscription -clusterGroup $clusterGroup -pushImages:$pushImages } - RunOrExitOnFailure helm repo add stress-test-charts https://stresstestcharts.blob.core.windows.net/helm/ + $chartRepoName = 'stress-test-charts' + if ($LocalAddonsPath) { + $absAddonsPath = Resolve-Path $LocalAddonsPath + if (!(helm plugin list | Select-String 'file')) { + RunOrExitOnFailure helm plugin add (Join-Path $absAddonsPath file-plugin) + } + RunOrExitOnFailure helm repo add --force-update $chartRepoName file://$absAddonsPath + } else { + RunOrExitOnFailure helm repo add --force-update $chartRepoName https://stresstestcharts.blob.core.windows.net/helm/ + } + Run helm repo update if ($LASTEXITCODE) { return $LASTEXITCODE } + $deployer = if ($deployId) { $deployId } else { GetUsername } $pkgs = FindStressPackages -directory $searchDirectory -filters $filters -CI:$CI -namespaceOverride $Namespace Write-Host "" "Found $($pkgs.Length) stress test packages:" Write-Host $pkgs.Directory "" @@ -105,15 +123,15 @@ function DeployStressTests( Write-Host "Deploying stress test at '$($pkg.Directory)'" DeployStressPackage ` -pkg $pkg ` - -deployId $deployId ` + -deployId $deployer ` -environment $environment ` -repositoryBase $repository ` -pushImages:$pushImages ` -login:$login } - Write-Host "Releases deployed by $deployId" - Run helm list --all-namespaces -l deployId=$deployId + Write-Host "Releases deployed by $deployer" + Run helm list --all-namespaces -l deployId=$deployer if ($FailedCommands) { Write-Warning "The following commands failed:"