fix(ingest/tableau): support ssl_verify flag properly (#6682)

This commit is contained in:
Harshal Sheth 2022-12-08 17:58:31 -05:00 committed by GitHub
parent 2008130f2f
commit acc79d7d0d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 36 additions and 3 deletions

View File

@ -176,10 +176,21 @@ class TableauConnectionConfig(ConfigModel):
)
try:
server = Server(self.connect_uri, use_server_version=True)
server = Server(
self.connect_uri,
use_server_version=True,
http_options={
# As per https://community.tableau.com/s/question/0D54T00000F33bdSAB/tableauserverclient-signin-with-ssl-certificate
"verify": bool(self.ssl_verify),
**(
{"cert": self.ssl_verify}
if isinstance(self.ssl_verify, str)
else {}
),
},
)
# From https://stackoverflow.com/a/50159273/5004662.
server._session.verify = self.ssl_verify
server._session.trust_env = False
server.auth.sign_in(authentication)

View File

@ -8,7 +8,7 @@ from freezegun import freeze_time
from tableauserverclient.models import ViewItem
from datahub.configuration.source_common import DEFAULT_ENV
from datahub.ingestion.run.pipeline import Pipeline
from datahub.ingestion.run.pipeline import Pipeline, PipelineContext
from datahub.ingestion.source.state.checkpoint import Checkpoint
from datahub.ingestion.source.state.tableau_state import TableauCheckpointState
from datahub.ingestion.source.tableau import TableauSource
@ -386,3 +386,25 @@ def test_tableau_stateful(pytestconfig, tmp_path, mock_time, mock_datahub_graph)
"urn:li:dashboard:(tableau,39b7a1de-6276-cfc7-9b59-1d22f3bbb06b)",
]
assert sorted(deleted_dashboard_urns) == sorted(difference_dashboard_urns)
def test_tableau_no_verify():
# This test ensures that we can connect to a self-signed certificate
# when ssl_verify is set to False.
source = TableauSource.create(
{
"connect_uri": "https://self-signed.badssl.com/",
"ssl_verify": False,
"site": "bogus",
# Credentials
"username": "bogus",
"password": "bogus",
},
PipelineContext(run_id="0"),
)
list(source.get_workunits())
report = source.get_report().as_string()
assert "SSL" not in report
assert "Unable to login" in report