コード例 #1
0
 def test_pod_dnspolicy(self):
     dns_policy = "ClusterFirstWithHostNet"
     k = KubernetesPodOperator(namespace='default',
                               image="ubuntu:16.04",
                               cmds=["bash", "-cx"],
                               arguments=["echo 10"],
                               labels={"foo": "bar"},
                               name="test",
                               task_id="task",
                               in_cluster=False,
                               do_xcom_push=False,
                               hostnetwork=True,
                               dnspolicy=dns_policy)
     context = create_context(k)
     k.execute(context)
     actual_pod = self.api_client.sanitize_for_serialization(k.pod)
     self.expected_pod['spec']['hostNetwork'] = True
     self.expected_pod['spec']['dnsPolicy'] = dns_policy
     self.assertEqual(self.expected_pod['spec'], actual_pod['spec'])
     self.assertEqual(self.expected_pod['metadata']['labels'],
                      actual_pod['metadata']['labels'])
コード例 #2
0
 def test_pod_node_selectors(self):
     node_selectors = {
         'beta.kubernetes.io/os': 'linux'
     }
     k = KubernetesPodOperator(
         namespace='default',
         image="ubuntu:16.04",
         cmds=["bash", "-cx"],
         arguments=["echo 10"],
         labels={"foo": "bar"},
         name="test",
         task_id="task",
         in_cluster=False,
         do_xcom_push=False,
         node_selectors=node_selectors,
     )
     context = self.create_context(k)
     k.execute(context)
     actual_pod = self.api_client.sanitize_for_serialization(k.pod)
     self.expected_pod['spec']['nodeSelector'] = node_selectors
     self.assertEqual(self.expected_pod, actual_pod)
コード例 #3
0
    def test_no_need_to_describe_pod_on_success(self):
        name_base = "test"

        k = KubernetesPodOperator(
            namespace="default",
            image="ubuntu:16.04",
            cmds=["bash", "-cx"],
            arguments=["echo 10"],
            labels={"foo": "bar"},
            name=name_base,
            task_id="task",
            in_cluster=False,
            do_xcom_push=False,
            cluster_context="default",
        )
        self.monitor_mock.return_value = (State.SUCCESS, None)

        context = self.create_context(k)
        k.execute(context=context)

        assert not self.client_mock.return_value.read_namespaced_pod.called
コード例 #4
0
 def test_faulty_service_account(self):
     bad_service_account_name = "foobar"
     k = KubernetesPodOperator(
         namespace='default',
         image="ubuntu:16.04",
         cmds=["bash", "-cx"],
         arguments=["echo 10"],
         labels={"foo": "bar"},
         name="test-" + str(random.randint(0, 1000000)),
         task_id="task" + self.get_current_task_name(),
         in_cluster=False,
         do_xcom_push=False,
         startup_timeout_seconds=5,
         service_account_name=bad_service_account_name,
     )
     context = create_context(k)
     pod = k.build_pod_request_obj(context)
     with pytest.raises(
             ApiException,
             match="error looking up service account default/foobar"):
         k.get_or_create_pod(pod, context)
コード例 #5
0
 def test_pod_delete_even_on_launcher_error(
     self, mock_client, delete_pod_mock, monitor_pod_mock, start_pod_mock
 ):
     k = KubernetesPodOperator(
         namespace='default',
         image="ubuntu:16.04",
         cmds=["bash", "-cx"],
         arguments=["echo 10"],
         labels={"foo": "bar"},
         name="test",
         task_id="task",
         in_cluster=False,
         do_xcom_push=False,
         cluster_context='default',
         is_delete_operator_pod=True,
     )
     monitor_pod_mock.side_effect = AirflowException('fake failure')
     with self.assertRaises(AirflowException):
         context = self.create_context(k)
         k.execute(context=context)
     assert delete_pod_mock.called
コード例 #6
0
 def test_faulty_service_account(self):
     bad_service_account_name = "foobar"
     k = KubernetesPodOperator(
         namespace='default',
         image="ubuntu:16.04",
         cmds=["bash", "-cx"],
         arguments=["echo 10"],
         labels={"foo": "bar"},
         name="test",
         task_id="task",
         in_cluster=False,
         do_xcom_push=False,
         startup_timeout_seconds=5,
         service_account_name=bad_service_account_name,
     )
     with self.assertRaises(ApiException):
         context = self.create_context(k)
         k.execute(context)
         actual_pod = self.api_client.sanitize_for_serialization(k.pod)
         self.expected_pod['spec']['serviceAccountName'] = bad_service_account_name
         self.assertEqual(self.expected_pod, actual_pod)
コード例 #7
0
 def test_envs_from_configmaps(self, ):
     configmap_name = "test-config-map"
     env_from = [
         k8s.V1EnvFromSource(config_map_ref=k8s.V1ConfigMapEnvSource(
             name=configmap_name))
     ]
     # WHEN
     k = KubernetesPodOperator(
         namespace='default',
         image="ubuntu:16.04",
         cmds=["bash", "-cx"],
         arguments=["echo 10"],
         labels={"foo": "bar"},
         name="test",
         task_id="task",
         in_cluster=False,
         do_xcom_push=False,
         env_from=env_from,
     )
     pod = self.run_pod(k)
     assert pod.spec.containers[0].env_from == env_from
コード例 #8
0
    def test_image_pull_policy_not_set(self, mock_client, monitor_mock,
                                       start_mock):
        from airflow.utils.state import State

        k = KubernetesPodOperator(
            namespace='default',
            image="ubuntu:16.04",
            cmds=["bash", "-cx"],
            arguments=["echo 10"],
            labels={"foo": "bar"},
            name="test",
            task_id="task",
            in_cluster=False,
            do_xcom_push=False,
            cluster_context='default',
        )
        monitor_mock.return_value = (State.SUCCESS, None)
        context = self.create_context(k)
        k.execute(context=context)
        assert start_mock.call_args[0][0].spec.containers[
            0].image_pull_policy == 'IfNotPresent'
コード例 #9
0
 def test_image_pull_secrets_correctly_set(self, mock_client, monitor_mock, start_mock):
     fake_pull_secrets = "fakeSecret"
     k = KubernetesPodOperator(
         namespace='default',
         image="ubuntu:16.04",
         cmds=["bash", "-cx"],
         arguments=["echo 10"],
         labels={"foo": "bar"},
         name="test",
         task_id="task",
         in_cluster=False,
         do_xcom_push=False,
         image_pull_secrets=fake_pull_secrets,
         cluster_context='default',
     )
     monitor_mock.return_value = (State.SUCCESS, None)
     context = create_context(k)
     k.execute(context=context)
     assert start_mock.call_args[0][0].spec.image_pull_secrets == [
         k8s.V1LocalObjectReference(name=fake_pull_secrets)
     ]
コード例 #10
0
 def test_labels(self):
     k = KubernetesPodOperator(
         namespace="default",
         image="ubuntu:16.04",
         cmds=["bash", "-cx"],
         labels={"foo": "bar"},
         name="test",
         task_id="task",
         in_cluster=False,
         do_xcom_push=False,
     )
     pod = self.run_pod(k)
     assert pod.metadata.labels == {
         "foo": "bar",
         "dag_id": "dag",
         "kubernetes_pod_operator": "True",
         "task_id": "task",
         "try_number": "1",
         "airflow_version": mock.ANY,
         "execution_date": mock.ANY,
     }
コード例 #11
0
    def test_pod_template_file_with_overrides_system(self):
        fixture = sys.path[0] + '/tests/kubernetes/basic_pod.yaml'
        k = KubernetesPodOperator(
            task_id="task" + self.get_current_task_name(),
            labels={
                "foo": "bar",
                "fizz": "buzz"
            },
            env_vars={"env_name": "value"},
            in_cluster=False,
            pod_template_file=fixture,
            do_xcom_push=True,
        )

        context = create_context(k)
        result = k.execute(context)
        self.assertIsNotNone(result)
        self.assertEqual(k.pod.metadata.labels, {'fizz': 'buzz', 'foo': 'bar'})
        self.assertEqual(k.pod.spec.containers[0].env,
                         [k8s.V1EnvVar(name="env_name", value="value")])
        self.assertDictEqual(result, {"hello": "world"})
コード例 #12
0
 def test_faulty_image(self):
     bad_image_name = "foobar"
     k = KubernetesPodOperator(
         namespace='default',
         image=bad_image_name,
         cmds=["bash", "-cx"],
         arguments=["echo 10"],
         labels={"foo": "bar"},
         name="test-" + str(random.randint(0, 1000000)),
         task_id="task" + self.get_current_task_name(),
         in_cluster=False,
         do_xcom_push=False,
         startup_timeout_seconds=5,
     )
     with self.assertRaises(AirflowException):
         context = create_context(k)
         k.execute(context)
         actual_pod = self.api_client.sanitize_for_serialization(k.pod)
         self.expected_pod['spec']['containers'][0][
             'image'] = bad_image_name
         self.assertEqual(self.expected_pod, actual_pod)
コード例 #13
0
    def test_config_path_move(self):
        new_config_path = '/tmp/kube_config'
        old_config_path = get_kubeconfig_path()
        shutil.copy(old_config_path, new_config_path)

        k = KubernetesPodOperator(
            namespace='default',
            image="ubuntu:16.04",
            cmds=["bash", "-cx"],
            arguments=["echo 10"],
            labels={"foo": "bar"},
            name="test1",
            task_id="task" + self.get_current_task_name(),
            in_cluster=False,
            do_xcom_push=False,
            config_file=new_config_path,
        )
        context = create_context(k)
        k.execute(context)
        actual_pod = self.api_client.sanitize_for_serialization(k.pod)
        self.assertEqual(self.expected_pod, actual_pod)
コード例 #14
0
    def test_full_pod_spec(self):
        pod_spec = k8s.V1Pod(
            metadata=k8s.V1ObjectMeta(
                labels={"foo": "bar", "fizz": "buzz"}, namespace="default", name="test-pod"
            ),
            spec=k8s.V1PodSpec(
                containers=[
                    k8s.V1Container(
                        name="base",
                        image="perl",
                        command=["/bin/bash"],
                        args=["-c", 'echo {\\"hello\\" : \\"world\\"} | cat > /airflow/xcom/return.json'],
                        env=[k8s.V1EnvVar(name="env_name", value="value")],
                    )
                ],
                restart_policy="Never",
            ),
        )
        k = KubernetesPodOperator(
            task_id="task" + self.get_current_task_name(),
            in_cluster=False,
            full_pod_spec=pod_spec,
            do_xcom_push=True,
        )

        context = create_context(k)
        result = k.execute(context)
        assert result is not None
        assert k.pod.metadata.labels == {
            'fizz': 'buzz',
            'foo': 'bar',
            'airflow_version': mock.ANY,
            'dag_id': 'dag',
            'execution_date': mock.ANY,
            'kubernetes_pod_operator': 'True',
            'task_id': mock.ANY,
            'try_number': '1',
        }
        assert k.pod.spec.containers[0].env == [k8s.V1EnvVar(name="env_name", value="value")]
        assert result == {"hello": "world"}
コード例 #15
0
    def test_volume_mount(self):
        with mock.patch.object(PodLauncher, 'log') as mock_logger:
            volume_mount = k8s.V1VolumeMount(
                name='test-volume', mount_path='/tmp/test_volume', sub_path=None, read_only=False
            )

            volume = k8s.V1Volume(
                name='test-volume',
                persistent_volume_claim=k8s.V1PersistentVolumeClaimVolumeSource(claim_name='test-volume'),
            )

            args = [
                "echo \"retrieved from mount\" > /tmp/test_volume/test.txt "
                "&& cat /tmp/test_volume/test.txt"
            ]
            k = KubernetesPodOperator(
                namespace='default',
                image="ubuntu:16.04",
                cmds=["bash", "-cx"],
                arguments=args,
                labels={"foo": "bar"},
                volume_mounts=[volume_mount],
                volumes=[volume],
                name="test-" + str(random.randint(0, 1000000)),
                task_id="task" + self.get_current_task_name(),
                in_cluster=False,
                do_xcom_push=False,
            )
            context = create_context(k)
            k.execute(context=context)
            mock_logger.info.assert_any_call('retrieved from mount')
            actual_pod = self.api_client.sanitize_for_serialization(k.pod)
            self.expected_pod['spec']['containers'][0]['args'] = args
            self.expected_pod['spec']['containers'][0]['volumeMounts'] = [
                {'name': 'test-volume', 'mountPath': '/tmp/test_volume', 'readOnly': False}
            ]
            self.expected_pod['spec']['volumes'] = [
                {'name': 'test-volume', 'persistentVolumeClaim': {'claimName': 'test-volume'}}
            ]
            assert self.expected_pod == actual_pod
コード例 #16
0
 def test_run_as_user_root(self):
     security_context = {
         'securityContext': {
             'runAsUser': 0,
         }
     }
     k = KubernetesPodOperator(
         namespace='default',
         image="ubuntu:16.04",
         cmds=["bash", "-cx"],
         arguments=["echo 10"],
         labels={"foo": "bar"},
         name="test",
         task_id="task",
         in_cluster=False,
         do_xcom_push=False,
         security_context=security_context,
     )
     k.execute(None)
     actual_pod = self.api_client.sanitize_for_serialization(k.pod)
     self.expected_pod['spec']['securityContext'] = security_context
     self.assertEqual(self.expected_pod, actual_pod)
コード例 #17
0
 def test_pod_failure(self):
     """
         Tests that the task fails when a pod reports a failure
     """
     bad_internal_command = ["foobar 10 "]
     k = KubernetesPodOperator(
         namespace='default',
         image="ubuntu:16.04",
         cmds=["bash", "-cx"],
         arguments=bad_internal_command,
         labels={"foo": "bar"},
         name="test",
         task_id="task",
         in_cluster=False,
         do_xcom_push=False,
     )
     with self.assertRaises(AirflowException):
         k.execute(None)
         actual_pod = self.api_client.sanitize_for_serialization(k.pod)
         self.expected_pod['spec']['containers'][0][
             'args'] = bad_internal_command
         self.assertEqual(self.expected_pod, actual_pod)
コード例 #18
0
 def test_pod_failure(self):
     """
     Tests that the task fails when a pod reports a failure
     """
     bad_internal_command = ["foobar 10 "]
     k = KubernetesPodOperator(
         namespace='default',
         image="ubuntu:16.04",
         cmds=["bash", "-cx"],
         arguments=bad_internal_command,
         labels={"foo": "bar"},
         name="test-" + str(random.randint(0, 1000000)),
         task_id="task" + self.get_current_task_name(),
         in_cluster=False,
         do_xcom_push=False,
     )
     with pytest.raises(AirflowException):
         context = create_context(k)
         k.execute(context)
         actual_pod = self.api_client.sanitize_for_serialization(k.pod)
         self.expected_pod['spec']['containers'][0]['args'] = bad_internal_command
         assert self.expected_pod == actual_pod
コード例 #19
0
    def test_pod_template_file_with_full_pod_spec(self):
        fixture = sys.path[0] + '/tests/kubernetes/basic_pod.yaml'
        pod_spec = k8s.V1Pod(
            metadata=k8s.V1ObjectMeta(labels={
                "foo": "bar",
                "fizz": "buzz"
            }, ),
            spec=k8s.V1PodSpec(containers=[
                k8s.V1Container(
                    name="base",
                    env=[k8s.V1EnvVar(name="env_name", value="value")],
                )
            ]),
        )
        k = KubernetesPodOperator(
            task_id="task" + self.get_current_task_name(),
            in_cluster=False,
            pod_template_file=fixture,
            full_pod_spec=pod_spec,
            do_xcom_push=True,
        )

        context = create_context(k)
        result = k.execute(context)
        assert result is not None
        assert k.pod.metadata.labels == {
            'fizz': 'buzz',
            'foo': 'bar',
            'airflow_version': mock.ANY,
            'dag_id': 'dag',
            'execution_date': mock.ANY,
            'kubernetes_pod_operator': 'True',
            'task_id': mock.ANY,
            'try_number': '1',
        }
        assert k.pod.spec.containers[0].env == [
            k8s.V1EnvVar(name="env_name", value="value")
        ]
        assert result == {"hello": "world"}
コード例 #20
0
    def test_port(self):
        port = Port('http', 80)

        k = KubernetesPodOperator(
            namespace='default',
            image="ubuntu:16.04",
            cmds=["bash", "-cx"],
            arguments=["echo 10"],
            labels={"foo": "bar"},
            name="test",
            task_id="task",
            in_cluster=False,
            do_xcom_push=False,
            ports=[port],
        )
        k.execute(None)
        actual_pod = self.api_client.sanitize_for_serialization(k.pod)
        self.expected_pod['spec']['containers'][0]['ports'] = [{
            'name': 'http',
            'containerPort': 80
        }]
        self.assertEqual(self.expected_pod, actual_pod)
コード例 #21
0
    def test_image_pull_secrets_correctly_set(self, mock_client,
                                              launcher_mock):
        from airflow.utils.state import State

        fake_pull_secrets = "fakeSecret"
        k = KubernetesPodOperator(
            namespace='default',
            image="ubuntu:16.04",
            cmds=["bash", "-cx"],
            arguments=["echo 10"],
            labels={"foo": "bar"},
            name="test",
            task_id="task",
            in_cluster=False,
            do_xcom_push=False,
            image_pull_secrets=fake_pull_secrets,
            cluster_context='default',
        )
        launcher_mock.return_value = (State.SUCCESS, None)
        k.execute(None)
        self.assertEqual(launcher_mock.call_args[0][0].spec.image_pull_secrets,
                         [k8s.V1LocalObjectReference(name=fake_pull_secrets)])
コード例 #22
0
    def test_env_vars(self):
        # WHEN
        k = KubernetesPodOperator(
            namespace='default',
            image="ubuntu:16.04",
            cmds=["bash", "-cx"],
            arguments=["echo 10"],
            env_vars={
                "ENV1": "val1",
                "ENV2": "val2",
            },
            pod_runtime_info_envs=[PodRuntimeInfoEnv("ENV3", "status.podIP")],
            labels={"foo": "bar"},
            name="test",
            task_id="task" + self.get_current_task_name(),
            in_cluster=False,
            do_xcom_push=False,
        )

        context = create_context(k)
        k.execute(context)

        # THEN
        actual_pod = self.api_client.sanitize_for_serialization(k.pod)
        self.expected_pod['spec']['containers'][0]['env'] = [{
            'name': 'ENV1',
            'value': 'val1'
        }, {
            'name': 'ENV2',
            'value': 'val2'
        }, {
            'name': 'ENV3',
            'valueFrom': {
                'fieldRef': {
                    'fieldPath': 'status.podIP'
                }
            }
        }]
        self.assertEqual(self.expected_pod, actual_pod)
コード例 #23
0
 def test_pod_resources(self):
     resources = {
         'limit_cpu': 0.25,
         'limit_memory': '64Mi',
         'limit_ephemeral_storage': '2Gi',
         'request_cpu': '250m',
         'request_memory': '64Mi',
         'request_ephemeral_storage': '1Gi',
     }
     k = KubernetesPodOperator(
         namespace='default',
         image="ubuntu:16.04",
         cmds=["bash", "-cx"],
         arguments=["echo 10"],
         labels={"foo": "bar"},
         name="test",
         task_id="task",
         in_cluster=False,
         do_xcom_push=False,
         resources=resources,
     )
     context = self.create_context(k)
     k.execute(context)
     actual_pod = self.api_client.sanitize_for_serialization(k.pod)
     self.expected_pod['spec']['containers'][0]['resources'] = {
         'requests': {
             'memory': '64Mi',
             'cpu': '250m',
             'ephemeral-storage': '1Gi'
         },
         'limits': {
             'memory': '64Mi',
             'cpu': 0.25,
             'nvidia.com/gpu': None,
             'ephemeral-storage': '2Gi'
         }
     }
     self.assertEqual(self.expected_pod, actual_pod)
コード例 #24
0
    def test_volume_mount(self):
        with patch.object(PodManager, 'log') as mock_logger:
            volume_mount = VolumeMount(
                'test-volume', mount_path='/tmp/test_volume', sub_path=None, read_only=False
            )

            volume_config = {'persistentVolumeClaim': {'claimName': 'test-volume'}}
            volume = Volume(name='test-volume', configs=volume_config)
            args = [
                "echo \"retrieved from mount\" > /tmp/test_volume/test.txt "
                "&& cat /tmp/test_volume/test.txt"
            ]
            k = KubernetesPodOperator(
                namespace='default',
                image="ubuntu:16.04",
                cmds=["bash", "-cx"],
                arguments=args,
                labels={"foo": "bar"},
                volume_mounts=[volume_mount],
                volumes=[volume],
                is_delete_operator_pod=False,
                name="test",
                task_id="task",
                in_cluster=False,
                do_xcom_push=False,
            )
            context = create_context(k)
            k.execute(context=context)
            mock_logger.info.assert_any_call('retrieved from mount')
            actual_pod = self.api_client.sanitize_for_serialization(k.pod)
            self.expected_pod['spec']['containers'][0]['args'] = args
            self.expected_pod['spec']['containers'][0]['volumeMounts'] = [
                {'name': 'test-volume', 'mountPath': '/tmp/test_volume', 'readOnly': False}
            ]
            self.expected_pod['spec']['volumes'] = [
                {'name': 'test-volume', 'persistentVolumeClaim': {'claimName': 'test-volume'}}
            ]
            assert self.expected_pod == actual_pod
コード例 #25
0
    def test_full_pod_spec(self):
        pod_spec = k8s.V1Pod(
            metadata=k8s.V1ObjectMeta(labels={
                "foo": "bar",
                "fizz": "buzz"
            },
                                      namespace="default",
                                      name="test-pod"),
            spec=k8s.V1PodSpec(
                containers=[
                    k8s.V1Container(
                        name="base",
                        image="perl",
                        command=["/bin/bash"],
                        args=[
                            "-c",
                            'echo {\\"hello\\" : \\"world\\"} | cat > /airflow/xcom/return.json'
                        ],
                        env=[k8s.V1EnvVar(name="env_name", value="value")],
                    )
                ],
                restart_policy="Never",
            ),
        )
        k = KubernetesPodOperator(
            task_id="task" + self.get_current_task_name(),
            in_cluster=False,
            full_pod_spec=pod_spec,
            do_xcom_push=True,
        )

        context = create_context(k)
        result = k.execute(context)
        self.assertIsNotNone(result)
        self.assertEqual(k.pod.metadata.labels, {'fizz': 'buzz', 'foo': 'bar'})
        self.assertEqual(k.pod.spec.containers[0].env,
                         [k8s.V1EnvVar(name="env_name", value="value")])
        self.assertDictEqual(result, {"hello": "world"})
コード例 #26
0
 def test_faulty_service_account(self):
     """pod creation should fail when service account does not exist"""
     service_account = "foobar"
     namespace = "default"
     k = KubernetesPodOperator(
         namespace=namespace,
         image="ubuntu:16.04",
         cmds=["bash", "-cx"],
         arguments=["echo 10"],
         labels={"foo": "bar"},
         name="test",
         task_id="task",
         in_cluster=False,
         do_xcom_push=False,
         startup_timeout_seconds=5,
         service_account_name=service_account,
     )
     context = create_context(k)
     pod = k.build_pod_request_obj(context)
     with pytest.raises(
         ApiException, match=f"error looking up service account {namespace}/{service_account}"
     ):
         k.get_or_create_pod(pod, context)
コード例 #27
0
    def test_port(self):
        port = k8s.V1ContainerPort(
            name='http',
            container_port=80,
        )

        k = KubernetesPodOperator(
            namespace='default',
            image="ubuntu:16.04",
            cmds=["bash", "-cx"],
            arguments=["echo 10"],
            labels={"foo": "bar"},
            name="test-" + str(random.randint(0, 1000000)),
            task_id="task" + self.get_current_task_name(),
            in_cluster=False,
            do_xcom_push=False,
            ports=[port],
        )
        context = create_context(k)
        k.execute(context=context)
        actual_pod = self.api_client.sanitize_for_serialization(k.pod)
        self.expected_pod['spec']['containers'][0]['ports'] = [{'name': 'http', 'containerPort': 80}]
        assert self.expected_pod == actual_pod
コード例 #28
0
    def test_randomize_pod_name(self, mock_client, monitor_mock, start_mock):
        from airflow.utils.state import State

        name_base = 'test'

        k = KubernetesPodOperator(
            namespace='default',
            image="ubuntu:16.04",
            cmds=["bash", "-cx"],
            arguments=["echo 10"],
            labels={"foo": "bar"},
            name=name_base,
            task_id="task",
            in_cluster=False,
            do_xcom_push=False,
            cluster_context='default',
        )
        monitor_mock.return_value = (State.SUCCESS, None)
        context = self.create_context(k)
        k.execute(context=context)

        assert start_mock.call_args[0][0].metadata.name.startswith(name_base)
        assert start_mock.call_args[0][0].metadata.name != name_base
コード例 #29
0
 def test_run_as_user_root(self):
     security_context = {
         'securityContext': {
             'runAsUser': 0,
         }
     }
     k = KubernetesPodOperator(
         namespace='default',
         image="ubuntu:16.04",
         cmds=["bash", "-cx"],
         arguments=["echo 10"],
         labels={"foo": "bar"},
         name="test-" + str(random.randint(0, 1000000)),
         task_id="task" + self.get_current_task_name(),
         in_cluster=False,
         do_xcom_push=False,
         security_context=security_context,
     )
     context = create_context(k)
     k.execute(context)
     actual_pod = self.api_client.sanitize_for_serialization(k.pod)
     self.expected_pod['spec']['securityContext'] = security_context
     assert self.expected_pod == actual_pod
コード例 #30
0
    def test_pod_priority_class_name(self, mock_client, monitor_mock,
                                     start_mock):  # pylint: disable=unused-argument
        """Test ability to assign priorityClassName to pod"""
        priority_class_name = "medium-test"
        k = KubernetesPodOperator(
            namespace='default',
            image="ubuntu:16.04",
            cmds=["bash", "-cx"],
            arguments=["echo 10"],
            labels={"foo": "bar"},
            name="test",
            task_id="task",
            in_cluster=False,
            do_xcom_push=False,
            priority_class_name=priority_class_name,
        )

        monitor_mock.return_value = (State.SUCCESS, None)
        context = self.create_context(k)
        k.execute(context)
        actual_pod = self.api_client.sanitize_for_serialization(k.pod)
        self.expected_pod['spec']['priorityClassName'] = priority_class_name
        assert self.expected_pod == actual_pod