@@ -51,6 +51,13 @@ const (
5151 redisDockerImageName = "redislabs/rejson"
5252 zipkinDockerImageName = "openzipkin/zipkin"
5353
54+ githubContainerRegistryName = "ghcr"
55+ ghcrURI = "ghcr.io/dapr"
56+ daprGhcrImageName = "dapr"
57+ dockerContainerRegistryName = "dockerhub"
58+ redisGhcrImageName = "3rdparty/redis"
59+ zipkinGhcrImageName = "3rdparty/zipkin"
60+
5461 // DaprPlacementContainerName is the container name of placement service.
5562 DaprPlacementContainerName = "dapr_placement"
5663 // DaprRedisContainerName is the container name of redis.
@@ -64,6 +71,11 @@ const (
6471 dockerImageSubDir = "docker"
6572)
6673
74+ var (
75+ defaultImageRegistryName string
76+ privateRegTemplateString = "%s/dapr/%s"
77+ )
78+
6779type configuration struct {
6880 APIVersion string `yaml:"apiVersion"`
6981 Kind string `yaml:"kind"`
@@ -99,12 +111,12 @@ type componentMetadataItem struct {
99111}
100112
101113type initInfo struct {
102- fromDir string
103- slimMode bool
104- runtimeVersion string
105- dashboardVersion string
106- dockerNetwork string
107- imageRepositoryURL string
114+ fromDir string
115+ slimMode bool
116+ runtimeVersion string
117+ dashboardVersion string
118+ dockerNetwork string
119+ imageRegistryURL string
108120}
109121
110122// Check if the previous version is already installed.
@@ -120,16 +132,20 @@ func isBinaryInstallationRequired(binaryFilePrefix, installDir string) (bool, er
120132}
121133
122134// Init installs Dapr on a local machine using the supplied runtimeVersion.
123- func Init (runtimeVersion , dashboardVersion string , dockerNetwork string , slimMode bool , imageRepositoryURL string , fromDir string ) error {
135+ func Init (runtimeVersion , dashboardVersion string , dockerNetwork string , slimMode bool , imageRegistryURL string , fromDir string ) error {
136+ var err error
124137 if ! slimMode {
125138 dockerInstalled := utils .IsDockerInstalled ()
126139 if ! dockerInstalled {
127140 return errors .New ("could not connect to Docker. Docker may not be installed or running" )
128141 }
142+ defaultImageRegistryName , err = utils .GetDefaultRegistry (githubContainerRegistryName , dockerContainerRegistryName )
143+ if err != nil {
144+ return err
145+ }
129146 }
130147
131148 if runtimeVersion == latestVersion && fromDir == "" {
132- var err error
133149 runtimeVersion , err = cli_ver .GetDaprVersion ()
134150 if err != nil {
135151 return fmt .Errorf ("cannot get the latest release version: '%w'. Try specifying --runtime-version=<desired_version>" , err )
@@ -139,7 +155,6 @@ func Init(runtimeVersion, dashboardVersion string, dockerNetwork string, slimMod
139155 print .InfoStatusEvent (os .Stdout , "Installing runtime version %s" , runtimeVersion )
140156
141157 if dashboardVersion == latestVersion && fromDir == "" {
142- var err error
143158 dashboardVersion , err = cli_ver .GetDashboardVersion ()
144159 if err != nil {
145160 print .WarningStatusEvent (os .Stdout , "cannot get the latest dashboard version: '%s'. Try specifying --dashboard-version=<desired_version>" , err )
@@ -157,7 +172,7 @@ func Init(runtimeVersion, dashboardVersion string, dockerNetwork string, slimMod
157172 }
158173
159174 daprBinDir := defaultDaprBinPath ()
160- err : = prepareDaprInstallDir (daprBinDir )
175+ err = prepareDaprInstallDir (daprBinDir )
161176 if err != nil {
162177 return err
163178 }
@@ -197,12 +212,12 @@ func Init(runtimeVersion, dashboardVersion string, dockerNetwork string, slimMod
197212 }
198213
199214 info := initInfo {
200- fromDir : fromDir ,
201- slimMode : slimMode ,
202- runtimeVersion : runtimeVersion ,
203- dashboardVersion : dashboardVersion ,
204- dockerNetwork : dockerNetwork ,
205- imageRepositoryURL : imageRepositoryURL ,
215+ fromDir : fromDir ,
216+ slimMode : slimMode ,
217+ runtimeVersion : runtimeVersion ,
218+ dashboardVersion : dashboardVersion ,
219+ dockerNetwork : dockerNetwork ,
220+ imageRegistryURL : imageRegistryURL ,
206221 }
207222 for _ , step := range initSteps {
208223 // Run init on the configurations and containers.
@@ -268,13 +283,22 @@ func runZipkin(wg *sync.WaitGroup, errorChan chan<- error, info initInfo) {
268283 }
269284 args := []string {}
270285
286+ var imageName string
287+
271288 if exists {
272289 // do not create container again if it exists.
273290 args = append (args , "start" , zipkinContainerName )
274291 } else {
275- imageName := zipkinDockerImageName
276- if info .imageRepositoryURL != "" {
277- imageName = fmt .Sprintf ("%s/%s" , info .imageRepositoryURL , imageName )
292+ if info .imageRegistryURL != "" && info .imageRegistryURL != ghcrURI && info .imageRegistryURL != "docker.io" {
293+ imageName = fmt .Sprintf (privateRegTemplateString , info .imageRegistryURL , zipkinGhcrImageName )
294+ } else if defaultImageRegistryName == githubContainerRegistryName && info .imageRegistryURL == "" {
295+ imageName = fmt .Sprintf ("%s/%s" , ghcrURI , zipkinGhcrImageName )
296+ } else if defaultImageRegistryName == dockerContainerRegistryName && info .imageRegistryURL == "" {
297+ imageName = zipkinDockerImageName
298+ } else {
299+ err = fmt .Errorf ("either %s or Env variable %s not set properly" , "--image-registry" , "DAPR_DEFAULT_IMAGE_REGISTRY" )
300+ errorChan <- err
301+ return
278302 }
279303
280304 args = append (args ,
@@ -327,13 +351,21 @@ func runRedis(wg *sync.WaitGroup, errorChan chan<- error, info initInfo) {
327351 }
328352 args := []string {}
329353
354+ var imageName string
330355 if exists {
331356 // do not create container again if it exists.
332357 args = append (args , "start" , redisContainerName )
333358 } else {
334- imageName := redisDockerImageName
335- if info .imageRepositoryURL != "" {
336- imageName = fmt .Sprintf ("%s/%s" , info .imageRepositoryURL , imageName )
359+ if info .imageRegistryURL != "" && info .imageRegistryURL != ghcrURI && info .imageRegistryURL != "docker.io" {
360+ imageName = fmt .Sprintf (privateRegTemplateString , info .imageRegistryURL , redisGhcrImageName )
361+ } else if defaultImageRegistryName == githubContainerRegistryName && info .imageRegistryURL == "" {
362+ imageName = fmt .Sprintf ("%s/%s" , ghcrURI , redisGhcrImageName )
363+ } else if defaultImageRegistryName == dockerContainerRegistryName && info .imageRegistryURL == "" {
364+ imageName = redisDockerImageName
365+ } else {
366+ err = fmt .Errorf ("either %s or Env variable %s not set properly" , "--image-registry" , "DAPR_DEFAULT_IMAGE_REGISTRY" )
367+ errorChan <- err
368+ return
337369 }
338370
339371 args = append (args ,
@@ -378,14 +410,24 @@ func runPlacementService(wg *sync.WaitGroup, errorChan chan<- error, info initIn
378410
379411 placementContainerName := utils .CreateContainerName (DaprPlacementContainerName , info .dockerNetwork )
380412
381- image := fmt .Sprintf ("%s:%s" , daprDockerImageName , info .runtimeVersion )
382- if info .imageRepositoryURL != "" {
383- image = fmt .Sprintf ("%s/%s" , info .imageRepositoryURL , image )
384- }
385-
386- // Use only image for latest version.
387- if info .runtimeVersion == latestVersion {
388- image = daprDockerImageName
413+ var image string
414+
415+ if info .imageRegistryURL != "" && info .imageRegistryURL != ghcrURI && info .imageRegistryURL != "docker.io" {
416+ image = getPlacementImageWithTag (daprGhcrImageName , info .runtimeVersion )
417+ image = fmt .Sprintf (privateRegTemplateString , info .imageRegistryURL , image )
418+ } else if defaultImageRegistryName == githubContainerRegistryName && info .imageRegistryURL == "" {
419+ image = getPlacementImageWithTag (daprGhcrImageName , info .runtimeVersion )
420+ image = fmt .Sprintf ("%s/%s" , ghcrURI , image )
421+ if ! TryPullImage (image ) {
422+ print .InfoStatusEvent (os .Stdout , "Placement image not found in Github container registry, pulling it from Docker Hub" )
423+ image = getPlacementImageWithTag (daprDockerImageName , info .runtimeVersion )
424+ }
425+ } else if defaultImageRegistryName == dockerContainerRegistryName && info .imageRegistryURL == "" {
426+ image = getPlacementImageWithTag (daprDockerImageName , info .runtimeVersion )
427+ } else {
428+ err := fmt .Errorf ("either %s or Env variable %s not set properly" , "--image-registry" , "DAPR_DEFAULT_IMAGE_REGISTRY" )
429+ errorChan <- err
430+ return
389431 }
390432
391433 exists , err := confirmContainerIsRunningOrExists (placementContainerName , false )
@@ -1013,3 +1055,10 @@ func parseVersionFile(fromDir string) (string, string) {
10131055
10141056 return versions [daprRuntimeFilePrefix ], versions [dashboardFilePrefix ]
10151057}
1058+
1059+ func getPlacementImageWithTag (name , version string ) string {
1060+ if version == latestVersion {
1061+ return name
1062+ }
1063+ return fmt .Sprintf ("%s:%s" , name , version )
1064+ }
0 commit comments