From ddfce0c2092f1bd7d65e02a7fb57354a1daf421c Mon Sep 17 00:00:00 2001 From: Nick Larsen Date: Fri, 8 Dec 2023 15:52:39 +0100 Subject: [PATCH] Revert "upgrade superset to 3.0.1, now that it supports database connection imports with user impersonation" It doesn't work. See https://github.com/apache/superset/pull/25872#issuecomment-1847319249 This reverts commit 3ed96ffe8d8755ec6ae6cd98e5364e65236154a1. --- demos/keycloak-opa/superset-assets.zip | Bin 1189 -> 808 bytes stacks/keycloak-opa/setup-superset.yaml | 44 ++++++++++++++++++++++++ stacks/keycloak-opa/superset.yaml | 4 +-- 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/demos/keycloak-opa/superset-assets.zip b/demos/keycloak-opa/superset-assets.zip index a3476d3a7a2858f0f96a79131a2dd8fe7ff8d41d..1d449cae1ee0eba096c6848e4e4ec872ab7084bd 100644 GIT binary patch literal 808 zcmb7CJ#X7E5S5*_17{B%*(pOHi^23eLC40yIpKe+D zt4d06fvO0C9C09c$9sIdd;8tht3@)}yX5rw_xHPSh<+0stQF33ao=gj;w4JRM*d%~=r&=xV#l zZwO(8T%-LzlpYs9-l|!WL|;EkDbgvy3Y#5_Y&CaXbsFeh61;^b5F4^MW|94>KvgHv z^xPZCu#1H(%dGFhmxNPH#VU(^$TES(@!_x}N_@oyIl+xe0@hu12w-v)9!Wga`*h%C(jns{rT(M{F zJEft%#KpZcz!1g*s^w>CoCn22)0Bu~R@#K_41Bzov2Ih7&HE!sb4o>8K)Fu0>yoB* zRd37ftq}R9Mw8j^ceDB8>SC1L;cVY zP6p<+>cy!bTw1}+z{v7~nSp`j-+u;%0Jymf42ldHVW+CSfaZd*HbHZ9Q%e$45=#>G zDid>az?OWNeohF4(JU!TEh^5;&$Ci6)HBdC;3}ysNVQUcxS6XYGdH!kBr&(ZNUoRVYF*gw)mtYdHniM2+~QT|_PqJb=AB(% zd>x*3U0!8rrTTeWQ0d%?V>1j^umAsZ$9pYdr!D84`8IB{Uj&G0RUcHVb1^n diff --git a/stacks/keycloak-opa/setup-superset.yaml b/stacks/keycloak-opa/setup-superset.yaml index 0cb1ebd..fe4901d 100644 --- a/stacks/keycloak-opa/setup-superset.yaml +++ b/stacks/keycloak-opa/setup-superset.yaml @@ -84,4 +84,48 @@ data: result = session.post(f"{base_url}/api/v1/assets/import", headers=headers, files=files, data=data) assert result.status_code == 200, f"{result.status_code}: {result.content}" + + # Now we must hit the API to set the DB Connection to `impersonate_user: true`, because the export and import doesn't allow for it + # See the incomplete PR: https://github.com/apache/superset/pull/14718 + + headers = headers | {"content-type": "application/json"} + + # todo: make this next part iterable so other demos can use the same script + db_connection_name = "Trino tpch" + query = { + "columns": ["id","database_name", "impersonate_user"], + "filters": [ + { + "col": "database_name", + "opr": "eq", + "value": db_connection_name + } + ], + "keys": ["none"] + } + + # Lookup the DB Connection to get the ID + result = session.get(f"{base_url}/api/v1/database", params={"q": json.dumps(query)}, headers=headers) + assert result.status_code == 200, f"{result.status_code}: {result.content}" + result = result.json() + assert result['count'] == 1, f"there should only be one result returned, but got {result['count']}" + result = result['result'][0] + assert result['database_name'] == db_connection_name, f"the superset search filter appears to be invalid, expected: db_connection_name, got: result['database_name']" # extra check to ensure we are looking at the right DB, since the API returns all if the filter has an invalid `opr` value. + trino_tpch_db_id = result["id"] + logging.info(f"Got database connection id for '{db_connection_name}': {trino_tpch_db_id}") + + # lookup result from above, since the search doesn't return `impersonate_user` + result = session.get(f"{base_url}/api/v1/database/{trino_tpch_db_id}", headers=headers) + assert result.status_code == 200, f"{result.status_code}: {result.content}" + result = result.json() + impersonate_user = result["result"]["impersonate_user"] + logging.info(f"The value of impersonate_user for '{db_connection_name}' was set to {impersonate_user}") + + # Enable impersonation (this is done as the superset admin user) + result = session.put(f"{base_url}/api/v1/database/{trino_tpch_db_id}", headers=headers, data=json.dumps({"impersonate_user": True})) + assert result.status_code == 200, f"{result.status_code}: {result.content}" + result = result.json() + impersonate_user = result["result"]["impersonate_user"] + logging.info(f"The value of impersonate_user for '{db_connection_name}' is now {impersonate_user}") + logging.info("Finished setup of Superset") diff --git a/stacks/keycloak-opa/superset.yaml b/stacks/keycloak-opa/superset.yaml index 93dbe34..4c171e8 100644 --- a/stacks/keycloak-opa/superset.yaml +++ b/stacks/keycloak-opa/superset.yaml @@ -4,8 +4,8 @@ metadata: name: superset spec: image: - productVersion: 3.0.1 - stackableVersion: 23.11.0 + productVersion: 2.1.0 + stackableVersion: 23.7.0 clusterConfig: credentialsSecret: superset-credentials listenerClass: external-unstable