Ошибка при использовании tcms_api на Windows («InitializeSecurityContext», «Указанная цель неизвестна или недоступна») - PullRequest
0 голосов
/ 04 февраля 2020

У меня проблемы с использованием tcms_api для связи с API в нашем развертывании Kiwi.

  • Мой хост: Windows 10
  • Наш хост киви: Docker контейнеры, работающие на CentOS
  • версия Kiwi: 7.3

Попытка выполнить этот скрипт (test_kiwi_api.py), взятый из примера, найденного где-то в сети:

import tcms_api
rpc_client = tcms_api.TCMS().exec

for test_case in rpc_client.exec.TestCase.filter({'pk': 46490}):
    print(test_case)

После выполнения шагов в пакет tcms-api 5.3 несовместим с Windows для перехода на kerberos-sspi (и установки Kerberos для Windows и kerberos-sspi python пакет), обнаружил эту ошибку:

C: \ kiwi \ api>. \ test_kiwi_api.py

Traceback (most recent call last):
  File "C:\kiwi\api\test_kiwi_api.py", line 1, in <module>
    import tcms_api
  File "C:\Users\rfeldman\AppData\Local\Programs\Python\Python37\lib\site-packages\tcms_api\__init__.py", line 64, in <module>
    from .xmlrpc import TCMSXmlrpc, TCMSKerbXmlrpc
  File "C:\Users\rfeldman\AppData\Local\Programs\Python\Python37\lib\site-packages\tcms_api\xmlrpc.py", line 22, in <module>
    import kerberos as k
ModuleNotFoundError: No module named 'kerberos'

После редактирования xmlrp c .py напрямую, чтобы он использовал kerberos -sspi вместо kerberos

выполняется путем изменения:

import kerberos

на:

try:
    import kerberos as k
except:
    import kerberos_sspi as k

... и изменения последующих ссылок Kerberos на k ссылок

Обнаружена эта ошибка:

C: \ kiwi \ api>. \ Test_kiwi_api.py

  File "C:\kiwi\api\test_kiwi_api.py", line 2, in <module>
    rpc_client = tcms_api.TCMS().exec
  File "C:\Users\rfeldman\AppData\Local\Programs\Python\Python37\lib\site-packages\tcms_api\__init__.py", line 99, in __init__
    TCMS._connection = TCMSKerbXmlrpc(config['tcms']['url']).server
  File "C:\Users\rfeldman\AppData\Local\Programs\Python\Python37\lib\site-packages\tcms_api\xmlrpc.py", line 142, in __init__
    self.server.Auth.login_krbv()
  File "C:\Users\rfeldman\AppData\Local\Programs\Python\Python37\lib\xmlrpc\client.py", line 1112, in __call__
    return self.__send(self.__name, args)
  File "C:\Users\rfeldman\AppData\Local\Programs\Python\Python37\lib\xmlrpc\client.py", line 1452, in __request
    verbose=self.__verbose
  File "C:\Users\rfeldman\AppData\Local\Programs\Python\Python37\lib\xmlrpc\client.py", line 1154, in request
    return self.single_request(host, handler, request_body, verbose)
  File "C:\Users\rfeldman\AppData\Local\Programs\Python\Python37\lib\xmlrpc\client.py", line 1166, in single_request
    http_conn = self.send_request(host, handler, request_body, verbose)
  File "C:\Users\rfeldman\AppData\Local\Programs\Python\Python37\lib\xmlrpc\client.py", line 1267, in send_request
    connection = self.make_connection(host)
  File "C:\Users\rfeldman\AppData\Local\Programs\Python\Python37\lib\site-packages\tcms_api\xmlrpc.py", line 79, in make_connection
    chost, self._extra_headers, x509 = self.get_host_info(host)
  File "C:\Users\rfeldman\AppData\Local\Programs\Python\Python37\lib\site-packages\tcms_api\xmlrpc.py", line 64, in get_host_info
    k.authGSSClientStep(context, "")
  File "C:\Users\rfeldman\AppData\Local\Programs\Python\Python37\lib\site-packages\kerberos_sspi.py", line 218, in authGSSClientStep
    err, sec_buffer = context["csa"].authorize(data)
  File "C:\Users\rfeldman\AppData\Local\Programs\Python\Python37\lib\site-packages\win32\lib\sspi.py", line 139, in authorize
    sec_buffer_out)
pywintypes.error: (-2146893053, 'InitializeSecurityContext', 'The specified target is unknown or unreachable')

Я посмотрел на ю Я пишу интерфейс API node.js (так как большая часть dev здесь делается на узле, и было бы неплохо иметь помощь dev при необходимости), но небольшое исследование показывает, что их пакет kerberos опирается на Python, так что я довольно уверен, что я столкнулся с этой проблемой и там. Если бы я мог написать это (node.js интерфейс tcms_api), но подключиться с помощью чего-то другого, кроме kerberos, я бы попробовал и поделился им, если смогу заставить его работать.

Редактировать : Вот мой конфигурационный файл (который на Windows идет в C: \ et c)

[tcms]
url = https://qaportal01.irvl.mymbnet.com/xml-rpc/
username = rfeldman
password = <not shown>
use_mod_kerb = False

1 Ответ

0 голосов
/ 07 февраля 2020

Оказывается, это была настоящая ошибка в обработке конфигурации. Даже когда для use_mod_kerb было установлено значение False, возвращаемое значение имело тип string («False»), которое Python всегда оценивалось как True в логическом контексте (любая непустая строка оценивается как True).

Это было исправлено путем преобразования значения конфигурации в значение bool перед оценкой: https://github.com/kiwitcms/tcms-api/pull/11 и было выпущено в версии 6.7.1

tcms-api
...