func waitForPodsOrDie(cs *kubernetes.Clientset, ns string, n int) { By("Waiting for all pods to be running") err := wait.PollImmediate(framework.Poll, schedulingTimeout, func() (bool, error) { pods, err := cs.Core().Pods(ns).List(v1.ListOptions{LabelSelector: "foo=bar"}) if err != nil { return false, err } if pods == nil { return false, fmt.Errorf("pods is nil") } if len(pods.Items) < n { framework.Logf("pods: %v < %v", len(pods.Items), n) return false, nil } ready := 0 for i := 0; i < n; i++ { if pods.Items[i].Status.Phase == v1.PodRunning { ready++ } } if ready < n { framework.Logf("running pods: %v < %v", ready, n) return false, nil } return true, nil }) framework.ExpectNoError(err, "Waiting for pods in namespace %q to be ready", ns) }
func createReplicaSetOrDie(cs *kubernetes.Clientset, ns string, size int32, exclusive bool) { container := v1.Container{ Name: "busybox", Image: "gcr.io/google_containers/echoserver:1.4", } if exclusive { container.Ports = []v1.ContainerPort{ {HostPort: 5555, ContainerPort: 5555}, } } rs := &extensions.ReplicaSet{ ObjectMeta: v1.ObjectMeta{ Name: "rs", Namespace: ns, }, Spec: extensions.ReplicaSetSpec{ Replicas: &size, Selector: &unversioned.LabelSelector{ MatchLabels: map[string]string{"foo": "bar"}, }, Template: v1.PodTemplateSpec{ ObjectMeta: v1.ObjectMeta{ Labels: map[string]string{"foo": "bar"}, }, Spec: v1.PodSpec{ Containers: []v1.Container{container}, }, }, }, } _, err := cs.Extensions().ReplicaSets(ns).Create(rs) framework.ExpectNoError(err, "Creating replica set %q in namespace %q", rs.Name, ns) }
func createPodDisruptionBudgetOrDie(cs *kubernetes.Clientset, ns string, minAvailable intstr.IntOrString) { pdb := policy.PodDisruptionBudget{ ObjectMeta: v1.ObjectMeta{ Name: "foo", Namespace: ns, }, Spec: policy.PodDisruptionBudgetSpec{ Selector: &unversioned.LabelSelector{MatchLabels: map[string]string{"foo": "bar"}}, MinAvailable: minAvailable, }, } _, err := cs.Policy().PodDisruptionBudgets(ns).Create(&pdb) Expect(err).NotTo(HaveOccurred()) }
func getK8sLabels(client *kubernetes.Clientset, k8sargs utils.K8sArgs) (map[string]string, error) { pods, err := client.Pods(string(k8sargs.K8S_POD_NAMESPACE)).Get(fmt.Sprintf("%s", k8sargs.K8S_POD_NAME)) if err != nil { return nil, err } labels := pods.Labels if labels == nil { labels = make(map[string]string) } labels["calico/k8s_ns"] = fmt.Sprintf("%s", k8sargs.K8S_POD_NAMESPACE) return labels, nil }
func getPodCidr(client *kubernetes.Clientset, conf utils.NetConf, hostname string) (string, error) { // Pull the node name out of the config if it's set. Defaults to hostname nodeName := hostname if conf.Kubernetes.NodeName != "" { nodeName = conf.Kubernetes.NodeName } node, err := client.Nodes().Get(nodeName) if err != nil { return "", err } if node.Spec.PodCIDR == "" { err = fmt.Errorf("No podCidr for node %s", nodeName) return "", err } else { return node.Spec.PodCIDR, nil } }
func createPodsOrDie(cs *kubernetes.Clientset, ns string, n int) { for i := 0; i < n; i++ { pod := &v1.Pod{ ObjectMeta: v1.ObjectMeta{ Name: fmt.Sprintf("pod-%d", i), Namespace: ns, Labels: map[string]string{"foo": "bar"}, }, Spec: v1.PodSpec{ Containers: []v1.Container{ { Name: "busybox", Image: "gcr.io/google_containers/echoserver:1.4", }, }, RestartPolicy: v1.RestartPolicyAlways, }, } _, err := cs.Pods(ns).Create(pod) framework.ExpectNoError(err, "Creating pod %q in namespace %q", pod.Name, ns) } }
extensions "k8s.io/client-go/pkg/apis/extensions/v1beta1" policy "k8s.io/client-go/pkg/apis/policy/v1beta1" "k8s.io/client-go/pkg/util/intstr" "k8s.io/kubernetes/pkg/util/wait" "k8s.io/kubernetes/test/e2e/framework" ) // schedulingTimeout is longer specifically because sometimes we need to wait // awhile to guarantee that we've been patient waiting for something ordinary // to happen: a pod to get scheduled and move into Ready const schedulingTimeout = 10 * time.Minute var _ = framework.KubeDescribe("DisruptionController", func() { f := framework.NewDefaultFramework("disruption") var ns string var cs *kubernetes.Clientset BeforeEach(func() { // skip on GKE since alpha features are disabled framework.SkipIfProviderIs("gke") cs = f.StagingClient ns = f.Namespace.Name }) It("should create a PodDisruptionBudget", func() { createPodDisruptionBudgetOrDie(cs, ns, intstr.FromString("1%")) }) It("should update PodDisruptionBudget status", func() { createPodDisruptionBudgetOrDie(cs, ns, intstr.FromInt(2))