@@ -83,126 +83,133 @@ func GetRegistryAuthSecretName(registryURL string) string {
8383// InitInternalRegistry deploys and starts a new docker registry if necessary
8484func InitInternalRegistry (kubectl * kubernetes.Clientset , helm * helm.HelmClientWrapper , internalRegistry * v1.InternalRegistry , registryConfig * v1.RegistryConfig ) error {
8585 registryReleaseName := * internalRegistry .Release .Name
86+ registryReleaseDeploymentName := registryReleaseName + "-docker-registry"
8687 registryReleaseNamespace := * internalRegistry .Release .Namespace
8788 registryReleaseValues := internalRegistry .Release .Values
8889
89- // Check if registry namespace exists
90- _ , err := kubectl .CoreV1 ().Namespaces ( ).Get (registryReleaseNamespace , metav1.GetOptions {})
90+ // Check if registry already exists
91+ registryDeployment , err := kubectl .ExtensionsV1beta1 ().Deployments ( registryReleaseNamespace ).Get (registryReleaseDeploymentName , metav1.GetOptions {})
9192 if err != nil {
92- // Create registry namespace
93- _ , err = kubectl .CoreV1 ().Namespaces ().Create (& k8sv1.Namespace {
94- ObjectMeta : metav1.ObjectMeta {
95- Name : registryReleaseNamespace ,
96- },
97- })
98-
93+ // Check if registry namespace exists
94+ _ , err := kubectl .CoreV1 ().Namespaces ().Get (registryReleaseNamespace , metav1.GetOptions {})
9995 if err != nil {
100- return err
101- }
102- }
103-
104- _ , err = helm .InstallChartByName (registryReleaseName , registryReleaseNamespace , "stable/docker-registry" , "" , registryReleaseValues )
105- if err != nil {
106- return fmt .Errorf ("Unable to initialize docker registry: %s" , err .Error ())
107- }
96+ // Create registry namespace
97+ _ , err = kubectl .CoreV1 ().Namespaces ().Create (& k8sv1.Namespace {
98+ ObjectMeta : metav1.ObjectMeta {
99+ Name : registryReleaseNamespace ,
100+ },
101+ })
108102
109- if registryConfig != nil && registryConfig . Auth != nil {
110- registryAuth := registryConfig . Auth
111- htpasswdSecretName := registryReleaseName + "-docker-registry-secret"
112- htpasswdSecret , err := kubectl . Core (). Secrets ( registryReleaseNamespace ). Get ( htpasswdSecretName , metav1. GetOptions {})
103+ if err != nil {
104+ return err
105+ }
106+ }
113107
108+ _ , err = helm .InstallChartByName (registryReleaseName , registryReleaseNamespace , "stable/docker-registry" , "" , registryReleaseValues )
114109 if err != nil {
115- return fmt .Errorf ("Unable to retrieve secret for docker registry: %s" , err .Error ())
110+ return fmt .Errorf ("Unable to initialize docker registry: %s" , err .Error ())
116111 }
117112
118- if htpasswdSecret == nil || htpasswdSecret . Data = = nil {
119- htpasswdSecret = & k8sv1. Secret {
120- ObjectMeta : metav1. ObjectMeta {
121- Name : htpasswdSecretName ,
122- },
123- Data : map [ string ][] byte {},
113+ if registryConfig != nil && registryConfig . Auth ! = nil {
114+ registryAuth := registryConfig . Auth
115+ htpasswdSecretName := registryReleaseName + "-docker-registry-secret"
116+ htpasswdSecret , err := kubectl . Core (). Secrets ( registryReleaseNamespace ). Get ( htpasswdSecretName , metav1. GetOptions {})
117+ if err != nil {
118+ return fmt . Errorf ( "Unable to retrieve secret for docker registry: %s" , err . Error ())
124119 }
125- }
126120
127- oldHtpasswdData := htpasswdSecret .Data ["htpasswd" ]
128- newHtpasswdData := htpasswd.HashedPasswords {}
121+ if htpasswdSecret == nil || htpasswdSecret .Data == nil {
122+ htpasswdSecret = & k8sv1.Secret {
123+ ObjectMeta : metav1.ObjectMeta {
124+ Name : htpasswdSecretName ,
125+ },
126+ Data : map [string ][]byte {},
127+ }
128+ }
129129
130- if len (oldHtpasswdData ) != 0 {
131- oldHtpasswdDataBytes := []byte (oldHtpasswdData )
132- newHtpasswdData , _ = htpasswd .ParseHtpasswd (oldHtpasswdDataBytes )
133- }
130+ oldHtpasswdData := htpasswdSecret .Data ["htpasswd" ]
131+ newHtpasswdData := htpasswd.HashedPasswords {}
134132
135- err = newHtpasswdData . SetPassword ( * registryAuth . Username , * registryAuth . Password , htpasswd . HashBCrypt )
136- if err != nil {
137- return fmt . Errorf ( "Unable to set password in htpasswd: %s" , err . Error () )
138- }
133+ if len ( oldHtpasswdData ) != 0 {
134+ oldHtpasswdDataBytes := [] byte ( oldHtpasswdData )
135+ newHtpasswdData , _ = htpasswd . ParseHtpasswd ( oldHtpasswdDataBytes )
136+ }
139137
140- newHtpasswdDataBytes := newHtpasswdData .Bytes ()
138+ err = newHtpasswdData .SetPassword (* registryAuth .Username , * registryAuth .Password , htpasswd .HashBCrypt )
139+ if err != nil {
140+ return fmt .Errorf ("Unable to set password in htpasswd: %s" , err .Error ())
141+ }
141142
142- htpasswdSecret . Data [ "htpasswd" ] = newHtpasswdDataBytes
143+ newHtpasswdDataBytes := newHtpasswdData . Bytes ()
143144
144- _ , err = kubectl .Core ().Secrets (registryReleaseNamespace ).Get (htpasswdSecretName , metav1.GetOptions {})
145- if err != nil {
146- _ , err = kubectl .Core ().Secrets (registryReleaseNamespace ).Create (htpasswdSecret )
147- } else {
148- _ , err = kubectl .Core ().Secrets (registryReleaseNamespace ).Update (htpasswdSecret )
149- }
150- }
151-
152- if err != nil {
153- return fmt .Errorf ("Unable to update htpasswd secret: %s" , err .Error ())
154- }
145+ htpasswdSecret .Data ["htpasswd" ] = newHtpasswdDataBytes
155146
156- registryServiceName := registryReleaseName + "-docker-registry"
157- serviceHostname := ""
158- maxServiceWaiting := 60 * time .Second
159- serviceWaitingInterval := 3 * time .Second
147+ _ , err = kubectl .Core ().Secrets (registryReleaseNamespace ).Get (htpasswdSecretName , metav1.GetOptions {})
148+ if err != nil {
149+ _ , err = kubectl .Core ().Secrets (registryReleaseNamespace ).Create (htpasswdSecret )
150+ } else {
151+ _ , err = kubectl .Core ().Secrets (registryReleaseNamespace ).Update (htpasswdSecret )
152+ }
153+ }
160154
161- for true {
162- registryService , err := kubectl .Core ().Services (registryReleaseNamespace ).Get (registryServiceName , metav1.GetOptions {})
163155 if err != nil {
164- return err
156+ return fmt . Errorf ( "Unable to update htpasswd secret: %s" , err . Error ())
165157 }
166158
167- if len (registryService .Spec .ClusterIP ) > 0 {
168- serviceHostname = registryService .Spec .ClusterIP + ":" + strconv .Itoa (registryPort )
169- break
170- }
159+ registryServiceName := registryReleaseName + "-docker-registry"
160+ serviceHostname := ""
161+ maxServiceWaiting := 60 * time .Second
162+ serviceWaitingInterval := 3 * time .Second
163+
164+ for true {
165+ registryService , err := kubectl .Core ().Services (registryReleaseNamespace ).Get (registryServiceName , metav1.GetOptions {})
166+ if err != nil {
167+ return err
168+ }
169+
170+ if len (registryService .Spec .ClusterIP ) > 0 {
171+ serviceHostname = registryService .Spec .ClusterIP + ":" + strconv .Itoa (registryPort )
172+ break
173+ }
171174
172- time .Sleep (serviceWaitingInterval )
173- maxServiceWaiting = maxServiceWaiting - serviceWaitingInterval
175+ time .Sleep (serviceWaitingInterval )
176+ maxServiceWaiting = maxServiceWaiting - serviceWaitingInterval
174177
175- if maxServiceWaiting <= 0 {
176- return errors .New ("Timeout waiting for registry service to start" )
178+ if maxServiceWaiting <= 0 {
179+ return errors .New ("Timeout waiting for registry service to start" )
180+ }
177181 }
178- }
179182
180- ingressHostname := ""
181- if registryReleaseValues != nil {
182- registryValues := yamlq .NewQuery (* registryReleaseValues )
183- isIngressEnabled , _ := registryValues .Bool ("ingress" , "enabled" )
183+ ingressHostname := ""
184+ if registryReleaseValues != nil {
185+ registryValues := yamlq .NewQuery (* registryReleaseValues )
186+ isIngressEnabled , _ := registryValues .Bool ("ingress" , "enabled" )
184187
185- if isIngressEnabled {
186- firstIngressHostname , _ := registryValues .String ("ingress" , "hosts" , "0" )
188+ if isIngressEnabled {
189+ firstIngressHostname , _ := registryValues .String ("ingress" , "hosts" , "0" )
187190
188- if len (firstIngressHostname ) > 0 {
189- ingressHostname = firstIngressHostname
191+ if len (firstIngressHostname ) > 0 {
192+ ingressHostname = firstIngressHostname
193+ }
190194 }
191195 }
192- }
193196
194- if len (ingressHostname ) == 0 {
195- registryConfig .URL = configutil .String (serviceHostname )
196- registryConfig .Insecure = configutil .Bool (true )
197- } else {
198- registryConfig .URL = configutil .String (ingressHostname )
199- registryConfig .Insecure = configutil .Bool (false )
197+ if len (ingressHostname ) == 0 {
198+ registryConfig .URL = configutil .String (serviceHostname )
199+ registryConfig .Insecure = configutil .Bool (true )
200+ } else {
201+ registryConfig .URL = configutil .String (ingressHostname )
202+ registryConfig .Insecure = configutil .Bool (false )
203+ }
200204 }
201205
202- // Wait till registry is started
203- err = waitForRegistry (registryReleaseNamespace , registryServiceName , kubectl )
204- if err != nil {
205- return err
206+ // Wait for registry if it is not ready yet
207+ if registryDeployment == nil || registryDeployment .Status .Replicas == 0 || registryDeployment .Status .ReadyReplicas != registryDeployment .Status .Replicas {
208+ // Wait till registry is started
209+ err = waitForRegistry (registryReleaseNamespace , registryReleaseDeploymentName , kubectl )
210+ if err != nil {
211+ return err
212+ }
206213 }
207214
208215 return nil
@@ -216,11 +223,11 @@ func waitForRegistry(registryNamespace, registryReleaseDeploymentName string, cl
216223 defer log .StopWait ()
217224
218225 for registryWaitingTime > 0 {
219- registryDeloyment , err := client .ExtensionsV1beta1 ().Deployments (registryNamespace ).Get (registryReleaseDeploymentName , metav1.GetOptions {})
226+ registryDeployment , err := client .ExtensionsV1beta1 ().Deployments (registryNamespace ).Get (registryReleaseDeploymentName , metav1.GetOptions {})
220227 if err != nil {
221228 continue
222229 }
223- if registryDeloyment .Status .ReadyReplicas == registryDeloyment .Status .Replicas {
230+ if registryDeployment .Status .ReadyReplicas == registryDeployment .Status .Replicas {
224231 return nil
225232 }
226233
0 commit comments