Proposal: Separate desired and current states

Speculative change for some items from #1200:

* Metadata that applies to resources is split from APIMetadata on non-resource API objects
* Metadata is a sub field of objects
* Labels are on Metadata
* Pod current and desired state is split
* Name is used for pods instead of ID (UID is part of metadata, Name is part of resource) for idempotent creation #148 and #1216 
* PodTemplate is a Metadata carrying object as per #170
 * If replicationController gave way to a generic "replicator", then pod template could be both a nested struct and a real resource.
* A ScheduledPod and ScheduledPodList is what the kubelet sees as per #860
* Non-schema'd k/v values on Metadata as `Config` (better names welcome) as per #1201

Not changed yet:

* ReplicationControllers
* Services

Only look at the second commit, the first is just to get a nice diff from v1beta1.
Net new field.  ID -> Name

With conversion I don't think this will be that bad - Dans steps laid out a path to make things work.  We do need to lay out a migration strategy.

> On Sep 9, 2014, at 5:34 PM, Derek Carr <notifications@github.com> wrote:
> 
> In pkg/api/v1beta3_metadata/types.go:
> 
> > +	SelfLink string `json:"selfLink,omitempty" yaml:"selfLink,omitempty"`
> > +
> > +	// An opaque value that represents the version of this response for use with optimistic
> > +	// concurrency and change monitoring endpoints.  Clients must treat these values as opaque
> > +	// and values may only be valid for a particular resource or set of resources. Only servers
> > +	// will generate resource versions.
> > +	ResourceVersion string `json:"resourceVersion,omitempty" yaml:"resourceVersion,omitempty"`
> > +}
> > +
> > +// Metadata is shared by all resources stored on a server.
> > +type Metadata struct {
> > +	APIMetadata `json:",inline" yaml:",inline"`
> > +
> > +	// UID is the unique in time and space value for this object.  It is not settable
> > +	// by a client and servers must not allow it to change during PUT operations.
> > +	UID string `json:"uid,omitempty" yaml:"uid,omitempty"`
> Is this a new field, or a rename of ID? Wondering if we can stage this so when we do Namespace/Name that Name becomes what was ID and UID is something new entirely. Either way, this is going to be a pain.
> 
> —
> Reply to this email directly or view it on GitHub.