func (daemon *Daemon) CreatePod(podId string, podSpec *apitypes.UserPod) (*pod.XPod, error) { //FIXME: why restrict to 1024 if daemon.PodList.CountRunning() >= 1024 { return nil, fmt.Errorf("There have already been %d running Pods", 1024) } if podId == "" { podId = fmt.Sprintf("pod-%s", utils.RandStr(10, "alpha")) } if podSpec.Id == "" { podSpec.Id = podId } if _, ok := daemon.PodList.Get(podSpec.Id); ok { return nil, fmt.Errorf("pod %s already exist", podSpec.Id) } if err := podSpec.Validate(); err != nil { return nil, err } factory := pod.NewPodFactory(daemon.Factory, daemon.PodList, daemon.db, daemon.Storage, daemon.Daemon, daemon.DefaultLog) p, err := pod.CreateXPod(factory, podSpec) if err != nil { glog.Errorf("%s: failed to add pod: %v", podSpec.Id, err) return nil, err } return p, nil }