23
23
from azure .ai .ml ._utils ._package_utils import package_deployment
24
24
from azure .ai .ml ._utils .utils import _get_mfe_base_url_from_discovery_service , modified_operation_client
25
25
from azure .ai .ml .constants ._common import ARM_ID_PREFIX , AzureMLResourceType , LROConfigurations
26
- from azure .ai .ml .entities import BatchDeployment , BatchJob , ModelBatchDeployment , PipelineComponent
26
+ from azure .ai .ml .entities import BatchDeployment , BatchJob , ModelBatchDeployment , PipelineComponent , PipelineJob
27
27
from azure .ai .ml .entities ._deployment .deployment import Deployment
28
28
from azure .ai .ml .entities ._deployment .pipeline_component_batch_deployment import PipelineComponentBatchDeployment
29
29
from azure .core .credentials import TokenCredential
30
30
from azure .core .paging import ItemPaged
31
31
from azure .core .polling import LROPoller
32
32
from azure .core .tracing .decorator import distributed_trace
33
+ from azure .core .exceptions import ResourceNotFoundError , HttpResponseError
33
34
34
35
from ._operation_orchestrator import OperationOrchestrator
35
36
@@ -332,14 +333,25 @@ def _validate_component(self, deployment: Deployment, orchestrators: OperationOr
332
333
:type orchestrators: _operation_orchestrator.OperationOrchestrator
333
334
"""
334
335
if isinstance (deployment .component , PipelineComponent ):
335
- deployment .component = self ._all_operations .all_operations [AzureMLResourceType .COMPONENT ].create_or_update (
336
- name = deployment .component .name ,
337
- resource_group_name = self ._resource_group_name ,
338
- workspace_name = self ._workspace_name ,
339
- component = deployment .component ,
340
- version = deployment .component .version ,
341
- ** self ._init_kwargs ,
342
- )
336
+ try :
337
+ registered_component = self ._all_operations .all_operations [AzureMLResourceType .COMPONENT ].get (
338
+ name = deployment .component .name , version = deployment .component .version
339
+ )
340
+ deployment .component = registered_component .id
341
+ except Exception as err : # pylint: disable=broad-except
342
+ if isinstance (err , (ResourceNotFoundError , HttpResponseError )):
343
+ deployment .component = self ._all_operations .all_operations [
344
+ AzureMLResourceType .COMPONENT
345
+ ].create_or_update (
346
+ name = deployment .component .name ,
347
+ resource_group_name = self ._resource_group_name ,
348
+ workspace_name = self ._workspace_name ,
349
+ component = deployment .component ,
350
+ version = deployment .component .version ,
351
+ ** self ._init_kwargs ,
352
+ )
353
+ else :
354
+ raise err
343
355
elif isinstance (deployment .component , str ):
344
356
component_id = orchestrators .get_asset_arm_id (
345
357
deployment .component , azureml_type = AzureMLResourceType .COMPONENT
@@ -356,3 +368,22 @@ def _validate_component(self, deployment: Deployment, orchestrators: OperationOr
356
368
** self ._init_kwargs ,
357
369
)
358
370
deployment .component = job_component .id
371
+
372
+ elif isinstance (deployment .job_definition , PipelineJob ):
373
+ try :
374
+ registered_job = self ._all_operations .all_operations [AzureMLResourceType .JOB ].get (
375
+ name = deployment .job_definition .name
376
+ )
377
+ if registered_job :
378
+ job_component = PipelineComponent (source_job_id = registered_job .name )
379
+ job_component = self ._component_operations .create_or_update (
380
+ name = job_component .name ,
381
+ resource_group_name = self ._resource_group_name ,
382
+ workspace_name = self ._workspace_name ,
383
+ body = job_component ._to_rest_object (),
384
+ version = job_component .version ,
385
+ ** self ._init_kwargs ,
386
+ )
387
+ deployment .component = job_component .id
388
+ except ResourceNotFoundError as err :
389
+ raise err
0 commit comments