@@ -43,13 +43,16 @@ class OnboardCommand:
4343 version : str
4444 cloud : str
4545 dlt_meta_schema : str
46+ bronze_schema : str = None
47+ silver_schema : str = None
4648 uc_enabled : bool = False
4749 uc_catalog_name : str = None
4850 overwrite : bool = True
4951 bronze_dataflowspec_table : str = "bronze_dataflowspec"
5052 silver_dataflowspec_table : str = "silver_dataflowspec"
5153 bronze_dataflowspec_path : str = None
5254 silver_dataflowspec_path : str = None
55+ update_paths : bool = True
5356
5457 def __post_init__ (self ):
5558 if not self .onboarding_file_path or self .onboarding_file_path == "" :
@@ -147,6 +150,7 @@ def _my_username(self):
147150
148151 def onboard (self , cmd : OnboardCommand ):
149152 """Perform the onboarding process."""
153+ self .update_ws_onboarding_paths (cmd )
150154 if not self ._ws .dbfs .exists (cmd .dbfs_path + "/dltmeta_conf/" ):
151155 self ._ws .dbfs .create (path = cmd .dbfs_path + "/dltmeta_conf/" , overwrite = True )
152156 ob_file = open (cmd .onboarding_file_path , "rb" )
@@ -302,9 +306,9 @@ def deploy(self, cmd: DeployCommand):
302306 def _load_onboard_config (self ) -> OnboardCommand :
303307 onboard_cmd_dict = {}
304308 onboard_cmd_dict ["onboarding_file_path" ] = self ._wsi ._question (
305- "Provide onboarding file path" , default = 'cli_demo /conf/onboarding.json ' )
309+ "Provide onboarding file path" , default = 'demo /conf/onboarding.template ' )
306310 onboarding_files_dir_path = self ._wsi ._question (
307- "Provide onboarding files local directory" , default = 'cli_demo/conf ' )
311+ "Provide onboarding files local directory" , default = 'demo/ ' )
308312 onboard_cmd_dict ["onboarding_files_dir_path" ] = f"file:./{ onboarding_files_dir_path } "
309313 onboard_cmd_dict ["dbfs_path" ] = self ._wsi ._question (
310314 "Provide dbfs path" , default = "dbfs:/dlt-meta_cli_demo" )
@@ -318,6 +322,10 @@ def _load_onboard_config(self) -> OnboardCommand:
318322 "Provide unity catalog name" )
319323 onboard_cmd_dict ["dlt_meta_schema" ] = self ._wsi ._question (
320324 "Provide dlt meta schema name" , default = f'dlt_meta_dataflowspecs_{ uuid .uuid4 ().hex } ' )
325+ onboard_cmd_dict ["bronze_schema" ] = self ._wsi ._question (
326+ "Provide dlt meta bronze layer schema name" , default = f'dltmeta_bronze_{ uuid .uuid4 ().hex } ' )
327+ onboard_cmd_dict ["silver_schema" ] = self ._wsi ._question (
328+ "Provide dlt meta silver layer schema name" , default = f'dltmeta_silver_{ uuid .uuid4 ().hex } ' )
321329 onboard_cmd_dict ["onboard_layer" ] = self ._wsi ._choice (
322330 "Provide dlt meta layer" , ['bronze' , 'silver' , 'bronze_silver' ])
323331 if onboard_cmd_dict ["onboard_layer" ] == "bronze" :
@@ -352,7 +360,11 @@ def _load_onboard_config(self) -> OnboardCommand:
352360 "Provide import author name" , default = self ._wsi ._short_name )
353361 onboard_cmd_dict ["cloud" ] = self ._wsi ._choice (
354362 "Provide cloud provider name" , ['aws' , 'azure' , 'gcp' ])
363+ onboard_cmd_dict ["update_paths" ] = self ._wsi ._choice (
364+ "Update workspace/dbfs paths, unity catalog name, bronze/silver schema names in onboarding file?" ,
365+ ['True' , 'False' ])
355366 cmd = OnboardCommand (** onboard_cmd_dict )
367+
356368 return cmd
357369
358370 def _load_deploy_config (self ) -> DeployCommand :
@@ -400,6 +412,48 @@ def _load_deploy_config(self) -> DeployCommand:
400412 "Provide dlt target schema name" )
401413 return DeployCommand (** deploy_cmd_dict )
402414
415+ def update_ws_onboarding_paths (self , cmd : OnboardCommand ):
416+ """Create onboarding file for cloudfiles as source."""
417+ with open (f"{ cmd .onboarding_file_path } " ) as f :
418+ onboard_obj = json .load (f )
419+
420+ for data_flow in onboard_obj :
421+ for key , value in data_flow .items ():
422+ if key == "source_details" :
423+ for source_key , source_value in value .items ():
424+ if 'dbfs_path' in source_value :
425+ data_flow [key ][source_key ] = source_value .format (dbfs_path = f"{ cmd .dbfs_path } /dltmeta_conf/" )
426+ if 'dbfs_path' in value :
427+ data_flow [key ] = value .format (dbfs_path = f"{ cmd .dbfs_path } /dltmeta_conf/" )
428+ elif 'uc_catalog_name' in value and 'bronze_schema' in value :
429+ if cmd .uc_catalog_name :
430+ data_flow [key ] = value .format (
431+ uc_catalog_name = cmd .uc_catalog_name ,
432+ bronze_schema = cmd .bronze_schema
433+ )
434+ else :
435+ data_flow [key ] = value .format (
436+ uc_catalog_name = cmd .bronze_schema ,
437+ bronze_schema = ""
438+ ).replace ("." , "" )
439+
440+ elif 'uc_catalog_name' in value and 'silver_schema' in value :
441+ if cmd .uc_catalog_name :
442+ data_flow [key ] = value .format (
443+ uc_catalog_name = cmd .uc_catalog_name ,
444+ silver_schema = cmd .silver_schema
445+ )
446+ else :
447+ data_flow [key ] = value .format (
448+ uc_catalog_name = cmd .silver_schema ,
449+ silver_schema = ""
450+ ).replace ("." , "" )
451+ onboarding_filename = os .path .basename (cmd .onboarding_file_path )
452+ updated_ob_file_path = cmd .onboarding_file_path .replace (onboarding_filename , "onboarding.json" )
453+ with open (updated_ob_file_path , "w" ) as onboarding_file :
454+ json .dump (onboard_obj , onboarding_file )
455+ cmd .onboarding_file_path = updated_ob_file_path
456+
403457
404458def onboard (dltmeta : DLTMeta ):
405459 logger .info ("Please answer a couple of questions to for launching DLT META onboarding job" )
0 commit comments