// NewDefaultProcurement returns the default procurement strategy that combines validation // and responsible Mesos resource procurement. c and m are resource quantities written into // k8s api.Pod.Spec's that don't declare resources (all containers in k8s-mesos require cpu // and memory limits). func NewDefaultProcurement(prototype *mesos.ExecutorInfo, eir executorinfo.Registry) Procurement { return AllOrNothingProcurement([]Procurement{ NewNodeProcurement(), NewPodResourcesProcurement(), NewPortsProcurement(), NewExecutorResourceProcurer(prototype.GetResources(), eir), }) }
func annotationsFor(ei *mesos.ExecutorInfo) (annotations map[string]string, err error) { annotations = map[string]string{} if ei == nil { return } var buf bytes.Buffer if err = executorinfo.EncodeResources(&buf, ei.GetResources()); err != nil { return } annotations[meta.ExecutorIdKey] = ei.GetExecutorId().GetValue() annotations[meta.ExecutorResourcesKey] = buf.String() return }
func nodeInfo(si *mesos.SlaveInfo, ei *mesos.ExecutorInfo) NodeInfo { var executorCPU, executorMem float64 // get executor resources if ei != nil { for _, r := range ei.GetResources() { if r == nil || r.GetType() != mesos.Value_SCALAR { continue } switch r.GetName() { case "cpus": executorCPU += r.GetScalar().GetValue() case "mem": executorMem += r.GetScalar().GetValue() } } } // get resource capacity of the node ni := NodeInfo{} for _, r := range si.GetResources() { if r == nil || r.GetType() != mesos.Value_SCALAR { continue } switch r.GetName() { case "cpus": // We intentionally take the floor of executorCPU because cores are integers // and we would loose a complete cpu here if the value is <1. // TODO(sttts): switch to float64 when "Machine Allocables" are implemented ni.Cores += int(r.GetScalar().GetValue()) case "mem": ni.Mem += int64(r.GetScalar().GetValue()) * 1024 * 1024 } } // TODO(sttts): subtract executorCPU/Mem from static pod resources before subtracting them from the capacity ni.Cores -= int(executorCPU) ni.Mem -= int64(executorMem) * 1024 * 1024 return ni }