func (o *baseObject) SetNamespace(ns string) {
	o.Meta.Namespace = ns
}
SetNamespace implements KubeManifest.SetNamespace, so things with
*baseObject embedded are < KubeManifest. NB pointer receiver.
package resource
import (
	"strings"
	jsonyaml "github.com/ghodss/yaml"
	"gopkg.in/yaml.v2"
	fluxerr "github.com/fluxcd/flux/pkg/errors"
	"github.com/fluxcd/flux/pkg/policy"
	"github.com/fluxcd/flux/pkg/resource"
)
const (
	PolicyPrefix       = "fluxcd.io/"
	FilterPolicyPrefix = "filter.fluxcd.io/"
	AlternatePolicyPrefix = "flux.weave.works/"
	ClusterScope          = "<cluster>"
)
type KubeManifest interface {
	resource.Resource
	GroupVersion() string
	GetKind() string
	GetName() string
	GetNamespace() string
	SetNamespace(string)
	PolicyAnnotationKey(string) (string, bool)
}
type baseObject struct {
	source string
	bytes  []byte
	APIVersion string `yaml:"apiVersion"`
	Kind       string `yaml:"kind"`
	Meta       struct {
		Namespace   string            `yaml:"namespace"`
		Name        string            `yaml:"name"`
		Annotations map[string]string `yaml:"annotations,omitempty"`
	} `yaml:"metadata"`
}
func (o baseObject) GroupVersion() string {
	return o.APIVersion
}
func (o baseObject) GetNamespace() string {
	return o.Meta.Namespace
}
func (o baseObject) GetKind() string {
	return o.Kind
}
func (o baseObject) GetName() string {
	return o.Meta.Name
}
func (o baseObject) ResourceID() resource.ID {
	ns := o.Meta.Namespace
	if ns == "" {
		ns = ClusterScope
	}
	return resource.MakeID(ns, o.Kind, o.Meta.Name)
}