コード例 #1
0
    def on_kill(self) -> None:
        """Kill Spark submit command"""
        self.log.debug("Kill Command is being called")

        if self._should_track_driver_status:
            if self._driver_id:
                self.log.info('Killing driver %s on cluster', self._driver_id)

                kill_cmd = self._build_spark_driver_kill_command()
                driver_kill = subprocess.Popen(kill_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)

                self.log.info(
                    "Spark driver %s killed with return code: %s", self._driver_id, driver_kill.wait()
                )

        if self._submit_sp and self._submit_sp.poll() is None:
            self.log.info('Sending kill signal to %s', self._connection['spark_binary'])
            self._submit_sp.kill()

            if self._yarn_application_id:
                kill_cmd = f"yarn application -kill {self._yarn_application_id}".split()
                env = None
                if self._keytab is not None and self._principal is not None:
                    # we are ignoring renewal failures from renew_from_kt
                    # here as the failure could just be due to a non-renewable ticket,
                    # we still attempt to kill the yarn application
                    renew_from_kt(self._principal, self._keytab, exit_on_fail=False)
                    env = os.environ.copy()
                    env["KRB5CCNAME"] = airflow_conf.get('kerberos', 'ccache')

                yarn_kill = subprocess.Popen(
                    kill_cmd, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE
                )

                self.log.info("YARN app killed with return code: %s", yarn_kill.wait())

            if self._kubernetes_driver_pod:
                self.log.info('Killing pod %s on Kubernetes', self._kubernetes_driver_pod)

                # Currently only instantiate Kubernetes client for killing a spark pod.
                try:
                    import kubernetes

                    client = kube_client.get_kube_client()
                    api_response = client.delete_namespaced_pod(
                        self._kubernetes_driver_pod,
                        self._connection['namespace'],
                        body=kubernetes.client.V1DeleteOptions(),
                        pretty=True,
                    )

                    self.log.info("Spark on K8s killed with response: %s", api_response)

                except kube_client.ApiException as e:
                    self.log.error("Exception when attempting to kill Spark on K8s:")
                    self.log.exception(e)
コード例 #2
0
 def test_renew_from_kt(self):
     """
     We expect no result, but a successful run. No more TypeError
     """
     self.assertIsNone(
         renew_from_kt(principal=self.args.principal,
                       keytab=self.args.keytab))
コード例 #3
0
ファイル: test_kerberos.py プロジェクト: ysktir/airflow-1
    def test_args_from_cli(self):
        """
        We expect no result, but a run with sys.exit(1) because keytab not exist.
        """
        self.args.keytab = "test_keytab"

        with pytest.raises(SystemExit) as ctx:
            renew_from_kt(principal=self.args.principal,
                          keytab=self.args.keytab)  # pylint: disable=no-member

            with self.assertLogs(kerberos.log) as log:
                assert ('kinit: krb5_init_creds_set_keytab: Failed to find '
                        '[email protected] in keytab FILE:{} '
                        '(unknown enctype)'.format(self.args.keytab)
                        in log.output)

            assert ctx.value.code == 1
コード例 #4
0
    def test_args_from_cli(self):
        """
        We expect no result, but a run with sys.exit(1) because keytab not exist.
        """
        configuration.conf.set("kerberos", "keytab", "")
        self.args.keytab = "test_keytab"

        with self.assertRaises(SystemExit) as se:
            renew_from_kt(principal=self.args.principal,
                          keytab=self.args.keytab)

            with self.assertLogs(LoggingMixin().log) as log:
                self.assertIn(
                    'kinit: krb5_init_creds_set_keytab: Failed to find '
                    '[email protected] in keytab FILE:{} '
                    '(unknown enctype)'.format(self.args.keytab), log.output)

        self.assertEqual(se.exception.code, 1)
コード例 #5
0
    def test_args_from_cli(self):
        """
        We expect no result, but a run with sys.exit(1) because keytab not exist.
        """
        configuration.conf.set("kerberos", "keytab", "")
        self.args.keytab = "test_keytab"

        with self.assertRaises(SystemExit) as se:
            renew_from_kt(principal=self.args.principal,
                          keytab=self.args.keytab)

            with self.assertLogs(LoggingMixin().log) as log:
                self.assertIn(
                    'kinit: krb5_init_creds_set_keytab: Failed to find '
                    '[email protected] in keytab FILE:{} '
                    '(unknown enctype)'.format(self.args.keytab), log.output)

        self.assertEqual(se.exception.code, 1)
コード例 #6
0
ファイル: test_kerberos.py プロジェクト: folly3/airflow-1
    def test_args_from_cli(self):
        """
        We expect no result, but a run with sys.exit(1) because keytab not exist.
        """
        self.args.keytab = "test_keytab"

        with self.assertRaises(SystemExit) as err:
            renew_from_kt(
                principal=self.args.principal,  # pylint: disable=no-member
                keytab=self.args.keytab)

            with self.assertLogs(kerberos.log) as log:
                self.assertIn(
                    'kinit: krb5_init_creds_set_keytab: Failed to find '
                    '[email protected] in keytab FILE:{} '
                    '(unknown enctype)'.format(self.args.keytab), log.output)

            self.assertEqual(err.exception.code, 1)
コード例 #7
0
 def test_renew_from_kt(self):
     """
     We expect no result, but a successful run. No more TypeError
     """
     self.assertIsNone(renew_from_kt())
コード例 #8
0
 def test_renew_from_kt(self):
     """
     We expect no result, but a successful run. No more TypeError
     """
     self.assertIsNone(renew_from_kt(principal=self.args.principal,
                                     keytab=self.args.keytab))
コード例 #9
0
ファイル: test_kerberos.py プロジェクト: ysktir/airflow-1
 def test_renew_from_kt(self):
     """
     We expect no result, but a successful run. No more TypeError
     """
     assert (renew_from_kt(principal=self.args.principal,
                           keytab=self.args.keytab) is None)  # pylint: disable=no-member
コード例 #10
0
ファイル: test_kerberos.py プロジェクト: wengle520/airflow
 def test_renew_from_kt(self):
     """
     We expect no result, but a successful run. No more TypeError
     """
     self.assertIsNone(renew_from_kt())