in internal/components/setup/common.go [83:127]
func createManifestAndWait(c *util.K8sClusterInfo, manifest config.Manifest, timeout time.Duration) error {
waitSet := util.NewWaitSet(timeout)
waits := manifest.Waits
err := createByManifest(c, manifest)
if err != nil {
return err
}
// len() for nil slices is defined as zero
if len(waits) == 0 {
logger.Log.Info("no wait-for strategy is provided")
return nil
}
for idx := range waits {
wait := waits[idx]
logger.Log.Infof("waiting for %+v", wait)
options, err := getWaitOptions(c, &wait)
if err != nil {
return err
}
waitSet.WaitGroup.Add(1)
go concurrentlyWait(&wait, options, waitSet)
}
go func() {
waitSet.WaitGroup.Wait()
close(waitSet.FinishChan)
}()
select {
case <-waitSet.FinishChan:
logger.Log.Infof("create and wait for manifest ready success")
case err := <-waitSet.ErrChan:
logger.Log.Errorf("failed to wait for manifest to be ready")
return err
case <-time.After(waitSet.Timeout):
return fmt.Errorf("wait for manifest ready timeout after %d seconds", int(timeout.Seconds()))
}
return nil
}