mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
Merge pull request #2145 from lavalamp/eventing2
Add a placeholder to boundPod's SelfLink
This commit is contained in:
commit
3bd10d4fb4
@ -229,23 +229,24 @@ func (r *Registry) assignPod(ctx api.Context, podID string, machine string) erro
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// TODO: move this to a watch/rectification loop.
|
||||
pod, err := r.boundPodFactory.MakeBoundPod(machine, finalPod)
|
||||
boundPod, err := r.boundPodFactory.MakeBoundPod(machine, finalPod)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// Doing the constraint check this way provides atomicity guarantees.
|
||||
contKey := makeContainerKey(machine)
|
||||
err = r.AtomicUpdate(contKey, &api.BoundPods{}, func(in runtime.Object) (runtime.Object, error) {
|
||||
pods := *in.(*api.BoundPods)
|
||||
pods.Items = append(pods.Items, *pod)
|
||||
if !constraint.Allowed(pods.Items) {
|
||||
boundPodList := in.(*api.BoundPods)
|
||||
boundPodList.Items = append(boundPodList.Items, *boundPod)
|
||||
if !constraint.Allowed(boundPodList.Items) {
|
||||
return nil, fmt.Errorf("The assignment would cause a constraint violation")
|
||||
}
|
||||
return &pods, nil
|
||||
return boundPodList, nil
|
||||
})
|
||||
if err != nil {
|
||||
// Put the pod's host back the way it was. This is a terrible hack that
|
||||
// won't be needed if we convert this to a rectification loop.
|
||||
// Put the pod's host back the way it was. This is a terrible hack, but
|
||||
// can't really be helped, since there's not really a way to do atomic
|
||||
// multi-object changes in etcd.
|
||||
if _, err2 := r.setPodHostTo(ctx, podID, machine, ""); err2 != nil {
|
||||
glog.Errorf("Stranding pod %v; couldn't clear host after previous error: %v", podID, err2)
|
||||
}
|
||||
|
@ -43,5 +43,9 @@ func (b *BasicBoundPodFactory) MakeBoundPod(machine string, pod *api.Pod) (*api.
|
||||
for ix, container := range boundPod.Spec.Containers {
|
||||
boundPod.Spec.Containers[ix].Env = append(container.Env, envVars...)
|
||||
}
|
||||
// Make a dummy self link so that references to this bound pod will work.
|
||||
// TODO: When kubelets get boundPods from apiserver instead of etcd, then
|
||||
// the selflink should be generated there.
|
||||
boundPod.SelfLink = "/api/v1beta1/boundPods/" + boundPod.Name
|
||||
return boundPod, nil
|
||||
}
|
||||
|
@ -54,6 +54,10 @@ func TestMakeBoundPodNoServices(t *testing.T) {
|
||||
if pod.Name != "foobar" {
|
||||
t.Errorf("Failed to assign ID to pod: %#v", pod.Name)
|
||||
}
|
||||
|
||||
if _, err := api.GetReference(pod); err != nil {
|
||||
t.Errorf("Unable to get a reference to bound pod: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMakeBoundPodServices(t *testing.T) {
|
||||
|
Loading…
Reference in New Issue
Block a user