Skip to content

Commit 615c25c

Browse files
Fix for image pull from private registry (#940)
* Fix for image pull from private registry Signed-off-by: Pravin Pushkar <[email protected]> * Refactor and unit tests Signed-off-by: Pravin Pushkar <[email protected]> * Including fromDir from airgap mode Signed-off-by: Pravin Pushkar <[email protected]> * review comments Signed-off-by: Pravin Pushkar <[email protected]> * nit fixes Signed-off-by: Pravin Pushkar <[email protected]>
1 parent 3684654 commit 615c25c

File tree

2 files changed

+75
-6
lines changed

2 files changed

+75
-6
lines changed

pkg/standalone/standalone.go

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,13 @@ func Init(runtimeVersion, dashboardVersion string, dockerNetwork string, slimMod
146146
if !dockerInstalled {
147147
return errors.New("could not connect to Docker. Docker may not be installed or running")
148148
}
149-
defaultImageRegistryName, err = utils.GetDefaultRegistry(githubContainerRegistryName, dockerContainerRegistryName)
150-
if err != nil {
151-
return err
149+
150+
// Initialize default registry only if it is not airgap mode or from private registries.
151+
if len(strings.TrimSpace(imageRegistryURL)) == 0 && len(strings.TrimSpace(fromDir)) == 0 {
152+
defaultImageRegistryName, err = utils.GetDefaultRegistry(githubContainerRegistryName, dockerContainerRegistryName)
153+
if err != nil {
154+
return err
155+
}
152156
}
153157
}
154158

@@ -415,19 +419,20 @@ func runPlacementService(wg *sync.WaitGroup, errorChan chan<- error, info initIn
415419

416420
placementContainerName := utils.CreateContainerName(DaprPlacementContainerName, info.dockerNetwork)
417421

418-
image, err := resolveImageURI(daprImageInfo{
422+
imgInfo := daprImageInfo{
419423
ghcrImageName: daprGhcrImageName,
420424
dockerHubImageName: daprDockerImageName,
421425
imageRegistryURL: info.imageRegistryURL,
422426
imageRegistryName: defaultImageRegistryName,
423-
})
427+
}
428+
image, err := resolveImageURI(imgInfo)
424429
if err != nil {
425430
errorChan <- err
426431
return
427432
}
428433
image = getPlacementImageWithTag(image, info.runtimeVersion)
429434

430-
if defaultImageRegistryName == githubContainerRegistryName {
435+
if checkFallbackImgForPlacement(imgInfo, info.fromDir) {
431436
if !TryPullImage(image) {
432437
print.InfoStatusEvent(os.Stdout, "Placement image not found in Github container registry, pulling it from Docker Hub")
433438
image = getPlacementImageWithTag(daprDockerImageName, info.runtimeVersion)
@@ -1067,6 +1072,15 @@ func getPlacementImageWithTag(name, version string) string {
10671072
return fmt.Sprintf("%s:%s", name, version)
10681073
}
10691074

1075+
// Try for fallback image from docker iff this init flow is using GHCR as default registry.
1076+
// TODO: We may want to remove this logic completely after next couple of releases.
1077+
func checkFallbackImgForPlacement(imageInfo daprImageInfo, fromDir string) bool {
1078+
if imageInfo.imageRegistryURL != "" || fromDir != "" {
1079+
return false
1080+
}
1081+
return imageInfo.imageRegistryName == githubContainerRegistryName
1082+
}
1083+
10701084
func resolveImageURI(imageInfo daprImageInfo) (string, error) {
10711085
if imageInfo.imageRegistryURL != "" {
10721086
if imageInfo.imageRegistryURL == ghcrURI || imageInfo.imageRegistryURL == "docker.io" {

pkg/standalone/standalone_test.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,3 +232,58 @@ func TestResolveImageErr(t *testing.T) {
232232
})
233233
}
234234
}
235+
236+
func TestCheckFallbackImg(t *testing.T) {
237+
daprImgWithPrivateRegAndDefAsDocker := daprImageInfo{
238+
ghcrImageName: daprGhcrImageName,
239+
dockerHubImageName: daprDockerImageName,
240+
imageRegistryURL: "example.io/user",
241+
imageRegistryName: "dockerhub",
242+
}
243+
daprImgWithPrivateRegAndDefAsGHCR := daprImageInfo{
244+
ghcrImageName: daprGhcrImageName,
245+
dockerHubImageName: daprDockerImageName,
246+
imageRegistryURL: "example.io/user",
247+
imageRegistryName: "ghcr",
248+
}
249+
daprImgWithPrivateRegAndNoDef := daprImageInfo{
250+
ghcrImageName: daprGhcrImageName,
251+
dockerHubImageName: daprDockerImageName,
252+
imageRegistryURL: "example.io/user",
253+
imageRegistryName: "",
254+
}
255+
daprImgWithDefAsDocker := daprImageInfo{
256+
ghcrImageName: daprGhcrImageName,
257+
dockerHubImageName: daprDockerImageName,
258+
imageRegistryURL: "",
259+
imageRegistryName: "dockerhub",
260+
}
261+
daprImgWithDefAsGHCR := daprImageInfo{
262+
ghcrImageName: daprGhcrImageName,
263+
dockerHubImageName: daprDockerImageName,
264+
imageRegistryURL: "",
265+
imageRegistryName: "ghcr",
266+
}
267+
268+
tests := []struct {
269+
name string
270+
imageInfo daprImageInfo
271+
fromDir string
272+
expect bool
273+
}{
274+
{"checkFallbackImg() with private registry and def as Docker Hub", daprImgWithPrivateRegAndDefAsDocker, "", false},
275+
{"checkFallbackImg() with private registry and def as GHCR", daprImgWithPrivateRegAndDefAsGHCR, "", false},
276+
{"checkFallbackImg() with private registry with no Def", daprImgWithPrivateRegAndNoDef, "", false},
277+
{"checkFallbackImg() with no private registry and def as Docker Hub", daprImgWithDefAsDocker, "", false},
278+
{"checkFallbackImg() with no private registry and def as GHCR", daprImgWithDefAsGHCR, "", true},
279+
{"checkFallbackImg() airgap mode with no private registry and def as GHCR", daprImgWithDefAsGHCR, "testDir", false},
280+
{"checkFallbackImg() airgap mode with no private registry and def as Docker Hub", daprImgWithDefAsDocker, "testDir", false},
281+
}
282+
283+
for _, test := range tests {
284+
t.Run(test.name, func(t *testing.T) {
285+
got := checkFallbackImgForPlacement(test.imageInfo, test.fromDir)
286+
assert.Equal(t, test.expect, got)
287+
})
288+
}
289+
}

0 commit comments

Comments
 (0)