func fqObjName(o metav1.Object) string {
	return fqName(o.GetNamespace(), o.GetName())
}
--------------------------------------------------------------------------
Names and namespaces.
--------------------------------------------------------------------------
fqObjName returns "namespace.name"
package provider
import (
	"encoding/json"
	"fmt"
	"strings"
	"github.com/pulumi/pulumi/sdk/v3/go/common/resource"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
	"k8s.io/client-go/tools/clientcmd"
	clientapi "k8s.io/client-go/tools/clientcmd/api"
)
func hasComputedValue(obj *unstructured.Unstructured) bool {
	if obj == nil || obj.Object == nil {
		return false
	}
	objects := []map[string]interface{}{obj.Object}
	var curr map[string]interface{}
	for {
		if len(objects) == 0 {
			break
		}
		curr, objects = objects[0], objects[1:]
		for _, v := range curr {
			switch field := v.(type) {
			case resource.Computed:
				return true
			case map[string]interface{}:
				objects = append(objects, field)
			case []interface{}:
				for _, v := range field {
					objects = append(objects, map[string]interface{}{"": v})
				}
			case []map[string]interface{}:
				objects = append(objects, field...)
			}
		}
	}
	return false
}