func generateCPUIsolator(t *testing.T, request, limit string) appctypes.Isolator { cpu, err := appctypes.NewResourceCPUIsolator(request, limit) if err != nil { t.Fatalf("Error generating cpu resource isolator", err) } return cpu.AsIsolator() }
func (aml *appCPULimit) Set(s string) error { app := (*apps.Apps)(aml).Last() if app == nil { return fmt.Errorf("--cpu must follow an image") } isolator, err := types.NewResourceCPUIsolator(s, s) if err != nil { return err } app.CPULimit = isolator return nil }
// setIsolators sets the apps' isolators according to the security context and resource spec. func setIsolators(app *appctypes.App, c *api.Container, ctx *api.SecurityContext) error { var isolators []appctypes.Isolator // Capabilities isolators. if ctx != nil { var addCaps, dropCaps []string if ctx.Capabilities != nil { addCaps, dropCaps = securitycontext.MakeCapabilities(ctx.Capabilities.Add, ctx.Capabilities.Drop) } if ctx.Privileged != nil && *ctx.Privileged { addCaps, dropCaps = allCapabilities(), []string{} } if len(addCaps) > 0 { set, err := appctypes.NewLinuxCapabilitiesRetainSet(addCaps...) if err != nil { return err } isolators = append(isolators, set.AsIsolator()) } if len(dropCaps) > 0 { set, err := appctypes.NewLinuxCapabilitiesRevokeSet(dropCaps...) if err != nil { return err } isolators = append(isolators, set.AsIsolator()) } } // Resources isolators. type resource struct { limit string request string } resources := make(map[api.ResourceName]resource) for name, quantity := range c.Resources.Limits { resources[name] = resource{limit: quantity.String()} } for name, quantity := range c.Resources.Requests { r, ok := resources[name] if !ok { r = resource{} } r.request = quantity.String() resources[name] = r } for name, res := range resources { switch name { case api.ResourceCPU: cpu, err := appctypes.NewResourceCPUIsolator(res.request, res.limit) if err != nil { return err } isolators = append(isolators, cpu.AsIsolator()) case api.ResourceMemory: memory, err := appctypes.NewResourceMemoryIsolator(res.request, res.limit) if err != nil { return err } isolators = append(isolators, memory.AsIsolator()) default: return fmt.Errorf("resource type not supported: %v", name) } } mergeIsolators(app, isolators) return nil }