Skip to content

Commit 8ac7f57

Browse files
anrdesaiCopilot
andauthored
Azure Clean Room: CLI for 2026-04-30-preview (#9848)
* managedcleanroom: regen for 2026-04-30-preview + apply PATCH and Private.CleanRoom patches - Regenerate aaz/ subtree from openapi.json (2026-04-30-preview) - Add 'collaboration get-readonly-kube-config' command - PUT -> PATCH on collaboration/consortium/consortium-view update - Restore PrivateEndpointUtil + rewire URLs through env-var-driven namespace Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * managedcleanroom: bump to 1.0.0b6 and update HISTORY for 2026-04-30-preview Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * managedcleanroom: regen with example for get-readonly-kube-config; reapply patches Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 0a57769 commit 8ac7f57

33 files changed

Lines changed: 392 additions & 119 deletions

src/managedcleanroom/HISTORY.rst

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@
33
Release History
44
===============
55

6+
1.0.0b6
7+
+++++++
8+
* Update commands to reflect new API version 2026-04-30-preview
9+
* Added: ``az managedcleanroom collaboration get-readonly-kube-config`` to fetch the read-only kubeconfig for a collaboration
10+
* PUT -> PATCH on ``collaboration update``, ``consortium update``, ``consortium-view update``
11+
* Restored ``PrivateEndpointUtil`` and rewired generated URLs through env-var driven namespace (``Microsoft.CleanRoom`` / ``Private.CleanRoom``)
12+
613
1.0.0b1
714
+++++++
815
* Initial release.

src/managedcleanroom/azext_managedcleanroom/aaz/latest/managedcleanroom/collaboration/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
from ._create import *
1414
from ._delete import *
1515
from ._enable_workload import *
16+
from ._get_readonly_kube_config import *
1617
from ._list import *
1718
from ._pause import *
1819
from ._recover import *

src/managedcleanroom/azext_managedcleanroom/aaz/latest/managedcleanroom/collaboration/_add_collaborator.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,9 @@ class AddCollaborator(AAZCommand):
2626
"""
2727

2828
_aaz_info = {
29-
"version": "2026-03-31-preview",
29+
"version": "2026-04-30-preview",
3030
"resources": [
31-
["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.cleanroom/collaborations/{}/addcollaborator", "2026-03-31-preview"],
31+
["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.cleanroom/collaborations/{}/addcollaborator", "2026-04-30-preview"],
3232
]
3333
}
3434

@@ -163,7 +163,7 @@ def url_parameters(self):
163163
def query_parameters(self):
164164
parameters = {
165165
**self.serialize_query_param(
166-
"api-version", "2026-03-31-preview",
166+
"api-version", "2026-04-30-preview",
167167
required=True,
168168
),
169169
}
@@ -227,7 +227,7 @@ def _build_schema_on_200(cls):
227227
flags={"read_only": True},
228228
)
229229
_schema_on_200.properties = AAZObjectType(
230-
flags={"required": True, "client_flatten": True},
230+
flags={"client_flatten": True},
231231
)
232232
_schema_on_200.system_data = AAZObjectType(
233233
serialized_name="systemData",
@@ -263,6 +263,9 @@ def _build_schema_on_200(cls):
263263
serialized_name="provisioningState",
264264
flags={"read_only": True},
265265
)
266+
properties.resource_location = AAZStrType(
267+
serialized_name="resourceLocation",
268+
)
266269
properties.workloads = AAZListType(
267270
flags={"read_only": True},
268271
)

src/managedcleanroom/azext_managedcleanroom/aaz/latest/managedcleanroom/collaboration/_create.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ class Create(AAZCommand):
2323
"""
2424

2525
_aaz_info = {
26-
"version": "2026-03-31-preview",
26+
"version": "2026-04-30-preview",
2727
"resources": [
28-
["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.cleanroom/collaborations/{}", "2026-03-31-preview"],
28+
["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.cleanroom/collaborations/{}", "2026-04-30-preview"],
2929
]
3030
}
3131

@@ -66,6 +66,11 @@ def _build_arguments_schema(cls, *args, **kwargs):
6666
arg_group="Properties",
6767
help="Gets or sets the collaborators.",
6868
)
69+
_args_schema.resource_location = AAZStrArg(
70+
options=["--resource-location"],
71+
arg_group="Properties",
72+
help="Gets or sets the resource location for the collaboration.",
73+
)
6974

7075
collaborators = cls._args_schema.collaborators
7176
collaborators.Element = AAZObjectArg()
@@ -194,7 +199,7 @@ def url_parameters(self):
194199
def query_parameters(self):
195200
parameters = {
196201
**self.serialize_query_param(
197-
"api-version", "2026-03-31-preview",
202+
"api-version", "2026-04-30-preview",
198203
required=True,
199204
),
200205
}
@@ -221,12 +226,13 @@ def content(self):
221226
)
222227
_builder.set_prop("kind", AAZStrType, ".kind")
223228
_builder.set_prop("location", AAZStrType, ".location", typ_kwargs={"flags": {"required": True}})
224-
_builder.set_prop("properties", AAZObjectType, ".", typ_kwargs={"flags": {"required": True, "client_flatten": True}})
229+
_builder.set_prop("properties", AAZObjectType, typ_kwargs={"flags": {"client_flatten": True}})
225230
_builder.set_prop("tags", AAZDictType, ".tags")
226231

227232
properties = _builder.get(".properties")
228233
if properties is not None:
229234
properties.set_prop("collaborators", AAZListType, ".collaborators")
235+
properties.set_prop("resourceLocation", AAZStrType, ".resource_location")
230236

231237
collaborators = _builder.get(".properties.collaborators")
232238
if collaborators is not None:
@@ -273,7 +279,7 @@ def _build_schema_on_200_201(cls):
273279
flags={"read_only": True},
274280
)
275281
_schema_on_200_201.properties = AAZObjectType(
276-
flags={"required": True, "client_flatten": True},
282+
flags={"client_flatten": True},
277283
)
278284
_schema_on_200_201.system_data = AAZObjectType(
279285
serialized_name="systemData",
@@ -309,6 +315,9 @@ def _build_schema_on_200_201(cls):
309315
serialized_name="provisioningState",
310316
flags={"read_only": True},
311317
)
318+
properties.resource_location = AAZStrType(
319+
serialized_name="resourceLocation",
320+
)
312321
properties.workloads = AAZListType(
313322
flags={"read_only": True},
314323
)

src/managedcleanroom/azext_managedcleanroom/aaz/latest/managedcleanroom/collaboration/_delete.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ class Delete(AAZCommand):
2424
"""
2525

2626
_aaz_info = {
27-
"version": "2026-03-31-preview",
27+
"version": "2026-04-30-preview",
2828
"resources": [
29-
["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.cleanroom/collaborations/{}", "2026-03-31-preview"],
29+
["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.cleanroom/collaborations/{}", "2026-04-30-preview"],
3030
]
3131
}
3232

@@ -147,7 +147,7 @@ def url_parameters(self):
147147
def query_parameters(self):
148148
parameters = {
149149
**self.serialize_query_param(
150-
"api-version", "2026-03-31-preview",
150+
"api-version", "2026-04-30-preview",
151151
required=True,
152152
),
153153
}

src/managedcleanroom/azext_managedcleanroom/aaz/latest/managedcleanroom/collaboration/_enable_workload.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ class EnableWorkload(AAZCommand):
2323
"""
2424

2525
_aaz_info = {
26-
"version": "2026-03-31-preview",
26+
"version": "2026-04-30-preview",
2727
"resources": [
28-
["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.cleanroom/collaborations/{}/enableworkload", "2026-03-31-preview"],
28+
["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.cleanroom/collaborations/{}/enableworkload", "2026-04-30-preview"],
2929
]
3030
}
3131

@@ -67,7 +67,7 @@ def _build_arguments_schema(cls, *args, **kwargs):
6767
arg_group="Body",
6868
help="Type of the workload to be enabled.",
6969
required=True,
70-
enum={"analytics": "analytics"},
70+
enum={"Analytics": "Analytics"},
7171
)
7272
return cls._args_schema
7373

@@ -152,7 +152,7 @@ def url_parameters(self):
152152
def query_parameters(self):
153153
parameters = {
154154
**self.serialize_query_param(
155-
"api-version", "2026-03-31-preview",
155+
"api-version", "2026-04-30-preview",
156156
required=True,
157157
),
158158
}
@@ -210,7 +210,7 @@ def _build_schema_on_200(cls):
210210
flags={"read_only": True},
211211
)
212212
_schema_on_200.properties = AAZObjectType(
213-
flags={"required": True, "client_flatten": True},
213+
flags={"client_flatten": True},
214214
)
215215
_schema_on_200.system_data = AAZObjectType(
216216
serialized_name="systemData",
@@ -246,6 +246,9 @@ def _build_schema_on_200(cls):
246246
serialized_name="provisioningState",
247247
flags={"read_only": True},
248248
)
249+
properties.resource_location = AAZStrType(
250+
serialized_name="resourceLocation",
251+
)
249252
properties.workloads = AAZListType(
250253
flags={"read_only": True},
251254
)
Lines changed: 171 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,171 @@
1+
# --------------------------------------------------------------------------------------------
2+
# Copyright (c) Microsoft Corporation. All rights reserved.
3+
# Licensed under the MIT License. See License.txt in the project root for license information.
4+
#
5+
# Code generated by aaz-dev-tools
6+
# --------------------------------------------------------------------------------------------
7+
8+
# pylint: skip-file
9+
# flake8: noqa
10+
11+
from azure.cli.core.aaz import *
12+
from ..private_endpoint_util import PrivateEndpointUtil
13+
14+
15+
@register_command(
16+
"managedcleanroom collaboration get-readonly-kube-config",
17+
)
18+
class GetReadonlyKubeConfig(AAZCommand):
19+
"""Gets the readonly kubeconfig for the collaboration.
20+
21+
:example: Get Readonly KubeConfig for Collaboration
22+
az managedcleanroom collaboration get-readonly-kube-config --resource-group testrg --collaboration-name ContosoCollaboration
23+
"""
24+
25+
_aaz_info = {
26+
"version": "2026-04-30-preview",
27+
"resources": [
28+
["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.cleanroom/collaborations/{}/getreadonlykubeconfig", "2026-04-30-preview"],
29+
]
30+
}
31+
32+
def _handler(self, command_args):
33+
super()._handler(command_args)
34+
self._execute_operations()
35+
return self._output()
36+
37+
_args_schema = None
38+
39+
@classmethod
40+
def _build_arguments_schema(cls, *args, **kwargs):
41+
if cls._args_schema is not None:
42+
return cls._args_schema
43+
cls._args_schema = super()._build_arguments_schema(*args, **kwargs)
44+
45+
# define Arg Group ""
46+
47+
_args_schema = cls._args_schema
48+
_args_schema.collaboration_name = AAZStrArg(
49+
options=["--collaboration-name"],
50+
help="Name of the collaboration.",
51+
required=True,
52+
id_part="name",
53+
fmt=AAZStrArgFormat(
54+
pattern="^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$",
55+
),
56+
)
57+
_args_schema.resource_group = AAZResourceGroupNameArg(
58+
required=True,
59+
)
60+
return cls._args_schema
61+
62+
def _execute_operations(self):
63+
self.pre_operations()
64+
self.CollaborationsGetReadonlyKubeConfig(ctx=self.ctx)()
65+
self.post_operations()
66+
67+
@register_callback
68+
def pre_operations(self):
69+
pass
70+
71+
@register_callback
72+
def post_operations(self):
73+
pass
74+
75+
def _output(self, *args, **kwargs):
76+
result = self.deserialize_output(self.ctx.vars.instance, client_flatten=True)
77+
return result
78+
79+
class CollaborationsGetReadonlyKubeConfig(AAZHttpOperation):
80+
CLIENT_TYPE = "MgmtClient"
81+
82+
def __call__(self, *args, **kwargs):
83+
request = self.make_request()
84+
session = self.client.send_request(request=request, stream=False, **kwargs)
85+
if session.http_response.status_code in [200]:
86+
return self.on_200(session)
87+
88+
return self.on_error(session.http_response)
89+
90+
@property
91+
def url(self):
92+
return self.client.format_url(
93+
f"/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/{PrivateEndpointUtil.get_configured_namespace()}/collaborations/{{collaborationName}}/getReadonlyKubeConfig",
94+
**self.url_parameters
95+
)
96+
97+
@property
98+
def method(self):
99+
return "POST"
100+
101+
@property
102+
def error_format(self):
103+
return "MgmtErrorFormat"
104+
105+
@property
106+
def url_parameters(self):
107+
parameters = {
108+
**self.serialize_url_param(
109+
"collaborationName", self.ctx.args.collaboration_name,
110+
required=True,
111+
),
112+
**self.serialize_url_param(
113+
"resourceGroupName", self.ctx.args.resource_group,
114+
required=True,
115+
),
116+
**self.serialize_url_param(
117+
"subscriptionId", self.ctx.subscription_id,
118+
required=True,
119+
),
120+
}
121+
return parameters
122+
123+
@property
124+
def query_parameters(self):
125+
parameters = {
126+
**self.serialize_query_param(
127+
"api-version", "2026-04-30-preview",
128+
required=True,
129+
),
130+
}
131+
return parameters
132+
133+
@property
134+
def header_parameters(self):
135+
parameters = {
136+
**self.serialize_header_param(
137+
"Accept", "application/json",
138+
),
139+
}
140+
return parameters
141+
142+
def on_200(self, session):
143+
data = self.deserialize_http_content(session)
144+
self.ctx.set_var(
145+
"instance",
146+
data,
147+
schema_builder=self._build_schema_on_200
148+
)
149+
150+
_schema_on_200 = None
151+
152+
@classmethod
153+
def _build_schema_on_200(cls):
154+
if cls._schema_on_200 is not None:
155+
return cls._schema_on_200
156+
157+
cls._schema_on_200 = AAZObjectType()
158+
159+
_schema_on_200 = cls._schema_on_200
160+
_schema_on_200.kubeconfig = AAZStrType(
161+
flags={"required": True},
162+
)
163+
164+
return cls._schema_on_200
165+
166+
167+
class _GetReadonlyKubeConfigHelper:
168+
"""Helper class for GetReadonlyKubeConfig"""
169+
170+
171+
__all__ = ["GetReadonlyKubeConfig"]

0 commit comments

Comments
 (0)