// ResourceLocation returns a pods location from its HostIP func (r *REST) ResourceLocation(ctx api.Context, name string) (*url.URL, http.RoundTripper, error) { return pod.ResourceLocation(r, ctx, name) } // BindingREST implements the REST endpoint for binding pods to nodes when etcd is in use. type BindingREST struct { store *etcdgeneric.Etcd } // New creates a new binding resource func (r *BindingREST) New() runtime.Object { return &api.Binding{} } var _ = rest.Creater(&BindingREST{}) // Create ensures a pod is bound to a specific host. func (r *BindingREST) Create(ctx api.Context, obj runtime.Object) (out runtime.Object, err error) { binding := obj.(*api.Binding) // TODO: move me to a binding strategy if len(binding.Target.Kind) != 0 && (binding.Target.Kind != "Node" && binding.Target.Kind != "Minion") { return nil, errors.NewInvalid("binding", binding.Name, fielderrors.ValidationErrorList{fielderrors.NewFieldInvalid("to.kind", binding.Target.Kind, "must be empty, 'Node', or 'Minion'")}) } if len(binding.Target.Name) == 0 { return nil, errors.NewInvalid("binding", binding.Name, fielderrors.ValidationErrorList{fielderrors.NewFieldRequired("to.name")}) } err = r.assignPod(ctx, binding.Name, binding.Target.Name, binding.Annotations) out = &api.Status{Status: api.StatusSuccess} return }
"k8s.io/kubernetes/pkg/labels" "k8s.io/kubernetes/pkg/registry/generic/registry" "k8s.io/kubernetes/pkg/runtime" ) func newEvictionStorage(store *registry.Store, podDisruptionBudgetClient policyclient.PodDisruptionBudgetsGetter) *EvictionREST { return &EvictionREST{store: store, podDisruptionBudgetClient: podDisruptionBudgetClient} } // EvictionREST implements the REST endpoint for evicting pods from nodes when etcd is in use. type EvictionREST struct { store *registry.Store podDisruptionBudgetClient policyclient.PodDisruptionBudgetsGetter } var _ = rest.Creater(&EvictionREST{}) // New creates a new eviction resource func (r *EvictionREST) New() runtime.Object { return &policy.Eviction{} } // Create attempts to create a new eviction. That is, it tries to evict a pod. func (r *EvictionREST) Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) { eviction := obj.(*policy.Eviction) obj, err := r.store.Get(ctx, eviction.Name) if err != nil { return nil, err } pod := obj.(*api.Pod)
"k8s.io/kubernetes/pkg/util/sets" "github.com/openshift/origin/pkg/client" deployapi "github.com/openshift/origin/pkg/deploy/api" "github.com/openshift/origin/pkg/deploy/api/validation" deployutil "github.com/openshift/origin/pkg/deploy/util" imageapi "github.com/openshift/origin/pkg/image/api" ) func NewREST(store registry.Store, oc client.Interface, kc kclient.Interface, decoder runtime.Decoder, admission admission.Interface) *REST { store.UpdateStrategy = Strategy return &REST{store: &store, isn: oc, rn: kc, decoder: decoder, admit: admission} } // REST implements the Creater interface. var _ = rest.Creater(&REST{}) type REST struct { store *registry.Store isn client.ImageStreamsNamespacer rn kclient.ReplicationControllersNamespacer decoder runtime.Decoder admit admission.Interface } func (s *REST) New() runtime.Object { return &deployapi.DeploymentRequest{} } // Create instantiates a deployment config func (r *REST) Create(ctx kapi.Context, obj runtime.Object) (runtime.Object, error) {
// Update alters the status subset of an object. func (r *StatusREST) Update(ctx api.Context, obj runtime.Object) (runtime.Object, bool, error) { return r.store.Update(ctx, obj) } // RollbackREST implements the REST endpoint for initiating the rollback of a deployment type RollbackREST struct { store *etcdgeneric.Etcd } // New creates a rollback func (r *RollbackREST) New() runtime.Object { return &extensions.DeploymentRollback{} } var _ = rest.Creater(&RollbackREST{}) func (r *RollbackREST) Create(ctx api.Context, obj runtime.Object) (out runtime.Object, err error) { rollback, ok := obj.(*extensions.DeploymentRollback) if !ok { return nil, fmt.Errorf("expected input object type to be DeploymentRollback, but %T", obj) } if errs := extvalidation.ValidateDeploymentRollback(rollback); len(errs) != 0 { return nil, errors.NewInvalid(extensions.Kind("DeploymentRollback"), rollback.Name, errs) } // Update the Deployment with information in DeploymentRollback to trigger rollback err = r.rollbackDeployment(ctx, rollback.Name, &rollback.RollbackTo, rollback.UpdatedAnnotations) return }
// Implement Redirector. var _ = rest.Redirector(&REST{}) // ResourceLocation returns a pods location from its HostIP func (r *REST) ResourceLocation(ctx api.Context, name string) (*url.URL, http.RoundTripper, error) { return pod.ResourceLocation(r, r.proxyTransport, ctx, name) } // EvictionREST implements the REST endpoint for evicting pods from nodes when etcd is in use. type EvictionREST struct { store *registry.Store PodDisruptionBudgetLister rest.Lister PodDisruptionBudgetUpdater rest.Updater } var _ = rest.Creater(&EvictionREST{}) // New creates a new eviction resource func (r *EvictionREST) New() runtime.Object { return &policy.Eviction{} } // Create attempts to create a new eviction. That is, it tries to evict a pod. func (r *EvictionREST) Create(ctx api.Context, obj runtime.Object) (runtime.Object, error) { eviction := obj.(*policy.Eviction) obj, err := r.store.Get(ctx, eviction.Name) if err != nil { return nil, err } pod := obj.(*api.Pod)