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
}