in gke-deploy/core/resource/ready.go [476:518]
func serviceIsReady(ctx context.Context, obj *Object) (bool, error) {
serviceType, ok, err := unstructured.NestedString(obj.Object, "spec", "type")
if err != nil {
return false, fmt.Errorf("failed to get spec.type field: %v", err)
}
if !ok || serviceType == "" {
return false, nil
}
if serviceType == "ClusterIP" || serviceType == "NodePort" || serviceType == "ExternalName" {
return true, nil
}
clusterIP, ok, err := unstructured.NestedString(obj.Object, "spec", "clusterIP")
if err != nil {
return false, fmt.Errorf("failed to get spec.clusterIP field: %v", err)
}
if !ok || clusterIP == "" {
return false, nil
}
ingress, ok, err := unstructured.NestedSlice(obj.Object, "status", "loadBalancer", "ingress")
if err != nil {
return false, fmt.Errorf("failed to get status.loadBalancer.ingress field: %v", err)
}
if !ok || len(ingress) == 0 {
return false, nil
}
for _, i := range ingress {
iMap, ok := i.(map[string]interface{})
if !ok {
return false, fmt.Errorf("failed to convert ingress to map")
}
ip, ok, err := unstructured.NestedString(iMap, "ip")
if err != nil {
return false, fmt.Errorf("failed to get ip field: %v", err)
}
if !ok || ip == "" {
return false, nil
}
}
return true, nil
}