PSResourceGet icon indicating copy to clipboard operation
PSResourceGet copied to clipboard

Using Microsoft Container Registry as Trusted Package Management repository

Open Gijsreyn opened this issue 1 year ago • 2 comments

Prerequisites

  • [X] Write a descriptive title.
  • [X] Make sure you are able to repro it on the latest released version
  • [X] Search the existing issues.

Steps to reproduce

After Sydney's Trusted Package Management presentation during PSConfEU 2024 Minicon, I was curious to give it a try. Unfortunately, I'm stumbling on the following error message:

Install-PSResource: Repository 'mar' is not a known repository type that is supported. Please file an issue for support at https://github.com/PowerShell/PSResourceGet/issues

The steps to reproduce the issue:

  1. Run the following command: Register-PSResourceRepository -Name mar -Uri 'https://mcr.microsoft.com' -Trusted
  2. Install the module by running the following: Install-PSResource -Name Az.Accounts -Repository mar

The error message appears. Did I miss a step while registering or installing?

Expected behavior

Should install Az.Accounts module using MAR as repository.

Actual behavior

See description.

Error details

No response

Environment data

ModuleType Version    PreRelease Name                                ExportedCommands
---------- -------    ---------- ----                                ----------------
Binary     1.1.0      preview2   Microsoft.PowerShell.PSResourceGet  {Compress-PSResource, Find-PSResource, Get-Instal…

Key   : PSVersion
Value : 7.4.5
Name  : PSVersion


Key   : PSEdition
Value : Core
Name  : PSEdition


Key   : GitCommitId
Value : 7.4.5
Name  : GitCommitId


Key   : OS
Value : Microsoft Windows 10.0.26100
Name  : OS


Key   : Platform
Value : Win32NT
Name  : Platform


Key   : PSCompatibleVersions
Value : {1.0, 2.0, 3.0, 4.0…}
Name  : PSCompatibleVersions


Key   : PSRemotingProtocolVersion
Value : 2.3
Name  : PSRemotingProtocolVersion


Key   : SerializationVersion
Value : 1.1.0.1
Name  : SerializationVersion


Key   : WSManStackVersion
Value : 3.0
Name  : WSManStackVersion

Visuals

No response

Gijsreyn avatar Oct 20 '24 01:10 Gijsreyn

Interesting. I found some more relevant resources:

I found that you can set ApiVersion to be ContainerRegistry (it was set to Unknown by default):

# Either when registering MCR
Register-PSResourceRepository -Name 'mcr' -Uri 'https://mcr.microsoft.com' -ApiVersion 'ContainerRegistry'

# Or after it has been registered
Set-PSResourceRepository -Name 'mcr' -ApiVersion 'ContainerRegistry'

It still does not work though.

PS > Find-PSResource -Repository 'mcr' -Name 'Az.Accounts' -Debug -Verbose

DEBUG: In FindPSResource::ProcessResourceNameParameterSet()
DEBUG: Filtering package name(s) on wildcards
DEBUG: In FindHelper::FindByResourceName()
DEBUG: Parameters passed in >>> Name: 'Az.Accounts'; ResourceType: 'None'; VersionRange: ''; NuGetVersion: ''; VersionType: 'NoVersion'; Version: ''; Prerelease: 'False'; Tag: ''; Repository: 'mcr'; IncludeDependencies 'False'
DEBUG: Searching through repository 'mcr'
DEBUG: In FindHelper::SearchByNames()
DEBUG: No version specified, package name is specified
DEBUG: In ContainerRegistryServerAPICalls::FindName()
DEBUG: In ContainerRegistryServerAPICalls::FindPackagesWithVersionHelper()
DEBUG: In ContainerRegistryServerAPICalls::GetContainerRegistryAccessToken()
DEBUG: In ContainerRegistryServerAPICalls::IsContainerRegistryUnauthenticated()
VERBOSE: Repository is unauthenticated
DEBUG: In ContainerRegistryServerAPICalls::GetContainerRegistryRefreshToken()
DEBUG: In ContainerRegistryServerAPICalls::GetHttpResponseJObjectUsingContentHeaders()
Find-PSResource: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.

PS >

Using v1.1.0-preview2.

o-l-a-v avatar Oct 21 '24 18:10 o-l-a-v

Interesting. I found some more relevant resourves:

  • Blog post: https://devblogs.microsoft.com/powershell/psresourceget-support-for-azure-container-registry-acr-is-in-preview/
  • Limitations: https://learn.microsoft.com/en-us/powershell/gallery/powershellget/how-to/use-acr-repository?view=powershellget-3.x#limitations
  • Az.Accounts in MCR: https://mcr.microsoft.com/en-us/artifact/mar/azure-powershell/az.accounts/tags

I found that you can set ApiVersion to be ContainerRegistry (it was set to Unknown by default):

# Either when registering MCR
Register-PSResourceRepository -Name 'mcr' -Uri 'https://mcr.microsoft.com' -ApiVersion 'ContainerRegistry'

# Or after it has been registered
Set-PSResourceRepository -Name 'mcr' -ApiVersion 'ContainerRegistry'

It still does not work though.

PS > Find-PSResource -Repository 'mcr' -Name 'Az.Accounts' -Debug -Verbose

DEBUG: In FindPSResource::ProcessResourceNameParameterSet()
DEBUG: Filtering package name(s) on wildcards
DEBUG: In FindHelper::FindByResourceName()
DEBUG: Parameters passed in >>> Name: 'Az.Accounts'; ResourceType: 'None'; VersionRange: ''; NuGetVersion: ''; VersionType: 'NoVersion'; Version: ''; Prerelease: 'False'; Tag: ''; Repository: 'mcr'; IncludeDependencies 'False'
DEBUG: Searching through repository 'mcr'
DEBUG: In FindHelper::SearchByNames()
DEBUG: No version specified, package name is specified
DEBUG: In ContainerRegistryServerAPICalls::FindName()
DEBUG: In ContainerRegistryServerAPICalls::FindPackagesWithVersionHelper()
DEBUG: In ContainerRegistryServerAPICalls::GetContainerRegistryAccessToken()
DEBUG: In ContainerRegistryServerAPICalls::IsContainerRegistryUnauthenticated()
VERBOSE: Repository is unauthenticated
DEBUG: In ContainerRegistryServerAPICalls::GetContainerRegistryRefreshToken()
DEBUG: In ContainerRegistryServerAPICalls::GetHttpResponseJObjectUsingContentHeaders()
Find-PSResource: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.

PS >

Using v1.1.0-preview2.

Thanks for sharing Ivan. I didn't know that parameter could be used for it. I learned today :)

Gijsreyn avatar Oct 22 '24 01:10 Gijsreyn

Thanks to PR #1737 I found a URL that lists tags for Az.Accounts:

And I think this should be the URL for the manifest of v2.12.1, but it gives an error:

o-l-a-v avatar Oct 28 '24 15:10 o-l-a-v

Thanks for the attentiveness @o-l-a-v. @adityapatwardhan Is this issue related to the PR?

Gijsreyn avatar Oct 29 '24 04:10 Gijsreyn

The work for MAR as the artifact repository is not complete yet. More news coming soon /cc @SydneyhSmith

adityapatwardhan avatar Oct 29 '24 04:10 adityapatwardhan

I'm a bit eager to test it out, so I validated with the latest changes that are merged from #1737. I can confirm it is working now. Thanks!

P.S. Is it needed to set the testhook?

Gijsreyn avatar Oct 31 '24 09:10 Gijsreyn

@SydneyhSmith I was curious if there is a release planned to ship this feature.

Gijsreyn avatar Nov 04 '24 16:11 Gijsreyn

@Gijsreyn the latest release has the api support but we don't yet have any packages in MAR/MCR officially supported ...we are working with teams to get those in there but its a tough time of year right now with the holidays coming up etc. look forward to more progress soon!

SydneyhSmith avatar Nov 05 '24 19:11 SydneyhSmith

Moved to 1.2 because in future we will want to have MCR as a default registered trusted repo

SydneyhSmith avatar Nov 07 '24 19:11 SydneyhSmith

@SydneyhSmith this issue is just about MAR not working properly. I just opened an issue here: https://github.com/PowerShell/PSResourceGet/issues/1749 to track adding MCR as a default repo.

@Gijsreyn's issue should be resolved with the 1.1.0-RC2 release.

alerickson avatar Nov 08 '24 06:11 alerickson

@alerickson Thanks for the heads-up.

Gijsreyn avatar Nov 09 '24 03:11 Gijsreyn