Skip to content

Commit 12e2edf

Browse files
NethracsJing LiNethra Sashikar
authored andcommitted
Add firewallsku as ManagedNetwork property (Azure#37885)
* Generated REST client for upcoming API version `v2024-10-01-preview`. - Created Swagger folder `2024-10-01-preview` by copying from the same one in GitHub project `azure-rest-api-specs` - https://github.com/Azure/azure-rest-api-specs/tree/release-machinelearningservices-Microsoft.MachineLearningServices-2024-10-01-preview/specification/machinelearningservices/resource-manager/Microsoft.MachineLearningServices/preview/2024-10-01-preview - Up to Azure/azure-rest-api-specs#30776 - Safe to merge in for not bumping up callers' API versions with it - Cannot bump up before registering it for RPs in selected regions - Added tag `v2024-10-01-preview` to `readme.md` - Generated REST client for `v2024-10-01-preview` * Initial commit * Initial commit * add new test for firewallsku * add new test for firewallsku * remove irrelevant changes * add addressprefix changes * address review comments * address review comments * reset the file in rest client * address review comments --------- Co-authored-by: Jing Li <[email protected]> Co-authored-by: Nethra Sashikar <[email protected]>
1 parent fa46664 commit 12e2edf

23 files changed

+204
-95
lines changed

sdk/ml/azure-ai-ml/.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ repos:
4141
"https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/",
4242
],
4343
),
44-
("pylint", "3.0.3", []),
44+
("pylint", "3.2.7", []),
4545
]
4646
4747
# Make sure that correct versions are installed

sdk/ml/azure-ai-ml/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
## 1.22.0 (unreleased)
44

55
### Features Added
6+
- Added support to select firewall sku to used for provisioning azure firewall when FQDN rules are added in
7+
AllowOnlyApprovedOutbound mode. FirewallSku options are `Standard` or `Basic`, defaults to `Standard`
68
- Update TLS version from 1.0 to 1.2
79
- Added support for Distillation jobs. Can be created by importing `disillation` from `azure.ai.ml.distillation`
810
### Bugs Fixed

sdk/ml/azure-ai-ml/azure/ai/ml/_ml_client.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
from azure.ai.ml._restclient.v2024_01_01_preview import AzureMachineLearningWorkspaces as ServiceClient012024Preview
4040
from azure.ai.ml._restclient.v2024_04_01_preview import AzureMachineLearningWorkspaces as ServiceClient042024Preview
4141
from azure.ai.ml._restclient.v2024_07_01_preview import AzureMachineLearningWorkspaces as ServiceClient072024Preview
42+
from azure.ai.ml._restclient.v2024_10_01_preview import AzureMachineLearningWorkspaces as ServiceClient102024Preview
4243
from azure.ai.ml._restclient.workspace_dataplane import (
4344
AzureMachineLearningWorkspaces as ServiceClientWorkspaceDataplane,
4445
)
@@ -381,6 +382,17 @@ def __init__(
381382
**kwargs,
382383
)
383384

385+
self._service_client_10_2024_preview = ServiceClient102024Preview(
386+
credential=self._credential,
387+
subscription_id=(
388+
self._ws_operation_scope._subscription_id
389+
if registry_reference
390+
else self._operation_scope._subscription_id
391+
),
392+
base_url=base_url,
393+
**kwargs,
394+
)
395+
384396
# A general purpose, user-configurable pipeline for making
385397
# http requests
386398
self._requests_pipeline = HttpPipeline(**kwargs)
@@ -478,7 +490,7 @@ def __init__(
478490

479491
self._workspaces = WorkspaceOperations(
480492
self._ws_operation_scope if registry_reference else self._operation_scope,
481-
self._service_client_07_2024_preview,
493+
self._service_client_10_2024_preview,
482494
self._operation_container,
483495
self._credential,
484496
requests_pipeline=self._requests_pipeline,
@@ -489,7 +501,7 @@ def __init__(
489501

490502
self._workspace_outbound_rules = WorkspaceOutboundRuleOperations(
491503
self._operation_scope,
492-
self._service_client_07_2024_preview,
504+
self._service_client_10_2024_preview,
493505
self._operation_container,
494506
self._credential,
495507
**kwargs,
@@ -706,7 +718,7 @@ def __init__(
706718

707719
self._featurestores = FeatureStoreOperations(
708720
self._operation_scope,
709-
self._service_client_07_2024_preview,
721+
self._service_client_10_2024_preview,
710722
self._operation_container,
711723
self._credential,
712724
**app_insights_handler_kwargs, # type: ignore[arg-type]

sdk/ml/azure-ai-ml/azure/ai/ml/_schema/workspace/networking.py

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,19 @@
44

55
# pylint: disable=unused-argument,no-else-return
66

7-
from marshmallow import fields, EXCLUDE
7+
from marshmallow import EXCLUDE, fields
88
from marshmallow.decorators import post_load, pre_dump
9+
10+
from azure.ai.ml._schema.core.fields import NestedField, StringTransformedEnum, UnionField
911
from azure.ai.ml._schema.core.schema_meta import PatchedSchemaMeta
10-
from azure.ai.ml._schema.core.fields import StringTransformedEnum, NestedField, UnionField
12+
from azure.ai.ml._utils.utils import _snake_to_camel, camel_to_snake
13+
from azure.ai.ml.constants._workspace import FirewallSku, IsolationMode, OutboundRuleCategory
1114
from azure.ai.ml.entities._workspace.networking import (
12-
ManagedNetwork,
1315
FqdnDestination,
14-
ServiceTagDestination,
16+
ManagedNetwork,
1517
PrivateEndpointDestination,
18+
ServiceTagDestination,
1619
)
17-
from azure.ai.ml.constants._workspace import IsolationMode, OutboundRuleCategory
18-
from azure.ai.ml._utils.utils import camel_to_snake, _snake_to_camel
1920

2021

2122
class ManagedNetworkStatusSchema(metaclass=PatchedSchemaMeta):
@@ -184,13 +185,31 @@ class ManagedNetworkSchema(metaclass=PatchedSchemaMeta):
184185
),
185186
allow_none=True,
186187
)
188+
firewall_sku = StringTransformedEnum(
189+
allowed_values=[
190+
FirewallSku.STANDARD,
191+
FirewallSku.BASIC,
192+
],
193+
casing_transform=camel_to_snake,
194+
metadata={"description": "Firewall sku for FQDN rules in AllowOnlyApprovedOutbound mode"},
195+
)
187196
network_id = fields.Str(required=False, dump_only=True)
188197
status = NestedField(ManagedNetworkStatusSchema, allow_none=False, unknown=EXCLUDE)
189198

190199
@post_load
191200
def make(self, data, **kwargs):
192201
outbound_rules = data.get("outbound_rules", False)
202+
203+
firewall_sku = data.get("firewall_sku", False)
204+
firewall_sku_value = _snake_to_camel(data["firewall_sku"]) if firewall_sku else FirewallSku.STANDARD
205+
193206
if outbound_rules:
194-
return ManagedNetwork(isolation_mode=_snake_to_camel(data["isolation_mode"]), outbound_rules=outbound_rules)
207+
return ManagedNetwork(
208+
isolation_mode=_snake_to_camel(data["isolation_mode"]),
209+
outbound_rules=outbound_rules,
210+
firewall_sku=firewall_sku_value,
211+
)
195212
else:
196-
return ManagedNetwork(isolation_mode=_snake_to_camel(data["isolation_mode"]))
213+
return ManagedNetwork(
214+
isolation_mode=_snake_to_camel(data["isolation_mode"]), firewall_sku=firewall_sku_value
215+
)

sdk/ml/azure-ai-ml/azure/ai/ml/constants/_workspace.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ class IsolationMode:
2323
ALLOW_ONLY_APPROVED_OUTBOUND = "AllowOnlyApprovedOutbound"
2424

2525

26+
class FirewallSku:
27+
"""Firewall Sku for FQDN rules in AllowOnlyApprovedOutbound."""
28+
29+
STANDARD = "Standard"
30+
BASIC = "Basic"
31+
32+
2633
class OutboundRuleCategory:
2734
"""Category for a managed network outbound rule."""
2835

sdk/ml/azure-ai-ml/azure/ai/ml/entities/_feature_store/feature_store.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,17 @@
99
from pathlib import Path
1010
from typing import Any, Dict, Optional, Union
1111

12-
from azure.ai.ml._restclient.v2024_07_01_preview.models import Workspace as RestWorkspace
12+
from azure.ai.ml._restclient.v2024_10_01_preview.models import Workspace as RestWorkspace
1313
from azure.ai.ml._schema._feature_store.feature_store_schema import FeatureStoreSchema
14-
from azure.ai.ml.constants._common import BASE_PATH_CONTEXT_KEY, PARAMS_OVERRIDE_KEY
14+
from azure.ai.ml.constants._common import BASE_PATH_CONTEXT_KEY, PARAMS_OVERRIDE_KEY, WorkspaceKind
1515
from azure.ai.ml.entities._credentials import IdentityConfiguration, ManagedIdentityConfiguration
1616
from azure.ai.ml.entities._util import load_from_dict
1717
from azure.ai.ml.entities._workspace.compute_runtime import ComputeRuntime
1818
from azure.ai.ml.entities._workspace.customer_managed_key import CustomerManagedKey
1919
from azure.ai.ml.entities._workspace.feature_store_settings import FeatureStoreSettings
2020
from azure.ai.ml.entities._workspace.networking import ManagedNetwork
2121
from azure.ai.ml.entities._workspace.workspace import Workspace
22-
from azure.ai.ml.constants._common import WorkspaceKind
22+
2323
from ._constants import DEFAULT_SPARK_RUNTIME_VERSION
2424
from .materialization_store import MaterializationStore
2525

sdk/ml/azure-ai-ml/azure/ai/ml/entities/_workspace/_ai_workspaces/hub.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,8 @@
55
# pylint: disable=too-many-instance-attributes,protected-access
66
from typing import Any, Dict, List, Optional
77

8-
from azure.ai.ml._restclient.v2024_07_01_preview.models import (
9-
Workspace as RestWorkspace,
10-
WorkspaceHubConfig as RestWorkspaceHubConfig,
11-
)
8+
from azure.ai.ml._restclient.v2024_10_01_preview.models import Workspace as RestWorkspace
9+
from azure.ai.ml._restclient.v2024_10_01_preview.models import WorkspaceHubConfig as RestWorkspaceHubConfig
1210
from azure.ai.ml._schema.workspace import HubSchema
1311
from azure.ai.ml._utils._experimental import experimental
1412
from azure.ai.ml.constants._common import WorkspaceKind

sdk/ml/azure-ai-ml/azure/ai/ml/entities/_workspace/diagnose.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@
33
# ---------------------------------------------------------
44

55
import json
6-
from typing import Any, Dict, Optional, List
6+
from typing import Any, Dict, List, Optional
77

8-
from azure.ai.ml._restclient.v2024_07_01_preview.models import (
8+
from azure.ai.ml._restclient.v2024_10_01_preview.models import (
99
DiagnoseRequestProperties as RestDiagnoseRequestProperties,
10-
DiagnoseResponseResult as RestDiagnoseResponseResult,
10+
)
11+
from azure.ai.ml._restclient.v2024_10_01_preview.models import DiagnoseResponseResult as RestDiagnoseResponseResult
12+
from azure.ai.ml._restclient.v2024_10_01_preview.models import (
1113
DiagnoseResponseResultValue as RestDiagnoseResponseResultValue,
12-
DiagnoseResult as RestDiagnoseResult,
14+
)
15+
from azure.ai.ml._restclient.v2024_10_01_preview.models import DiagnoseResult as RestDiagnoseResult
16+
from azure.ai.ml._restclient.v2024_10_01_preview.models import (
1317
DiagnoseWorkspaceParameters as RestDiagnoseWorkspaceParameters,
1418
)
1519

sdk/ml/azure-ai-ml/azure/ai/ml/entities/_workspace/feature_store_settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from typing import Optional
88

9-
from azure.ai.ml._restclient.v2024_07_01_preview.models import FeatureStoreSettings as RestFeatureStoreSettings
9+
from azure.ai.ml._restclient.v2024_10_01_preview.models import FeatureStoreSettings as RestFeatureStoreSettings
1010
from azure.ai.ml.entities._mixins import RestTranslatableMixin
1111

1212
from .compute_runtime import ComputeRuntime

sdk/ml/azure-ai-ml/azure/ai/ml/entities/_workspace/networking.py

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,21 @@
55
from abc import ABC
66
from typing import Any, Dict, List, Optional
77

8-
from azure.ai.ml._restclient.v2024_07_01_preview.models import (
9-
FqdnOutboundRule as RestFqdnOutboundRule,
8+
from azure.ai.ml._restclient.v2024_10_01_preview.models import FqdnOutboundRule as RestFqdnOutboundRule
9+
from azure.ai.ml._restclient.v2024_10_01_preview.models import (
1010
ManagedNetworkProvisionStatus as RestManagedNetworkProvisionStatus,
11-
ManagedNetworkSettings as RestManagedNetwork,
11+
)
12+
from azure.ai.ml._restclient.v2024_10_01_preview.models import ManagedNetworkSettings as RestManagedNetwork
13+
from azure.ai.ml._restclient.v2024_10_01_preview.models import (
1214
PrivateEndpointDestination as RestPrivateEndpointOutboundRuleDestination,
15+
)
16+
from azure.ai.ml._restclient.v2024_10_01_preview.models import (
1317
PrivateEndpointOutboundRule as RestPrivateEndpointOutboundRule,
18+
)
19+
from azure.ai.ml._restclient.v2024_10_01_preview.models import (
1420
ServiceTagDestination as RestServiceTagOutboundRuleDestination,
15-
ServiceTagOutboundRule as RestServiceTagOutboundRule,
1621
)
22+
from azure.ai.ml._restclient.v2024_10_01_preview.models import ServiceTagOutboundRule as RestServiceTagOutboundRule
1723
from azure.ai.ml.constants._workspace import IsolationMode, OutboundRuleCategory, OutboundRuleType
1824

1925

@@ -253,6 +259,8 @@ class ManagedNetwork:
253259
254260
:param isolation_mode: Isolation of the managed network, defaults to Disabled.
255261
:type isolation_mode: str
262+
:param firewall_sku: Firewall Sku for FQDN rules in AllowOnlyApprovedOutbound..
263+
:type firewall_sku: str
256264
:param outbound_rules: List of outbound rules for the managed network.
257265
:type outbound_rules: List[~azure.ai.ml.entities.OutboundRule]
258266
:param network_id: Network id for the managed network, not meant to be set by user.
@@ -271,10 +279,12 @@ def __init__(
271279
*,
272280
isolation_mode: str = IsolationMode.DISABLED,
273281
outbound_rules: Optional[List[OutboundRule]] = None,
282+
firewall_sku: Optional[str] = None,
274283
network_id: Optional[str] = None,
275284
**kwargs: Any,
276285
) -> None:
277286
self.isolation_mode = isolation_mode
287+
self.firewall_sku = firewall_sku
278288
self.network_id = network_id
279289
self.outbound_rules = outbound_rules
280290
self.status = kwargs.pop("status", None)
@@ -289,7 +299,9 @@ def _to_rest_object(self) -> RestManagedNetwork:
289299
if self.outbound_rules
290300
else {}
291301
)
292-
return RestManagedNetwork(isolation_mode=self.isolation_mode, outbound_rules=rest_outbound_rules)
302+
return RestManagedNetwork(
303+
isolation_mode=self.isolation_mode, outbound_rules=rest_outbound_rules, firewall_sku=self.firewall_sku
304+
)
293305

294306
@classmethod
295307
def _from_rest_object(cls, obj: RestManagedNetwork) -> "ManagedNetwork":
@@ -306,6 +318,7 @@ def _from_rest_object(cls, obj: RestManagedNetwork) -> "ManagedNetwork":
306318
outbound_rules=from_rest_outbound_rules, # type: ignore[arg-type]
307319
network_id=obj.network_id,
308320
status=obj.status,
321+
firewall_sku=obj.firewall_sku,
309322
)
310323

311324

0 commit comments

Comments
 (0)