@@ -82,15 +82,13 @@ func NewClient(kubectlClient *kubernetes.Clientset, upgradeTiller bool) (*HelmCl
8282
8383 tillerConfig := config .Services .Tiller
8484 kubeconfig , err := kubectl .GetClientConfig ()
85-
8685 if err != nil {
8786 return nil , err
8887 }
8988
90- tillerErr := ensureTiller (kubectlClient , config , upgradeTiller )
91-
92- if tillerErr != nil {
93- return nil , tillerErr
89+ err = ensureTiller (kubectlClient , config , upgradeTiller )
90+ if err != nil {
91+ return nil , err
9492 }
9593
9694 var tunnel * kube.Tunnel
@@ -104,7 +102,6 @@ func NewClient(kubectlClient *kubernetes.Clientset, upgradeTiller bool) (*HelmCl
104102 // Next we wait till we can establish a tunnel to the running pod
105103 for tunnelWaitTime > 0 {
106104 tunnel , err = portforwarder .New (* tillerConfig .Release .Namespace , kubectlClient , kubeconfig )
107-
108105 if err == nil {
109106 break
110107 }
@@ -146,7 +143,6 @@ func NewClient(kubectlClient *kubernetes.Clientset, upgradeTiller bool) (*HelmCl
146143 }
147144
148145 homeDir , err := homedir .Dir ()
149-
150146 if err != nil {
151147 return nil , err
152148 }
@@ -163,7 +159,10 @@ func NewClient(kubectlClient *kubernetes.Clientset, upgradeTiller bool) (*HelmCl
163159 _ , repoFileNotFound := os .Stat (repoFile )
164160
165161 if repoFileNotFound != nil {
166- fsutil .WriteToFile ([]byte (defaultRepositories ), repoFile )
162+ err = fsutil .WriteToFile ([]byte (defaultRepositories ), repoFile )
163+ if err != nil {
164+ return nil , err
165+ }
167166 }
168167
169168 wrapper := & HelmClientWrapper {
@@ -174,10 +173,13 @@ func NewClient(kubectlClient *kubernetes.Clientset, upgradeTiller bool) (*HelmCl
174173 TillerConfig : tillerConfig ,
175174 kubectl : kubectlClient ,
176175 }
177- _ , stableRepoCacheNotFoundErr := os .Stat (stableRepoCachePathAbs )
178176
179- if stableRepoCacheNotFoundErr != nil {
180- wrapper .updateRepos ()
177+ _ , err = os .Stat (stableRepoCachePathAbs )
178+ if err != nil {
179+ err = wrapper .updateRepos ()
180+ if err != nil {
181+ return nil , err
182+ }
181183 }
182184
183185 return wrapper , nil
@@ -222,10 +224,8 @@ func ensureTiller(kubectlClient *kubernetes.Clientset, config *v1.Config, upgrad
222224 defer log .StopWait ()
223225
224226 _ , err := kubectlClient .CoreV1 ().ServiceAccounts (tillerSA .Namespace ).Get (tillerSA .Name , metav1.GetOptions {})
225-
226227 if err != nil {
227228 _ , err := kubectlClient .CoreV1 ().ServiceAccounts (tillerSA .Namespace ).Create (tillerSA )
228-
229229 if err != nil {
230230 return err
231231 }
@@ -244,12 +244,14 @@ func ensureTiller(kubectlClient *kubernetes.Clientset, config *v1.Config, upgrad
244244 Verbs : []string {k8sv1beta1 .ResourceAll },
245245 },
246246 })
247-
248247 if err != nil {
249248 return err
250249 }
251250
252- helminstaller .Install (kubectlClient , tillerOptions )
251+ err = helminstaller .Install (kubectlClient , tillerOptions )
252+ if err != nil {
253+ return err
254+ }
253255
254256 appNamespaces := []* string {
255257 config .DevSpace .Release .Namespace ,
@@ -258,15 +260,19 @@ func ensureTiller(kubectlClient *kubernetes.Clientset, config *v1.Config, upgrad
258260 if config .Services .InternalRegistry != nil && config .Services .InternalRegistry .Release .Namespace != nil {
259261 appNamespaces = append (appNamespaces , config .Services .InternalRegistry .Release .Namespace )
260262 }
261- tillerConfig .AppNamespaces = & appNamespaces
262263
264+ tillerConfig .AppNamespaces = & appNamespaces
263265 for _ , appNamespace := range * tillerConfig .AppNamespaces {
264- err = ensureRoleBinding (kubectlClient , tillerConfig , tillerRoleName , * appNamespace , defaultPolicyRules )
266+ if * appNamespace == tillerRoleManagerName {
267+ continue
268+ }
265269
270+ err = ensureRoleBinding (kubectlClient , tillerConfig , tillerRoleName , * appNamespace , defaultPolicyRules )
266271 if err != nil {
267272 return err
268273 }
269274 }
275+
270276 log .StopWait ()
271277 log .Done ("Tiller started" )
272278
@@ -326,6 +332,7 @@ func addAppNamespaces(appNamespaces *[]*string, namespaces []*string) {
326332 newAppNamespaces = append (newAppNamespaces , ns )
327333 }
328334 }
335+
329336 appNamespaces = & newAppNamespaces
330337}
331338
@@ -354,33 +361,39 @@ func DeleteTiller(kubectlClient *kubernetes.Clientset, tillerConfig *v1.TillerCo
354361 err := kubectlClient .ExtensionsV1beta1 ().Deployments (tillerNamespace ).Delete (TillerDeploymentName , & metav1.DeleteOptions {
355362 PropagationPolicy : & propagationPolicy ,
356363 })
364+ if err != nil && strings .HasSuffix (err .Error (), "not found" ) == false {
365+ errs = append (errs , err )
366+ }
357367
358- if err != nil {
368+ err = kubectlClient .CoreV1 ().Services (tillerNamespace ).Delete (TillerDeploymentName , & metav1.DeleteOptions {PropagationPolicy : & propagationPolicy })
369+ if err != nil && strings .HasSuffix (err .Error (), "not found" ) == false {
359370 errs = append (errs , err )
360371 }
361372
362373 err = kubectlClient .CoreV1 ().ServiceAccounts (tillerNamespace ).Delete (tillerServiceAccountName , & metav1.DeleteOptions {PropagationPolicy : & propagationPolicy })
363-
364- if err != nil {
374+ if err != nil && strings .HasSuffix (err .Error (), "not found" ) == false {
365375 errs = append (errs , err )
366376 }
367- roleNamespace := append (* tillerConfig .AppNamespaces , & tillerNamespace )
368377
378+ roleNamespace := append (* tillerConfig .AppNamespaces , & tillerNamespace )
369379 for _ , appNamespace := range roleNamespace {
370- roleName := tillerRoleName
371-
372- if * appNamespace == tillerNamespace {
373- roleName = tillerRoleManagerName
380+ err = kubectlClient .RbacV1beta1 ().Roles (* appNamespace ).Delete (tillerRoleName , & metav1.DeleteOptions {PropagationPolicy : & propagationPolicy })
381+ if err != nil && strings .HasSuffix (err .Error (), "not found" ) == false {
382+ errs = append (errs , err )
374383 }
375- err = kubectlClient .RbacV1beta1 ().Roles (* appNamespace ).Delete (roleName , & metav1.DeleteOptions {PropagationPolicy : & propagationPolicy })
376384
377- if err != nil {
385+ err = kubectlClient .RbacV1beta1 ().RoleBindings (* appNamespace ).Delete (tillerRoleName + "-binding" , & metav1.DeleteOptions {PropagationPolicy : & propagationPolicy })
386+ if err != nil && strings .HasSuffix (err .Error (), "not found" ) == false {
378387 errs = append (errs , err )
379388 }
380389
381- err = kubectlClient .RbacV1beta1 ().RoleBindings (* appNamespace ).Delete (roleName + "-binding" , & metav1.DeleteOptions {PropagationPolicy : & propagationPolicy })
390+ err = kubectlClient .RbacV1beta1 ().Roles (* appNamespace ).Delete (tillerRoleManagerName , & metav1.DeleteOptions {PropagationPolicy : & propagationPolicy })
391+ if err != nil && strings .HasSuffix (err .Error (), "not found" ) == false {
392+ errs = append (errs , err )
393+ }
382394
383- if err != nil {
395+ err = kubectlClient .RbacV1beta1 ().RoleBindings (* appNamespace ).Delete (tillerRoleManagerName + "-binding" , & metav1.DeleteOptions {PropagationPolicy : & propagationPolicy })
396+ if err != nil && strings .HasSuffix (err .Error (), "not found" ) == false {
384397 errs = append (errs , err )
385398 }
386399 }
@@ -429,6 +442,8 @@ func ensureRoleBinding(kubectlClient *kubernetes.Clientset, tillerConfig *v1.Til
429442 Name : role .Name ,
430443 },
431444 }
445+
446+ // Ignore Errors
432447 kubectlClient .RbacV1beta1 ().Roles (namespace ).Create (role )
433448 kubectlClient .RbacV1beta1 ().RoleBindings (namespace ).Create (rolebinding )
434449
@@ -437,20 +452,21 @@ func ensureRoleBinding(kubectlClient *kubernetes.Clientset, tillerConfig *v1.Til
437452
438453func (helmClientWrapper * HelmClientWrapper ) updateRepos () error {
439454 allRepos , err := repo .LoadRepositoriesFile (helmClientWrapper .Settings .Home .RepositoryFile ())
440-
441455 if err != nil {
442456 return err
443457 }
458+
444459 repos := []* repo.ChartRepository {}
445460
446461 for _ , repoData := range allRepos .Repositories {
447462 repo , err := repo .NewChartRepository (repoData , getter .All (* helmClientWrapper .Settings ))
448-
449463 if err != nil {
450464 return err
451465 }
466+
452467 repos = append (repos , repo )
453468 }
469+
454470 wg := sync.WaitGroup {}
455471
456472 for _ , re := range repos {
@@ -460,7 +476,6 @@ func (helmClientWrapper *HelmClientWrapper) updateRepos() error {
460476 defer wg .Done ()
461477
462478 err := re .DownloadIndexFile (helmClientWrapper .Settings .Home .String ())
463-
464479 if err != nil {
465480 log .With (err ).Error ("Unable to download repo index" )
466481
@@ -476,21 +491,21 @@ func (helmClientWrapper *HelmClientWrapper) updateRepos() error {
476491
477492// ReleaseExists checks if the given release name exists
478493func (helmClientWrapper * HelmClientWrapper ) ReleaseExists (releaseName string ) (bool , error ) {
479- _ , releaseHistoryErr := helmClientWrapper .Client .ReleaseHistory (releaseName , k8shelm .WithMaxHistory (1 ))
480-
481- if releaseHistoryErr != nil {
482- if strings .Contains (releaseHistoryErr .Error (), helmstoragedriver .ErrReleaseNotFound (releaseName ).Error ()) {
494+ _ , err := helmClientWrapper .Client .ReleaseHistory (releaseName , k8shelm .WithMaxHistory (1 ))
495+ if err != nil {
496+ if strings .Contains (err .Error (), helmstoragedriver .ErrReleaseNotFound (releaseName ).Error ()) {
483497 return false , nil
484498 }
485- return false , releaseHistoryErr
499+
500+ return false , err
486501 }
502+
487503 return true , nil
488504}
489505
490506// InstallChartByPath installs the given chartpath und the releasename in the releasenamespace
491507func (helmClientWrapper * HelmClientWrapper ) InstallChartByPath (releaseName string , releaseNamespace string , chartPath string , values * map [interface {}]interface {}) (* hapi_release5.Release , error ) {
492508 chart , err := helmchartutil .Load (chartPath )
493-
494509 if err != nil {
495510 return nil , err
496511 }
@@ -592,11 +607,11 @@ func (helmClientWrapper *HelmClientWrapper) InstallChartByName(releaseName strin
592607 }
593608 os .MkdirAll (helmClientWrapper .Settings .Home .Archive (), os .ModePerm )
594609
595- chartPath , _ , chartDownloadErr := chartDownloader .DownloadTo (chartName , chartVersion , helmClientWrapper .Settings .Home .Archive ())
596-
597- if chartDownloadErr != nil {
598- return nil , chartDownloadErr
610+ chartPath , _ , err := chartDownloader .DownloadTo (chartName , chartVersion , helmClientWrapper .Settings .Home .Archive ())
611+ if err != nil {
612+ return nil , err
599613 }
614+
600615 return helmClientWrapper .InstallChartByPath (releaseName , releaseNamespace , chartPath , values )
601616}
602617
0 commit comments