コード例 #1
0
    def test_node_affinity_with_required(self):
        model = _constants.pod_with_node_affinity()
        pod = Pod(model)
        config = _utils.create_config()
        k8s = K8sPod(config=config, name="yo")
        k8s.model = pod

        if _utils.is_reachable(config):
            # ensure we have enough nodes
            nodes = K8sNode(config=config, name="yo").list()
            self.assertGreaterEqual(len(nodes), 3)
            # tag the nodes
            for i in range(len(nodes)):
                node = nodes[i]
                if i == 0:
                    node.labels.update(
                        {'kubernetes.io/e2e-az-name': 'e2e-az1'})
                if i == 1:
                    node.labels.update(
                        {'kubernetes.io/e2e-az-name': 'e2e-az2'})
                if i == 2:
                    node.labels.update(
                        {'kubernetes.io/e2e-az-name': 'e2e-az3'})
                node.update()
            nodes = K8sNode(config=config, name="yo").list()
            for node in nodes:
                self.assertIn('kubernetes.io/e2e-az-name', node.labels)
            # create the pod
            k8s.create()
            # untag the nodes
            for node in nodes:
                node.labels.pop('kubernetes.io/e2e-az-name', None)
                node.update()
        pass
コード例 #2
0
ファイル: test_k8s_pod.py プロジェクト: froch/kubernetes-py
    def test_get_by_labels_nonexistent(self):
        name = "yopod-{0}".format(str(uuid.uuid4()))
        config = K8sConfig(kubeconfig=_utils.kubeconfig_fallback)

        if _utils.is_reachable(config):
            pods = K8sPod.get_by_labels(config=config, labels={'name': name})
            self.assertIsInstance(pods, list)
            self.assertEqual(0, len(pods))
コード例 #3
0
ファイル: test_k8s_pod.py プロジェクト: froch/kubernetes-py
    def test_get_by_labels_without_name(self):
        name = "yocontainer"
        container = _utils.create_container(name=name)
        name = "yopod-{0}".format(str(uuid.uuid4()))
        pod = _utils.create_pod(name=name)
        pod.add_container(container)
        pod.add_label("test.label", "hello")

        if _utils.is_reachable(pod.config):
            pod.create()
            pods = K8sPod.get_by_labels(config=pod.config, labels={'test.label': "hello"})
            self.assertIsInstance(pods, list)
            self.assertEqual(1, len(pods))
            self.assertEqual(pod, pods[0])

            pods = K8sPod.get_by_labels(config=pod.config, labels={'test.label': "world"})
            self.assertEqual(0, len(pods))
コード例 #4
0
    def test_get_by_labels_nonexistent(self):
        name = "yopod-{0}".format(str(uuid.uuid4()))
        config = K8sConfig(kubeconfig=_utils.kubeconfig_fallback)

        if _utils.is_reachable(config):
            pods = K8sPod.get_by_labels(config=config, labels={'name': name})
            self.assertIsInstance(pods, list)
            self.assertEqual(0, len(pods))
コード例 #5
0
def create_pod(config=None, name=None):
    if config is None:
        config = create_config()
    obj = K8sPod(
        config=config,
        name=name
    )
    return obj
コード例 #6
0
 def delete(self, cascade=False):
     super(K8sReplicaSet, self).delete(cascade)
     if cascade:
         pods = K8sPod(config=self.config,
                       name="yo").list(pattern=self.name)
         for pod in pods:
             pod.delete(cascade)
     return self
コード例 #7
0
    def test_update_labels(self):
        name = "yocontainer"
        container = _utils.create_container(name=name)
        name = "yopod-{0}".format(str(uuid.uuid4()))
        pod = _utils.create_pod(name=name)
        pod.add_container(container)

        if _utils.is_reachable(pod.config):
            pod.create()
            labels = pod.labels
            labels['yomama'] = 'sofat'
            pods = K8sPod.get_by_labels(config=pod.config, labels=labels)
            self.assertIsInstance(pods, list)
            self.assertEqual(0, len(pods))
            pod.labels = labels
            pod.update()
            pods = K8sPod.get_by_labels(config=pod.config, labels=labels)
            self.assertIsInstance(pods, list)
            self.assertEqual(1, len(pods))
コード例 #8
0
ファイル: test_k8s_pod.py プロジェクト: froch/kubernetes-py
    def test_update_labels(self):
        name = "yocontainer"
        container = _utils.create_container(name=name)
        name = "yopod-{0}".format(str(uuid.uuid4()))
        pod = _utils.create_pod(name=name)
        pod.add_container(container)

        if _utils.is_reachable(pod.config):
            pod.create()
            labels = pod.labels
            labels['yomama'] = 'sofat'
            pods = K8sPod.get_by_labels(config=pod.config, labels=labels)
            self.assertIsInstance(pods, list)
            self.assertEqual(0, len(pods))
            pod.labels = labels
            pod.update()
            pods = K8sPod.get_by_labels(config=pod.config, labels=labels)
            self.assertIsInstance(pods, list)
            self.assertEqual(1, len(pods))
コード例 #9
0
    def test_get_by_labels_without_name(self):
        name = "yocontainer"
        container = _utils.create_container(name=name)
        name = "yopod-{0}".format(str(uuid.uuid4()))
        pod = _utils.create_pod(name=name)
        pod.add_container(container)
        pod.add_label("test.label", "hello")

        if _utils.is_reachable(pod.config):
            pod.create()
            pods = K8sPod.get_by_labels(config=pod.config,
                                        labels={'test.label': "hello"})
            self.assertIsInstance(pods, list)
            self.assertEqual(1, len(pods))
            self.assertEqual(pod, pods[0])

            pods = K8sPod.get_by_labels(config=pod.config,
                                        labels={'test.label': "world"})
            self.assertEqual(0, len(pods))
コード例 #10
0
 def delete(self, cascade=False):
     super(K8sReplicaSet, self).delete(cascade)
     if cascade:
         pods = K8sPod(config=self.config,
                       name="yo").list(pattern=self.name)
         for pod in pods:
             try:
                 pod.delete(cascade)
             except NotFoundException:
                 pass
     return self
コード例 #11
0
 def test_init_no_args(self):
     try:
         K8sPod()
         self.fail("Should not fail.")
     except SyntaxError:
         pass
     except IOError:
         pass
     except Exception as err:
         self.fail("Unhandled exception: [ {0} ]".format(
             err.__class__.__name__))
コード例 #12
0
 def test_init_with_invalid_name(self):
     name = object()
     try:
         K8sPod(name=name)
         self.fail("Should not fail.")
     except SyntaxError:
         pass
     except IOError:
         pass
     except Exception as err:
         self.fail("Unhandled exception: [ {0} ]".format(
             err.__class__.__name__))
コード例 #13
0
    def test_get_by_name(self):
        name = "yocontainer"
        container = _utils.create_container(name=name)
        name = "yopod-{0}".format(str(uuid.uuid4()))
        pod = _utils.create_pod(name=name)
        pod.add_container(container)

        if _utils.is_reachable(pod.config):
            pod.create()
            pods = K8sPod.get_by_name(config=pod.config, name=name)
            self.assertIsInstance(pods, list)
            self.assertEqual(1, len(pods))
コード例 #14
0
ファイル: test_k8s_pod.py プロジェクト: froch/kubernetes-py
    def test_get_by_name(self):
        name = "yocontainer"
        container = _utils.create_container(name=name)
        name = "yopod-{0}".format(str(uuid.uuid4()))
        pod = _utils.create_pod(name=name)
        pod.add_container(container)

        if _utils.is_reachable(pod.config):
            pod.create()
            pods = K8sPod.get_by_name(config=pod.config, name=name)
            self.assertIsInstance(pods, list)
            self.assertEqual(1, len(pods))
コード例 #15
0
 def _check_pod_readiness(self):
     if self.current_replicas == self.desired_replicas:
         pods = K8sPod.get_by_labels(config=self.config, labels=self.pod_labels)
         for pod in pods:
             try:
                 if not pod.is_ready():
                     raise PodNotReadyException(pod.name)
             except NotFoundException:
                 pass
             except PodNotReadyException:
                 return False
         return True
     return False
コード例 #16
0
 def _check_pod_readiness(self):
     if self.current_replicas == self.desired_replicas:
         pods = K8sPod.get_by_labels(config=self.config, labels=self.pod_labels)
         for pod in pods:
             try:
                 if not pod.is_ready():
                     raise PodNotReadyException(pod.name)
             except NotFoundException:
                 pass
             except PodNotReadyException:
                 return False
         return True
     return False
コード例 #17
0
    def test_delete_cascade(self):
        c_redis = _utils.create_container(name="redis", image="redis")
        c_nginx = _utils.create_container(name="nginx", image="nginx")
        name = "yodep-{0}".format(str(uuid.uuid4()))
        dep = _utils.create_deployment(name=name)
        dep.add_container(c_redis)
        dep.desired_replicas = 3

        if _utils.is_reachable(dep.config):
            dep.create()
            dep.add_container(c_nginx)
            dep.update()
            repsets = K8sReplicaSet(config=dep.config, name="yo").list()
            self.assertEqual(2, len(repsets))
            pods = K8sPod(config=dep.config, name="yo").list()
            self.assertLessEqual(3, len(pods))  # rollout burst
            dep.delete(cascade=True)
            result = dep.list()
            self.assertIsInstance(result, list)
            self.assertEqual(0, len(result))
            repsets = K8sReplicaSet(config=dep.config, name="yo").list()
            self.assertEqual(0, len(repsets))
            pods = K8sPod(config=dep.config, name="yo").list()
            self.assertEqual(0, len(pods))
コード例 #18
0
    def test_pod_affinity_no_good_nodes(self):
        model = _constants.pod_with_pod_affinity()
        pod = Pod(model)
        config = _utils.create_config()
        k8s = K8sPod(config=config, name="yo")
        k8s.model = pod

        if _utils.is_reachable(config):
            nodes = K8sNode(config=config, name="yo").list()
            # untag all nodes
            for node in nodes:
                node.labels.pop('kubernetes.io/e2e-az-name', None)
                node.update()
            with self.assertRaises(TimedOutException):
                # timeout because of required
                k8s.create()
コード例 #19
0
    def _pod_inventory(self):
        """
        Returns the list of all K8sPods found on this K8sNode.
        
        :return: A list of K8sPods.
        """

        pods = []
        namespaces = K8sNamespace(config=self.config, name="yo").list()
        for ns in namespaces:
            cfg = self.config
            cfg.namespace = ns.name
            p = K8sPod(config=cfg, name="yo").list()
            filtered = filter(lambda x: x.node_name == self.name, p)
            pods += filtered
        return pods
コード例 #20
0
ファイル: test_k8s_pod.py プロジェクト: froch/kubernetes-py
    def test_update_name_fails(self):
        name = "yocontainer"
        container = _utils.create_container(name=name)
        name1 = "yopod1"
        name2 = "yopod2"
        pod = _utils.create_pod(name=name1)
        pod.add_container(container)

        if _utils.is_reachable(pod.config):
            pod.create()
            result = K8sPod.get_by_name(config=pod.config, name=name1)
            self.assertIsInstance(result, list)
            self.assertEqual(1, len(result))
            self.assertIsInstance(result[0], K8sPod)
            result[0].name = name2
            with self.assertRaises(NotFoundException):
                result[0].update()
コード例 #21
0
    def test_pod_affinities(self):
        config = _utils.create_config()
        container = _utils.create_container(name="nginx", image="nginx:latest")

        pod_s1 = _utils.create_pod(config=config, name="s1")
        pod_s1.labels.update({'security': 'S1'})
        pod_s1.node_selector = {'kubernetes.io/e2e-az-name': 'e2e-az1'}
        pod_s1.add_container(container)

        pod_s2 = _utils.create_pod(config=config, name="s2")
        pod_s2.labels.update({'security': 'S2'})
        pod_s2.node_selector = {'kubernetes.io/e2e-az-name': 'e2e-az2'}
        pod_s2.add_container(container)

        model = _constants.pod_with_pod_affinity()
        pod = Pod(model)
        config = _utils.create_config()
        k8s = K8sPod(config=config, name="yo")
        k8s.model = pod

        if _utils.is_reachable(config):
            # ensure we have enough nodes
            nodes = K8sNode(config=config, name="yo").list()
            if len(nodes) < 3:
                self.skipTest(reason='Not enough nodes to perform test.')
            else:
                self.assertGreaterEqual(len(nodes), 3)
            # tag the nodes
            for i in range(len(nodes)):
                node = nodes[i]
                if i == 0:
                    node.labels.update(
                        {'kubernetes.io/e2e-az-name': 'e2e-az1'})
                if i == 1:
                    node.labels.update(
                        {'kubernetes.io/e2e-az-name': 'e2e-az2'})
                if i == 2:
                    node.labels.update(
                        {'kubernetes.io/e2e-az-name': 'e2e-az3'})
                node.update()
            # create the pods for affinity lookup
            pod_s1.create()
            pod_s2.create()
            # create the pod with affinities
            k8s.create()
            pass
コード例 #22
0
    def test_update_name_fails(self):
        name = "yocontainer"
        container = _utils.create_container(name=name)
        name1 = "yopod1"
        name2 = "yopod2"
        pod = _utils.create_pod(name=name1)
        pod.add_container(container)

        if _utils.is_reachable(pod.config):
            pod.create()
            result = K8sPod.get_by_name(config=pod.config, name=name1)
            self.assertIsInstance(result, list)
            self.assertEqual(1, len(result))
            self.assertIsInstance(result[0], K8sPod)
            result[0].name = name2
            with self.assertRaises(NotFoundException):
                result[0].update()
コード例 #23
0
    def test_delete_no_cascade(self):
        name = "yocontainer"
        container = _utils.create_container(name=name)
        name = "yodep-{0}".format(str(uuid.uuid4()))
        dep = _utils.create_deployment(name=name)
        dep.add_container(container)
        dep.desired_replicas = 3

        if _utils.is_reachable(dep.config):
            dep.create()
            dep.delete(cascade=False)
            result = dep.list()
            self.assertIsInstance(result, list)
            self.assertEqual(0, len(result))
            repsets = K8sReplicaSet(config=dep.config, name="yo").list()
            self.assertEqual(1, len(repsets))
            pods = K8sPod(config=dep.config, name="yo").list()
            self.assertEqual(3, len(pods))
コード例 #24
0
ファイル: test_k8s_pod.py プロジェクト: froch/kubernetes-py
    def test_update_namespace_fails(self):
        name = "yocontainer"
        container = _utils.create_container(name=name)
        name = "yopod-{0}".format(str(uuid.uuid4()))
        nspace = "yonamespace"
        pod1 = _utils.create_pod(name=name)
        pod1.add_container(container)

        if _utils.is_reachable(pod1.config):
            pod1.create()
            result = K8sPod.get_by_name(config=pod1.config, name=name)
            self.assertIsInstance(result, list)
            self.assertEqual(1, len(result))
            pod2 = result[0]
            self.assertIsInstance(pod2, K8sPod)
            self.assertNotEqual(pod2.namespace, nspace)
            self.assertEqual(pod1, pod2)
            pod2.namespace = nspace
            with self.assertRaises(BadRequestException):
                pod2.update()
コード例 #25
0
    def test_update_namespace_fails(self):
        name = "yocontainer"
        container = _utils.create_container(name=name)
        name = "yopod-{0}".format(str(uuid.uuid4()))
        nspace = "yonamespace"
        pod1 = _utils.create_pod(name=name)
        pod1.add_container(container)

        if _utils.is_reachable(pod1.config):
            pod1.create()
            result = K8sPod.get_by_name(config=pod1.config, name=name)
            self.assertIsInstance(result, list)
            self.assertEqual(1, len(result))
            pod2 = result[0]
            self.assertIsInstance(pod2, K8sPod)
            self.assertNotEqual(pod2.namespace, nspace)
            self.assertEqual(pod1, pod2)
            pod2.namespace = nspace
            with self.assertRaises(BadRequestException):
                pod2.update()
コード例 #26
0
 def delete(self, cascade=False):
     # delete cascade on top level
     super(K8sDeployment, self).delete(cascade)
     if cascade:
         rsets = K8sReplicaSet(config=self.config,
                               name="yo").list(pattern=self.name)
         # delete cascade on replicasets
         for rset in rsets:
             try:
                 rset.delete(cascade=cascade)
             except NotFoundException:
                 pass
         pods = K8sPod(config=self.config,
                       name="yo").list(pattern=self.name)
         # delete cascade on pods
         for pod in pods:
             try:
                 pod.delete(cascade=cascade)
             except NotFoundException:
                 pass
     return self
コード例 #27
0
ファイル: test_k8s_pod.py プロジェクト: froch/kubernetes-py
 def test_get_by_labels_none_args(self):
     config = _utils.create_config()
     with self.assertRaises(SyntaxError):
         K8sPod.get_by_labels(config=config)
コード例 #28
0
 def test_get_by_labels_invalid_args(self):
     name = object()
     config = _utils.create_config()
     with self.assertRaises(SyntaxError):
         K8sPod.get_by_labels(config=config, labels=name)
コード例 #29
0
 def test_get_by_labels_none_args(self):
     config = _utils.create_config()
     with self.assertRaises(SyntaxError):
         K8sPod.get_by_labels(config=config)
コード例 #30
0
ファイル: test_k8s_pod.py プロジェクト: froch/kubernetes-py
 def test_get_by_labels_invalid_args(self):
     name = object()
     config = _utils.create_config()
     with self.assertRaises(SyntaxError):
         K8sPod.get_by_labels(config=config, labels=name)
コード例 #31
0
 def get_pods(self):
     pods = K8sPod.get_by_labels(config=self.config, labels=self.pod_labels)
     return pods
コード例 #32
0
 def _get_pods(self, name=None, labels=None):
     if labels is None:
         return K8sPod.get_by_name(config=self.config, name=name)
     else:
         return K8sPod.get_by_labels(config=self.config, labels=labels)
コード例 #33
0
 def pod(self):
     podspec = self.model.spec.job_template.spec.template.spec
     name = "{}-{}".format(self.name, int(time.time()))
     pod = K8sPod(config=self.config, name=name)
     pod.model.spec = podspec
     return pod
コード例 #34
0
 def get_pods(self):
     pods = K8sPod.get_by_labels(config=self.config, labels=self.pod_labels)
     return pods