func waitForResources()

in operator/pkg/install/waiter.go [81:140]


func waitForResources(objects []manifest.Manifest, k kube.Client, l *progress.ManifestLog) (bool, []string, map[string]string, error) {
	pods := []corev1.Pod{}
	deployments := []deployment{}
	statefulsets := []*appsv1.StatefulSet{}
	namespaces := []corev1.Namespace{}
	crds := []apiextensions.CustomResourceDefinition{}

	for _, o := range objects {
		kind := o.GroupVersionKind().Kind
		switch kind {
		case gvk.CustomResourceDefinition.Kind:
			crd, err := k.Ext().ApiextensionsV1().CustomResourceDefinitions().Get(context.TODO(), o.GetName(), metav1.GetOptions{})
			if err != nil {
				return false, nil, nil, err
			}
			crds = append(crds, *crd)

		case gvk.Namespace.Kind:
			namespace, err := k.Kube().CoreV1().Namespaces().Get(context.TODO(), o.GetName(), metav1.GetOptions{})
			if err != nil {
				return false, nil, nil, err
			}
			namespaces = append(namespaces, *namespace)
		case gvk.Deployment.Kind:
			currentDeployment, err := k.Kube().AppsV1().Deployments(o.GetNamespace()).Get(context.TODO(), o.GetName(), metav1.GetOptions{})
			if err != nil {
				return false, nil, nil, err
			}
			_, _, newReplicaSet, err := kctldeployment.GetAllReplicaSets(currentDeployment, k.Kube().AppsV1())
			if err != nil || newReplicaSet == nil {
				return false, nil, nil, err
			}
			newDeployment := deployment{
				newReplicaSet,
				currentDeployment,
			}
			deployments = append(deployments, newDeployment)
		case gvk.StatefulSet.Kind:
			sts, err := k.Kube().AppsV1().StatefulSets(o.GetNamespace()).Get(context.TODO(), o.GetName(), metav1.GetOptions{})
			if err != nil {
				return false, nil, nil, err
			}
			statefulsets = append(statefulsets, sts)
		}
	}

	resourceDebugInfo := map[string]string{}

	dr, dnr := deploymentsReady(k.Kube(), deployments, resourceDebugInfo)
	stsr, stsnr := statefulsetsReady(statefulsets)
	nsr, nnr := namespacesReady(namespaces)
	pr, pnr := podsReady(pods)
	crdr, crdnr := crdsReady(crds)
	isReady := dr && nsr && stsr && pr && crdr
	notReady := append(append(append(append(nnr, dnr...), pnr...), stsnr...), crdnr...)
	if !isReady {
		l.ReportWaiting(notReady)
	}
	return isReady, notReady, resourceDebugInfo, nil
}