<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Migrating dashboards from one workspace to another workspace in Get Started Discussions</title>
    <link>https://community.databricks.com/t5/get-started-discussions/migrating-dashboards-from-one-workspace-to-another-workspace/m-p/80683#M7945</link>
    <description>&lt;P&gt;Hi romy,&lt;BR /&gt;&amp;nbsp; Thanks for your quick reply. I have migrated dashboards to targeted workspace. But what about legacy dashboards can we export those too. When I am trying to migrate them only names of legacy dashboards are migrated but not the queries and datasets. I am adding the code below&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;import &lt;SPAN&gt;requests&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;import &lt;SPAN&gt;json&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;import &lt;SPAN&gt;os&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;# Define your target Databricks workspace URL and personal access token&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;TARGET_WORKSPACE_URL = &lt;SPAN&gt;"*******&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;TARGET_WORKSPACE_TOKEN = &lt;SPAN&gt;"*******"&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;# Set up headers for authentication&lt;/P&gt;&lt;P&gt;headers = {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;'Authorization': f&lt;SPAN&gt;'Bearer {&lt;SPAN&gt;TARGET_WORKSPACE_TOKEN}&lt;SPAN&gt;',&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;'Content-Type': &lt;SPAN&gt;'application/json'&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;def create_folder(folder_path):&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; url = f&lt;SPAN&gt;'{&lt;SPAN&gt;TARGET_WORKSPACE_URL}&lt;SPAN&gt;/api/2.0/workspace/mkdirs'&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; data = {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;"path": folder_path&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; response = &lt;SPAN&gt;requests.post(url, headers=headers, json=data)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; response.raise_for_status()&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;def import_dashboard(dashboard_data):&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; url = f&lt;SPAN&gt;'{&lt;SPAN&gt;TARGET_WORKSPACE_URL}&lt;SPAN&gt;/api/2.0/preview/sql/dashboards'&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; response = &lt;SPAN&gt;requests.post(url, headers=headers, json=dashboard_data)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; response.raise_for_status()&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; return response.json()&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;def set_acls(dashboard_id, acl_data):&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; url = f&lt;SPAN&gt;'{&lt;SPAN&gt;TARGET_WORKSPACE_URL}&lt;SPAN&gt;/api/2.0/preview/sql/permissions/dashboards/{dashboard_id}&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; print(f&lt;SPAN&gt;"Sending request to: {url}&lt;SPAN&gt;")&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; print(f&lt;SPAN&gt;"Request data: {&lt;SPAN&gt;json.dumps(acl_data, indent=&lt;SPAN&gt;2)}&lt;SPAN&gt;")&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; response = &lt;SPAN&gt;requests.post(url, headers=headers, json=acl_data) &amp;nbsp;# Use POST method&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; print(f&lt;SPAN&gt;"Response status code: {response.status_code}&lt;SPAN&gt;")&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; print(f&lt;SPAN&gt;"Response content: {response.text}&lt;SPAN&gt;")&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; response.raise_for_status()&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;def import_dashboards():&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; with open(&lt;SPAN&gt;'exported_dashboards_with_acls.json', &lt;SPAN&gt;'r') as f:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dashboards = &lt;SPAN&gt;json.load(f)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; # Define the folder path in the target workspace&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; legacy_folder_path = &lt;SPAN&gt;'/Shared/Legacy dashboards'&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; create_folder(legacy_folder_path)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; for dashboard in dashboards:&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Prepare dashboard data for import&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dashboard_data = {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;"name": dashboard.get(&lt;SPAN&gt;'name', &lt;SPAN&gt;''),&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;"widgets": dashboard.get(&lt;SPAN&gt;'widgets', []),&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;"visualizations": dashboard.get(&lt;SPAN&gt;'visualizations', []),&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;"description": dashboard.get(&lt;SPAN&gt;'description', &lt;SPAN&gt;''),&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;"options": dashboard.get(&lt;SPAN&gt;'options', {}),&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Import dashboard&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; imported_dashboard = import_dashboard(dashboard_data)&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dashboard_id = imported_dashboard[&lt;SPAN&gt;'id']&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Set ACLs for the imported dashboard&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if &lt;SPAN&gt;'acl' in dashboard:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; acl_data = {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;"access_control_list": dashboard[&lt;SPAN&gt;'acl'][&lt;SPAN&gt;'access_control_list']&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; set_acls(dashboard_id, acl_data)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(f&lt;SPAN&gt;"Imported dashboard: {dashboard[&lt;SPAN&gt;'name']}&lt;SPAN&gt; with ID: {dashboard_id}&lt;SPAN&gt;")&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;if __name__ == &lt;SPAN&gt;'__main__':&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; import_dashboards()&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; print(&lt;SPAN&gt;'Dashboards imported successfully.')&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
    <pubDate>Fri, 26 Jul 2024 08:52:11 GMT</pubDate>
    <dc:creator>unity_Catalog</dc:creator>
    <dc:date>2024-07-26T08:52:11Z</dc:date>
    <item>
      <title>Migrating dashboards from one workspace to another workspace</title>
      <link>https://community.databricks.com/t5/get-started-discussions/migrating-dashboards-from-one-workspace-to-another-workspace/m-p/80166#M7942</link>
      <description>&lt;P&gt;I'm exporting dashboard objects from an existing workspace to new workspace but after importing ,the underlying dashboards data is not coming to new workspace. I'm using the below code. Can anyone help&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;import os&lt;BR /&gt;import requests&lt;BR /&gt;import json&lt;BR /&gt;import logging&lt;/P&gt;&lt;P&gt;# Set up logging&lt;BR /&gt;log_file = 'import_dashboards_log.log'&lt;BR /&gt;logging.basicConfig(filename=log_file, level=logging.INFO,&lt;BR /&gt;format='%(asctime)s - %(levelname)s - %(message)s')&lt;/P&gt;&lt;P&gt;# Target Databricks workspace URL and token (hardcoded)&lt;BR /&gt;target_workspace_url = 'https://.azuredatabricks.net'&lt;BR /&gt;target_workspace_token = 'dapib2e-3'&lt;/P&gt;&lt;P&gt;def create_folder(workspace_url, token, folder_path):&lt;BR /&gt;"""Create a folder in the Databricks workspace if it doesn't exist."""&lt;BR /&gt;url = f'{workspace_url}/api/2.0/workspace/mkdirs'&lt;BR /&gt;headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}&lt;BR /&gt;payload = {"path": folder_path}&lt;BR /&gt;response = requests.post(url, headers=headers, data=json.dumps(payload))&lt;BR /&gt;if response.status_code == 200 or response.status_code == 400: # 400 means folder already exists&lt;BR /&gt;logging.info(f"Folder created or already exists: {folder_path}")&lt;BR /&gt;print(f"Folder created or already exists: {folder_path}")&lt;BR /&gt;else:&lt;BR /&gt;logging.error(f"Failed to create folder {folder_path}. Error: {response.content}")&lt;BR /&gt;print(f"Failed to create folder {folder_path}. Error: {response.content}")&lt;/P&gt;&lt;P&gt;def import_dashboard(workspace_url, token, file_path, folder_path):&lt;BR /&gt;"""Import a dashboard JSON file into the new workspace."""&lt;BR /&gt;with open(file_path, 'r') as f:&lt;BR /&gt;dashboard_data = json.load(f)&lt;BR /&gt;&lt;BR /&gt;# Prepare the import payload based on the provided JSON sample&lt;BR /&gt;import_dashboards = {&lt;BR /&gt;"name": dashboard_data.get('name'),&lt;BR /&gt;"parent": folder_path,&lt;BR /&gt;"tags": dashboard_data.get('tags', []),&lt;BR /&gt;"options": dashboard_data.get('options'),&lt;BR /&gt;"widgets": dashboard_data.get('widgets'),&lt;BR /&gt;"user": dashboard_data.get('user')&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;url = f'{workspace_url}/api/2.0/preview/sql/dashboards'&lt;BR /&gt;headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}&lt;BR /&gt;response = requests.post(url, headers=headers, data=json.dumps(import_dashboards))&lt;BR /&gt;if response.status_code == 200:&lt;BR /&gt;logging.info(f"Imported dashboard: {file_path}")&lt;BR /&gt;print(f"Imported dashboard: {file_path}")&lt;BR /&gt;else:&lt;BR /&gt;logging.error(f"Failed to import dashboard {file_path}. Error: {response.content}")&lt;BR /&gt;print(f"Failed to import dashboard {file_path}. Error: {response.content}")&lt;/P&gt;&lt;P&gt;def main():&lt;BR /&gt;"""Main function to import dashboards into the new workspace."""&lt;BR /&gt;exported_dir = 'exported_dashboards' # Directory where exported dashboards are saved&lt;BR /&gt;folder_path = "/Workspace/folders/new_dashboard_folder" # Path to the folder in the new workspace&lt;BR /&gt;&lt;BR /&gt;print("\033[33mImporting dashboards...\033[0m") # Yellow color&lt;BR /&gt;logging.info("Starting to import dashboards.")&lt;BR /&gt;&lt;BR /&gt;# Create folder in the workspace&lt;BR /&gt;create_folder(target_workspace_url, target_workspace_token, folder_path)&lt;BR /&gt;&lt;BR /&gt;for filename in os.listdir(exported_dir):&lt;BR /&gt;if filename.endswith('.json'):&lt;BR /&gt;file_path = os.path.join(exported_dir, filename)&lt;BR /&gt;try:&lt;BR /&gt;import_dashboard(target_workspace_url, target_workspace_token, file_path, folder_path)&lt;BR /&gt;except Exception as e:&lt;BR /&gt;logging.error(f"An error occurred while importing {file_path}: {e}")&lt;BR /&gt;print(f"An error occurred while importing {file_path}: {e}")&lt;/P&gt;&lt;P&gt;print("\033[32mDashboards import process completed\033[0m") # Green color&lt;BR /&gt;logging.info("Dashboards import process completed.")&lt;/P&gt;&lt;P&gt;if __name__ == "__main__":&lt;BR /&gt;main()&lt;/P&gt;</description>
      <pubDate>Tue, 23 Jul 2024 15:31:45 GMT</pubDate>
      <guid>https://community.databricks.com/t5/get-started-discussions/migrating-dashboards-from-one-workspace-to-another-workspace/m-p/80166#M7942</guid>
      <dc:creator>unity_Catalog</dc:creator>
      <dc:date>2024-07-23T15:31:45Z</dc:date>
    </item>
    <item>
      <title>Re: Migrating dashboards from one workspace to another workspace</title>
      <link>https://community.databricks.com/t5/get-started-discussions/migrating-dashboards-from-one-workspace-to-another-workspace/m-p/80305#M7943</link>
      <description>&lt;P&gt;Hi, you can use the workspace API to import the dashboard:&amp;nbsp;&lt;A href="https://learn.microsoft.com/en-us/azure/databricks/dashboards/tutorials/workspace-lakeview-api#step-3-import-a-dashboard" target="_blank"&gt;https://learn.microsoft.com/en-us/azure/databricks/dashboards/tutorials/workspace-lakeview-api#step-3-import-a-dashboard&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;A code example is available on this thread:&amp;nbsp;&lt;A href="https://community.databricks.com/t5/data-engineering/how-to-import-a-lakeview-dashboard-programmatically-api-or-cli/td-p/60446" target="_blank"&gt;https://community.databricks.com/t5/data-engineering/how-to-import-a-lakeview-dashboard-programmatically-api-or-cli/td-p/60446&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Hope this helps&lt;/P&gt;</description>
      <pubDate>Wed, 24 Jul 2024 10:08:40 GMT</pubDate>
      <guid>https://community.databricks.com/t5/get-started-discussions/migrating-dashboards-from-one-workspace-to-another-workspace/m-p/80305#M7943</guid>
      <dc:creator>romy</dc:creator>
      <dc:date>2024-07-24T10:08:40Z</dc:date>
    </item>
    <item>
      <title>Re: Migrating dashboards from one workspace to another workspace</title>
      <link>https://community.databricks.com/t5/get-started-discussions/migrating-dashboards-from-one-workspace-to-another-workspace/m-p/80683#M7945</link>
      <description>&lt;P&gt;Hi romy,&lt;BR /&gt;&amp;nbsp; Thanks for your quick reply. I have migrated dashboards to targeted workspace. But what about legacy dashboards can we export those too. When I am trying to migrate them only names of legacy dashboards are migrated but not the queries and datasets. I am adding the code below&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;import &lt;SPAN&gt;requests&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;import &lt;SPAN&gt;json&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;import &lt;SPAN&gt;os&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;# Define your target Databricks workspace URL and personal access token&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;TARGET_WORKSPACE_URL = &lt;SPAN&gt;"*******&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;TARGET_WORKSPACE_TOKEN = &lt;SPAN&gt;"*******"&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;# Set up headers for authentication&lt;/P&gt;&lt;P&gt;headers = {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;'Authorization': f&lt;SPAN&gt;'Bearer {&lt;SPAN&gt;TARGET_WORKSPACE_TOKEN}&lt;SPAN&gt;',&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;'Content-Type': &lt;SPAN&gt;'application/json'&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;def create_folder(folder_path):&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; url = f&lt;SPAN&gt;'{&lt;SPAN&gt;TARGET_WORKSPACE_URL}&lt;SPAN&gt;/api/2.0/workspace/mkdirs'&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; data = {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;"path": folder_path&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; response = &lt;SPAN&gt;requests.post(url, headers=headers, json=data)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; response.raise_for_status()&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;def import_dashboard(dashboard_data):&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; url = f&lt;SPAN&gt;'{&lt;SPAN&gt;TARGET_WORKSPACE_URL}&lt;SPAN&gt;/api/2.0/preview/sql/dashboards'&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; response = &lt;SPAN&gt;requests.post(url, headers=headers, json=dashboard_data)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; response.raise_for_status()&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; return response.json()&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;def set_acls(dashboard_id, acl_data):&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; url = f&lt;SPAN&gt;'{&lt;SPAN&gt;TARGET_WORKSPACE_URL}&lt;SPAN&gt;/api/2.0/preview/sql/permissions/dashboards/{dashboard_id}&lt;SPAN&gt;'&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; print(f&lt;SPAN&gt;"Sending request to: {url}&lt;SPAN&gt;")&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; print(f&lt;SPAN&gt;"Request data: {&lt;SPAN&gt;json.dumps(acl_data, indent=&lt;SPAN&gt;2)}&lt;SPAN&gt;")&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; response = &lt;SPAN&gt;requests.post(url, headers=headers, json=acl_data) &amp;nbsp;# Use POST method&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; print(f&lt;SPAN&gt;"Response status code: {response.status_code}&lt;SPAN&gt;")&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; print(f&lt;SPAN&gt;"Response content: {response.text}&lt;SPAN&gt;")&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; response.raise_for_status()&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;def import_dashboards():&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; with open(&lt;SPAN&gt;'exported_dashboards_with_acls.json', &lt;SPAN&gt;'r') as f:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dashboards = &lt;SPAN&gt;json.load(f)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; # Define the folder path in the target workspace&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; legacy_folder_path = &lt;SPAN&gt;'/Shared/Legacy dashboards'&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; create_folder(legacy_folder_path)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; for dashboard in dashboards:&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Prepare dashboard data for import&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dashboard_data = {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;"name": dashboard.get(&lt;SPAN&gt;'name', &lt;SPAN&gt;''),&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;"widgets": dashboard.get(&lt;SPAN&gt;'widgets', []),&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;"visualizations": dashboard.get(&lt;SPAN&gt;'visualizations', []),&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;"description": dashboard.get(&lt;SPAN&gt;'description', &lt;SPAN&gt;''),&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;"options": dashboard.get(&lt;SPAN&gt;'options', {}),&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Import dashboard&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; imported_dashboard = import_dashboard(dashboard_data)&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dashboard_id = imported_dashboard[&lt;SPAN&gt;'id']&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Set ACLs for the imported dashboard&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if &lt;SPAN&gt;'acl' in dashboard:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; acl_data = {&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;SPAN&gt;"access_control_list": dashboard[&lt;SPAN&gt;'acl'][&lt;SPAN&gt;'access_control_list']&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; set_acls(dashboard_id, acl_data)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print(f&lt;SPAN&gt;"Imported dashboard: {dashboard[&lt;SPAN&gt;'name']}&lt;SPAN&gt; with ID: {dashboard_id}&lt;SPAN&gt;")&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;if __name__ == &lt;SPAN&gt;'__main__':&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; import_dashboards()&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; print(&lt;SPAN&gt;'Dashboards imported successfully.')&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 26 Jul 2024 08:52:11 GMT</pubDate>
      <guid>https://community.databricks.com/t5/get-started-discussions/migrating-dashboards-from-one-workspace-to-another-workspace/m-p/80683#M7945</guid>
      <dc:creator>unity_Catalog</dc:creator>
      <dc:date>2024-07-26T08:52:11Z</dc:date>
    </item>
  </channel>
</rss>

