code: func watchTillerUntilReady(namespace string, client kubernetes.Interface, timeout int64, newImage string) bool {
  	deadlinePollingChan := time.NewTimer(time.Duration(timeout) * time.Second).C
  	checkTillerPodTicker := time.NewTicker(500 * time.Millisecond)
  	doneChan := make(chan bool)
  
  	defer checkTillerPodTicker.Stop()
  
  	go func() {
  		for range checkTillerPodTicker.C {
  			image, err := portforwarder.GetTillerPodImage(client.CoreV1(), namespace)
  			if err == nil && image == newImage {
  				doneChan <- true
  				break
  			}
  		}
  	}()
  
  	for {
  		select {
  		case <-deadlinePollingChan:
  			return false
  		case <-doneChan:
  			return true
  		}
  	}
  }
docs: // watchTillerUntilReady waits for the tiller pod to become available. This is useful in situations where we
  // want to wait before we call New().
  //
  // Returns true if it exists. If the timeout was reached and it could not find the pod, it returns false.