func (r RealPodControl) createReplica(namespace string, controller api.ReplicationController) { desiredLabels := make(labels.Set) for k, v := range controller.Spec.Template.Labels { desiredLabels[k] = v } desiredAnnotations := make(labels.Set) for k, v := range controller.Spec.Template.Annotations { desiredAnnotations[k] = v } // use the dash (if the name isn't too long) to make the pod name a bit prettier prefix := fmt.Sprintf("%s-", controller.Name) if ok, _ := validation.ValidatePodName(prefix, true); !ok { prefix = controller.Name } pod := &api.Pod{ ObjectMeta: api.ObjectMeta{ Labels: desiredLabels, Annotations: desiredAnnotations, GenerateName: prefix, }, } if err := api.Scheme.Convert(&controller.Spec.Template.Spec, &pod.Spec); err != nil { util.HandleError(fmt.Errorf("unable to convert pod template: %v", err)) return } if labels.Set(pod.Labels).AsSelector().Empty() { util.HandleError(fmt.Errorf("unable to create pod replica, no labels")) return } if _, err := r.kubeClient.Pods(namespace).Create(pod); err != nil { util.HandleError(fmt.Errorf("unable to create pod replica: %v", err)) } }
func getReplicaPrefix(controllerName string) string { // use the dash (if the name isn't too long) to make the pod name a bit prettier prefix := fmt.Sprintf("%s-", controllerName) if ok, _ := validation.ValidatePodName(prefix, true); !ok { prefix = controllerName } return prefix }
func (r RealPodControl) createReplica(namespace string, controller *api.ReplicationController) error { desiredLabels := make(labels.Set) for k, v := range controller.Spec.Template.Labels { desiredLabels[k] = v } desiredAnnotations := make(labels.Set) for k, v := range controller.Spec.Template.Annotations { desiredAnnotations[k] = v } createdByRef, err := api.GetReference(controller) if err != nil { return fmt.Errorf("unable to get controller reference: %v", err) } createdByRefJson, err := latest.Codec.Encode(&api.SerializedReference{ Reference: *createdByRef, }) if err != nil { return fmt.Errorf("unable to serialize controller reference: %v", err) } desiredAnnotations[CreatedByAnnotation] = string(createdByRefJson) // use the dash (if the name isn't too long) to make the pod name a bit prettier prefix := fmt.Sprintf("%s-", controller.Name) if ok, _ := validation.ValidatePodName(prefix, true); !ok { prefix = controller.Name } pod := &api.Pod{ ObjectMeta: api.ObjectMeta{ Labels: desiredLabels, Annotations: desiredAnnotations, GenerateName: prefix, }, } if err := api.Scheme.Convert(&controller.Spec.Template.Spec, &pod.Spec); err != nil { return fmt.Errorf("unable to convert pod template: %v", err) } if labels.Set(pod.Labels).AsSelector().Empty() { return fmt.Errorf("unable to create pod replica, no labels") } if newPod, err := r.kubeClient.Pods(namespace).Create(pod); err != nil { r.recorder.Eventf(controller, "failedCreate", "Error creating: %v", err) return fmt.Errorf("unable to create pod replica: %v", err) } else { glog.V(4).Infof("Controller %v created pod %v", controller.Name, newPod.Name) r.recorder.Eventf(controller, "successfulCreate", "Created pod: %v", newPod.Name) } return nil }