During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/sam/Documents/freenet/nifi-automation/src/compose.py", line 122, in <module>
compose_services(env_config, types, NIFI_VERSION, False, bench)
File "/home/sam/Documents/freenet/nifi-automation/src/compose.py", line 11, in compose_services
pg = ProcessorGroups(NIFI_VERSION)
File "/home/sam/Documents/freenet/nifi-automation/src/components/processor_group.py", line 9, in __init__
processor_groups = nipyapi.canvas.list_all_process_groups(pg_id='root')
File "/home/sam/Documents/freenet/nifi-automation/venv/lib/python3.6/site-packages/nipyapi/canvas.py", line 178, in list_all_process_groups
root_flow = recurse_flow(pg_id)
File "/home/sam/Documents/freenet/nifi-automation/venv/lib/python3.6/site-packages/nipyapi/canvas.py", line 64, in recurse_flow
return _walk_flow(get_flow(pg_id))
File "/home/sam/Documents/freenet/nifi-automation/venv/lib/python3.6/site-packages/nipyapi/canvas.py", line 85, in get_flow
raise ValueError(err.body)
ValueError: No applicable policies could be found. Contact the system administrator.
Process finished with exit code 1
我有一些NIFI自动化脚本,当我在不安全的集群(localhost/或 somehwere)上运行时,它们工作得非常好,但是当我针对KNOX gateway后面的 URL 运行时,我得到了这个错误。我可以在nipyapi.access_api类中看到一些函数
- def knox_callback(**kwargs)
- def knox_callback_with_http_info(self, **kwargs):
- def knox_request(self, **kwargs):
- def knox_request_with_http_info(self, **kwargs):
我无法理解如何使用这些或与类中的任何其他功能相结合来克服这个问题?任何想法?
EDIT1: 首先使用security.py 函数的IM 是secure_login。在文档中,其书面登录需要通过 https 进行安全连接。在调用此方法之前,必须指定主机并配置 SSLContext(如果需要)。 set_service_ssl_context这个函数可以达到目的,但我不确定我是否需要它,因为一种方式 TSL 不需要它。
但我有一个困惑。我有两个 URL,一个带有 LDAP 登录的 Knox URl 另一个直接 URI(尽管它也重定向到 knox-Ldap 序列)当我给 Knox url 时,与直接错误相比,我得到了一个不同的错误。
从我得到的直接 URI
File /nipyapi/security.py", line 130, in service_login
username=username, password=password)
nipyapi.nifi.rest.ApiException: (409)
Reason: Conflict
HTTP response body: Username/Password login not supported by this NiFi.
如果是 Knox uri,它会在同一行上引发相同的连接错误异常,但
nipyapi.nifi.rest.ApiException: (404)
Reason: Not Found
所以我假设我必须使用直接网址。其次,为什么它说用户不适合。我可以手动登录。来自 LDAP 序列。我当前的请求是以匿名用户身份进行的,因此我将使用 Certs 并尝试使用 PEM 文件的 set_service_ssl_context 函数。
顺便说一句,下面是两个网址。
“nifi_host”:“https://****.****.net:8443/nifi-api”,直接网址
“nifi_host”:“https://****-****.****.net:8443/gateway/****-sso/nifi-api”,诺克斯网址
编辑 2: 即使使用以下代码,我的请求也会在服务器上以匿名方式接收。
nipyapi.security.set_service_ssl_context(service='nifi', ca_file=None, client_cert_file="bi.keystore", client_key_file=None, client_key_password="infraop6043")
nipyapi.security.service_login(username='myuser', password='mypass')
它在这里给出连接错误
nipyapi.nifi.AccessApi().create_access_token( username=username, password=password) 并显示此错误 HTTP 响应正文:此 NiFi 不支持用户名/密码登录
我不确定如何正确使用 set_service_ssl_context。也许我应该尝试直接使用letsencrypt-root-ca而不是bi.keystore:letsencrypt.org/certs/isrgrootx1.pem.txt或我的本地系统ca-certs。
我的 toolkit-cli 属性文件是
*baseUrl= https://svc-hadoop-utilities-pre-c3-02.jamba.net:18443
keystore=/home/jread/nifi-toolkit/bi.keystore
密钥库类型=JKS
keystorePasswd=infraop6043
密钥密码=
truststore=/usr/lib/java/jre/lib/security/cacerts
信任库类型=JKS
truststorePasswd=changeit
proxiedEntity=CN=bijobs.jamba.net*