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)
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))
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
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)
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)
def test_renew_from_kt(self): """ We expect no result, but a successful run. No more TypeError """ self.assertIsNone(renew_from_kt())
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))
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