// makePodToVerifyCgroups returns a pod that verifies the existence of the specified cgroups. func makePodToVerifyCgroups(cgroupNames []cm.CgroupName) *api.Pod { // convert the names to their literal cgroupfs forms... cgroupFsNames := []string{} for _, cgroupName := range cgroupNames { if framework.TestContext.KubeletConfig.CgroupDriver == "systemd" { cgroupFsNames = append(cgroupFsNames, cm.ConvertCgroupNameToSystemd(cgroupName, true)) } else { cgroupFsNames = append(cgroupFsNames, string(cgroupName)) } } // build the pod command to either verify cgroups exist command := "" for _, cgroupFsName := range cgroupFsNames { localCommand := "if [ ! -d /tmp/memory/" + cgroupFsName + " ] || [ ! -d /tmp/cpu/" + cgroupFsName + " ]; then exit 1; fi; " command += localCommand } pod := &api.Pod{ ObjectMeta: api.ObjectMeta{ Name: "pod" + string(uuid.NewUUID()), }, Spec: api.PodSpec{ RestartPolicy: api.RestartPolicyNever, Containers: []api.Container{ { Image: "gcr.io/google_containers/busybox:1.24", Name: "container" + string(uuid.NewUUID()), Command: []string{"sh", "-c", command}, VolumeMounts: []api.VolumeMount{ { Name: "sysfscgroup", MountPath: "/tmp", }, }, }, }, Volumes: []api.Volume{ { Name: "sysfscgroup", VolumeSource: api.VolumeSource{ HostPath: &api.HostPathVolumeSource{Path: "/sys/fs/cgroup"}, }, }, }, }, } return pod }
// makePodToVerifyCgroupRemoved verfies the specified cgroup does not exist. func makePodToVerifyCgroupRemoved(cgroupName cm.CgroupName) *api.Pod { cgroupFsName := string(cgroupName) if framework.TestContext.KubeletConfig.CgroupDriver == "systemd" { cgroupFsName = cm.ConvertCgroupNameToSystemd(cm.CgroupName(cgroupName), true) } pod := &api.Pod{ ObjectMeta: api.ObjectMeta{ Name: "pod" + string(uuid.NewUUID()), }, Spec: api.PodSpec{ RestartPolicy: api.RestartPolicyOnFailure, Containers: []api.Container{ { Image: "gcr.io/google_containers/busybox:1.24", Name: "container" + string(uuid.NewUUID()), Command: []string{"sh", "-c", "for i in `seq 1 10`; do if [ ! -d /tmp/memory/" + cgroupFsName + " ] && [ ! -d /tmp/cpu/" + cgroupFsName + " ]; then exit 0; else sleep 10; fi; done; exit 1"}, VolumeMounts: []api.VolumeMount{ { Name: "sysfscgroup", MountPath: "/tmp", }, }, }, }, Volumes: []api.Volume{ { Name: "sysfscgroup", VolumeSource: api.VolumeSource{ HostPath: &api.HostPathVolumeSource{Path: "/sys/fs/cgroup"}, }, }, }, }, } return pod }