mirror of https://github.com/dapr/cli.git
Fix for image pull from private registry (#940)
* Fix for image pull from private registry Signed-off-by: Pravin Pushkar <ppushkar@microsoft.com> * Refactor and unit tests Signed-off-by: Pravin Pushkar <ppushkar@microsoft.com> * Including fromDir from airgap mode Signed-off-by: Pravin Pushkar <ppushkar@microsoft.com> * review comments Signed-off-by: Pravin Pushkar <ppushkar@microsoft.com> * nit fixes Signed-off-by: Pravin Pushkar <ppushkar@microsoft.com>
This commit is contained in:
parent
3684654834
commit
615c25cae4
|
@ -146,9 +146,13 @@ func Init(runtimeVersion, dashboardVersion string, dockerNetwork string, slimMod
|
|||
if !dockerInstalled {
|
||||
return errors.New("could not connect to Docker. Docker may not be installed or running")
|
||||
}
|
||||
defaultImageRegistryName, err = utils.GetDefaultRegistry(githubContainerRegistryName, dockerContainerRegistryName)
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
// Initialize default registry only if it is not airgap mode or from private registries.
|
||||
if len(strings.TrimSpace(imageRegistryURL)) == 0 && len(strings.TrimSpace(fromDir)) == 0 {
|
||||
defaultImageRegistryName, err = utils.GetDefaultRegistry(githubContainerRegistryName, dockerContainerRegistryName)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -415,19 +419,20 @@ func runPlacementService(wg *sync.WaitGroup, errorChan chan<- error, info initIn
|
|||
|
||||
placementContainerName := utils.CreateContainerName(DaprPlacementContainerName, info.dockerNetwork)
|
||||
|
||||
image, err := resolveImageURI(daprImageInfo{
|
||||
imgInfo := daprImageInfo{
|
||||
ghcrImageName: daprGhcrImageName,
|
||||
dockerHubImageName: daprDockerImageName,
|
||||
imageRegistryURL: info.imageRegistryURL,
|
||||
imageRegistryName: defaultImageRegistryName,
|
||||
})
|
||||
}
|
||||
image, err := resolveImageURI(imgInfo)
|
||||
if err != nil {
|
||||
errorChan <- err
|
||||
return
|
||||
}
|
||||
image = getPlacementImageWithTag(image, info.runtimeVersion)
|
||||
|
||||
if defaultImageRegistryName == githubContainerRegistryName {
|
||||
if checkFallbackImgForPlacement(imgInfo, info.fromDir) {
|
||||
if !TryPullImage(image) {
|
||||
print.InfoStatusEvent(os.Stdout, "Placement image not found in Github container registry, pulling it from Docker Hub")
|
||||
image = getPlacementImageWithTag(daprDockerImageName, info.runtimeVersion)
|
||||
|
@ -1067,6 +1072,15 @@ func getPlacementImageWithTag(name, version string) string {
|
|||
return fmt.Sprintf("%s:%s", name, version)
|
||||
}
|
||||
|
||||
// Try for fallback image from docker iff this init flow is using GHCR as default registry.
|
||||
// TODO: We may want to remove this logic completely after next couple of releases.
|
||||
func checkFallbackImgForPlacement(imageInfo daprImageInfo, fromDir string) bool {
|
||||
if imageInfo.imageRegistryURL != "" || fromDir != "" {
|
||||
return false
|
||||
}
|
||||
return imageInfo.imageRegistryName == githubContainerRegistryName
|
||||
}
|
||||
|
||||
func resolveImageURI(imageInfo daprImageInfo) (string, error) {
|
||||
if imageInfo.imageRegistryURL != "" {
|
||||
if imageInfo.imageRegistryURL == ghcrURI || imageInfo.imageRegistryURL == "docker.io" {
|
||||
|
|
|
@ -232,3 +232,58 @@ func TestResolveImageErr(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestCheckFallbackImg(t *testing.T) {
|
||||
daprImgWithPrivateRegAndDefAsDocker := daprImageInfo{
|
||||
ghcrImageName: daprGhcrImageName,
|
||||
dockerHubImageName: daprDockerImageName,
|
||||
imageRegistryURL: "example.io/user",
|
||||
imageRegistryName: "dockerhub",
|
||||
}
|
||||
daprImgWithPrivateRegAndDefAsGHCR := daprImageInfo{
|
||||
ghcrImageName: daprGhcrImageName,
|
||||
dockerHubImageName: daprDockerImageName,
|
||||
imageRegistryURL: "example.io/user",
|
||||
imageRegistryName: "ghcr",
|
||||
}
|
||||
daprImgWithPrivateRegAndNoDef := daprImageInfo{
|
||||
ghcrImageName: daprGhcrImageName,
|
||||
dockerHubImageName: daprDockerImageName,
|
||||
imageRegistryURL: "example.io/user",
|
||||
imageRegistryName: "",
|
||||
}
|
||||
daprImgWithDefAsDocker := daprImageInfo{
|
||||
ghcrImageName: daprGhcrImageName,
|
||||
dockerHubImageName: daprDockerImageName,
|
||||
imageRegistryURL: "",
|
||||
imageRegistryName: "dockerhub",
|
||||
}
|
||||
daprImgWithDefAsGHCR := daprImageInfo{
|
||||
ghcrImageName: daprGhcrImageName,
|
||||
dockerHubImageName: daprDockerImageName,
|
||||
imageRegistryURL: "",
|
||||
imageRegistryName: "ghcr",
|
||||
}
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
imageInfo daprImageInfo
|
||||
fromDir string
|
||||
expect bool
|
||||
}{
|
||||
{"checkFallbackImg() with private registry and def as Docker Hub", daprImgWithPrivateRegAndDefAsDocker, "", false},
|
||||
{"checkFallbackImg() with private registry and def as GHCR", daprImgWithPrivateRegAndDefAsGHCR, "", false},
|
||||
{"checkFallbackImg() with private registry with no Def", daprImgWithPrivateRegAndNoDef, "", false},
|
||||
{"checkFallbackImg() with no private registry and def as Docker Hub", daprImgWithDefAsDocker, "", false},
|
||||
{"checkFallbackImg() with no private registry and def as GHCR", daprImgWithDefAsGHCR, "", true},
|
||||
{"checkFallbackImg() airgap mode with no private registry and def as GHCR", daprImgWithDefAsGHCR, "testDir", false},
|
||||
{"checkFallbackImg() airgap mode with no private registry and def as Docker Hub", daprImgWithDefAsDocker, "testDir", false},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
got := checkFallbackImgForPlacement(test.imageInfo, test.fromDir)
|
||||
assert.Equal(t, test.expect, got)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue