Skip to content

Commit 8cbb06f

Browse files
authored
Fix issues for Az.Tools.Installer (Azure#20577)
* Fix issues for Az.Tools.Installer 1. Fix bugs in installation and updating 2. Fix coding formatting issues 3. Add test cases of installation and updating without Repository * Address review comments
1 parent f8d2f8a commit 8cbb06f

File tree

7 files changed

+72
-15
lines changed

7 files changed

+72
-15
lines changed

tools/Az.Tools.Installer/Az.Tools.Installer.psm1

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ function Get-AzModuleFromRemote {
356356
$modulesWithVersion = @()
357357
$containValidModule = if ($Name) {$Name -Contains 'Az.Accounts'} else {$false}
358358
$module = $null
359-
foreach($module in $modules.Dependencies) {
359+
foreach ($module in $modules.Dependencies) {
360360
if ($module.Name -eq 'Az.Accounts') {
361361
if ($UseExactAccountVersion) {
362362
$version = $accountVersion
@@ -400,7 +400,7 @@ function Remove-AzureRM {
400400
process {
401401
try {
402402
$azureModuleNames = (Get-InstalledModule -Name Azure* -ErrorAction Stop).Name | Where-Object {$_ -match "Azure(\.[a-zA-Z0-9]+)?" -or $_ -match "AzureRM(\.[a-zA-Z0-9]+)?"}
403-
foreach($moduleName in $azureModuleNames) {
403+
foreach ($moduleName in $azureModuleNames) {
404404
PowerShellGet\Uninstall-Module -Name $moduleName -AllVersion -AllowPrerelease -ErrorAction Continue
405405
}
406406
}
@@ -427,7 +427,7 @@ $exportedFunctions = @( Get-ChildItem -Path $PSScriptRoot/exports/*.ps1 -Recurse
427427
$internalFunctions = @( Get-ChildItem -Path $PSScriptRoot/internal/*.ps1 -ErrorAction SilentlyContinue )
428428

429429
$allFunctions = $internalFunctions + $exportedFunctions
430-
foreach($function in $allFunctions) {
430+
foreach ($function in $allFunctions) {
431431
try {
432432
. $function.Fullname
433433
}

tools/Az.Tools.Installer/exports/Uninstall-AzModule.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ function Uninstall-AzModule {
125125
"$_"
126126
}
127127
}
128-
foreach($versionString in $versionStrings) {
128+
foreach ($versionString in $versionStrings) {
129129
PowerShellGet\Uninstall-Module -Name $moduleName -RequiredVersion $versionString -AllowPrerelease -ErrorAction 'Continue'
130130
}
131131
}

tools/Az.Tools.Installer/exports/Update-AzModule.ps1

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,10 @@ function Update-AzModule {
9191
$findModuleParams.Add('Repository', $Repository)
9292
}
9393
$modulesToUpdate = Get-AzModuleFromRemote @findModuleParams
94-
$Repository = $modulesToUpdate.Repository | Select-Object -First 1
94+
if ($modulesToUpdate) {
95+
$Repository = $modulesToUpdate.Repository | Select-Object -First 1
96+
}
97+
9598
$moduleUpdateTable = $modulesToUpdate | Foreach-Object { [PSCustomObject]@{
9699
Name = $_.Name
97100
VersionBeforeUpdate = [Version] ($groupSet[$_.Name] | Select-Object -First 1)
@@ -120,7 +123,7 @@ function Update-AzModule {
120123

121124
if ($WhatIfPreference) {
122125
$module = $null
123-
foreach($module in $moduleUpdateTable) {
126+
foreach ($module in $moduleUpdateTable) {
124127
Write-Host "WhatIf: Will update $($module.Name) from $($module.VersionBeforeUpdate) to $($module.VersionUpdate)."
125128
}
126129
}

tools/Az.Tools.Installer/internal/Install-AzModuleInternal.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ function Install-AzModuleInternal {
8686
}
8787
$downloader.WaitForAllTasks()
8888
$file = $null
89-
foreach($file in $fileList) {
89+
foreach ($file in $fileList) {
9090
if (!(Test-Path -Path $file.Path)) {
9191
Throw "[$Invoker] Fail to download $($file.Name) to $tempRepo. Please check your network connection and retry."
9292
}

tools/Az.Tools.Installer/internal/Install-AzModule_Default.ps1

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,12 +80,15 @@ function Install-AzModule_Default {
8080

8181
$modules = @()
8282
$modules += Get-AzModuleFromRemote @findModuleParams | Sort-Object -Property Name
83-
$Repository = $modules.Repository | Select-Object -First 1
83+
if ($modules) {
84+
$Repository = $modules.Repository | Select-Object -First 1
85+
}
8486

8587
if($Name) {
8688
$moduleExcluded = $Name | Where-Object {!$modules -or $modules.Name -NotContains $_}
8789
if ($moduleExcluded) {
8890
$azVersion = if ($RequiredAzVersion) {$RequiredAzVersion} else {"Latest"}
91+
$Repository = if ($Repository) {$Repository} else {'the registered repositories'}
8992
Write-Error "[$Invoker] The following specified modules:$moduleExcluded cannot be found in $Repository with the $azVersion version."
9093
}
9194
}

tools/Az.Tools.Installer/test/Install-AzModule.Tests.ps1

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@ Describe 'Install-AzModule' {
2626
$modules.Name | Should -Contain 'Az.Storage'
2727
$modules.Name | Should -Contain 'Az.Network'
2828
$modules.Name | Should -Contain 'Az.Compute'
29-
$modules.Name | Should -Contain 'Az.KeyVault'
29+
$modules.Name | Should -Contain 'Az.KeyVault'
3030
}
3131

3232
It 'InstallByNamePrerelease' {
3333
$output = Install-AzModule -Name storage,neTwork,maps,Az.keyvault -Repository PSGallery -AllowPrerelease
3434
$output.Count | Should -Be 5
3535
$modules = Get-AzSubModule
3636
$modules.Count | Should -Be 5
37-
$modules.Name | Should -Contain 'Az.Accounts'
37+
$modules.Name | Should -Contain 'Az.Accounts'
3838
$modules.Name | Should -Contain 'Az.Storage'
3939
$modules.Name | Should -Contain 'Az.Network'
4040
$modules.Name | Should -Contain 'Az.Maps'
@@ -44,12 +44,12 @@ Describe 'Install-AzModule' {
4444
$output.Count | Should -Be 4
4545
$modules = Get-AzSubModule
4646
$modules.Count | Should -Be 6
47-
$modules.Name | Should -Contain 'Az.Accounts'
47+
$modules.Name | Should -Contain 'Az.Accounts'
4848
$modules.Name | Should -Contain 'Az.Storage'
4949
$modules.Name | Should -Contain 'Az.Network'
5050
$modules.Name | Should -Contain 'Az.Maps'
5151
$modules.Name | Should -Contain 'Az.KeyVault'
52-
$modules.Name | Should -Contain 'Az.Resources'
52+
$modules.Name | Should -Contain 'Az.Resources'
5353
}
5454

5555
It 'InstallByNameLatest' {
@@ -105,7 +105,35 @@ Describe 'Install-AzModule' {
105105
$modules.Name | Should -Contain 'Az.Storage'
106106
}
107107

108+
It 'InstallWithoutRepository' {
109+
$repos = [Array](Get-PSRepository | Where-Object {$_.Name -ne 'PSGallery'})
110+
if ($repos -ne $null) {
111+
$repos | Unregister-PSRepository
112+
}
113+
try {
114+
$output = Install-AzModule -Name storage,neTwork -RequiredAzVersion 6.3 -Scope 'CurrentUser'
115+
$output.Count | Should -Be 3
116+
$modules = Get-AzSubModule
117+
$modules.Count | Should -Be 3
118+
$modules.Name | Should -Contain 'Az.Accounts'
119+
$modules.Name | Should -Contain 'Az.Storage'
120+
$modules.Name | Should -Contain 'Az.Network'
121+
}
122+
finally {
123+
foreach ($repo in $repos) {
124+
if ($repo.Name -ne 'PSGallery') {
125+
$parameters = @{
126+
Name = $repo.Name
127+
SourceLocation = $repo.SourceLocation
128+
InstallationPolicy = $repo.InstallationPolicy
129+
}
130+
Register-PSRepository @parameters
131+
}
132+
}
133+
}
134+
}
135+
108136
AfterEach {
109-
Remove-AllAzModule
137+
Remove-AllAzModule
110138
}
111-
}
139+
}

tools/Az.Tools.Installer/test/Update-AzModule.Tests.ps1

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ Describe 'Update-AzModule' {
5959
$modules.Name | Should -Contain 'Az.Network'
6060
$modules.Name | Should -Contain 'Az.Storage'
6161

62-
foreach($module in $output) {
62+
foreach ($module in $output) {
6363
(Find-Module -Name $module.Name -Repository PSGallery).Version | Should -Be $module.VersionUpdate
6464
}
6565
}
@@ -84,6 +84,29 @@ Describe 'Update-AzModule' {
8484
$output.Count | Should -Be 1
8585
}
8686

87+
It 'UpdateWithoutRepository' {
88+
$repos = [Array](Get-PSRepository | Where-Object {$_.Name -ne 'PSGallery'})
89+
if ($repos -ne $null) {
90+
$repos | Unregister-PSRepository
91+
}
92+
try {
93+
$output = Update-AzModule -Name storage -Scope 'CurrentUser'
94+
$output.Count | Should -Be 2
95+
}
96+
finally {
97+
foreach ($repo in $repos) {
98+
if ($repo.Name -ne 'PSGallery') {
99+
$parameters = @{
100+
Name = $repo.Name
101+
SourceLocation = $repo.SourceLocation
102+
InstallationPolicy = $repo.InstallationPolicy
103+
}
104+
Register-PSRepository @parameters
105+
}
106+
}
107+
}
108+
}
109+
87110
AfterEach {
88111
Remove-AllAzModule
89112
}

0 commit comments

Comments
 (0)