Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions sdk/compute/azure-mgmt-compute/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,26 @@
# Release History

## 38.2.0 (2026-07-15)

### Features Added

- Client `ComputeManagementClient` added operation group `shared_gallery_invites`
- Client `ComputeManagementClient` added operation group `tenant_level_shared_gallery_invites`
- Model `DiskRestorePointProperties` added property `snapshot_access_state`
- Model `DiskSecurityProfile` added property `confidential_vm_version`
- Enum `RollingUpgradeStatusCode` added member `ROLLING_BACK`
- Model `SnapshotProperties` added property `immutability_policy`
- Enum `UpgradeState` added member `ROLLING_BACK`
- Added enum `ConfidentialVMVersion`
- Added model `ImmutabilityPolicy`
- Added model `ImmutabilityPolicyData`
- Added model `ImmutabilityPolicyLockData`
- Added enum `ImmutabilityPolicyType`
- Operation group `SnapshotsOperations` added method `begin_update_immutability_policy`
- Operation group `SnapshotsOperations` added method `begin_update_immutability_policy_lock`
- Added operation group `SharedGalleryInvitesOperations`
- Added operation group `TenantLevelSharedGalleryInvitesOperations`

## 38.1.0 (2026-06-17)

### Features Added
Expand Down
10 changes: 5 additions & 5 deletions sdk/compute/azure-mgmt-compute/_metadata.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
{
"apiVersions": {
"Compute": "2026-03-01",
"ComputeDisk": "2025-01-02",
"ComputeGallery": "2025-03-03",
"ComputeDisk": "2026-03-02",
"ComputeGallery": "2025-12-03",
"ComputeSku": "2021-07-01"
},
"commit": "cc1bd87b8f859439bff4e5b3f6373ab28c653b52",
"commit": "3afe65f7239e0e1f26202c75d960266adddb1eeb",
"repository_url": "https://github.com/Azure/azure-rest-api-specs",
"typespec_src": "specification/compute/resource-manager/Microsoft.Compute/Compute",
"emitterVersion": "0.63.1",
"httpClientPythonVersion": "^0.32.0"
"emitterVersion": "0.63.2",
"httpClientPythonVersion": "^0.34.1"
}
5,493 changes: 5,287 additions & 206 deletions sdk/compute/azure-mgmt-compute/api.md

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions sdk/compute/azure-mgmt-compute/api.metadata.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
apiMdSha256: dcbaa1508d47de7caa3c38e7bc8916cc48d69da66cbe64ae513a920e44abc0ec
apiMdSha256: aa8523dac5e700508168a7916def557832481b19c014a3c32fd02e290a82f0d0
parserVersion: 0.3.28
pythonVersion: 3.13.13
pythonVersion: 3.13.14
19 changes: 18 additions & 1 deletion sdk/compute/azure-mgmt-compute/apiview-properties.json
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,9 @@
"azure.mgmt.compute.models.ImageStorageProfile": "Compute.ImageStorageProfile",
"azure.mgmt.compute.models.ImageUpdate": "Compute.ImageUpdate",
"azure.mgmt.compute.models.ImageVersionSecurityProfile": "ComputeGallery.ImageVersionSecurityProfile",
"azure.mgmt.compute.models.ImmutabilityPolicy": "ComputeDisk.ImmutabilityPolicy",
"azure.mgmt.compute.models.ImmutabilityPolicyData": "ComputeDisk.ImmutabilityPolicyData",
"azure.mgmt.compute.models.ImmutabilityPolicyLockData": "ComputeDisk.ImmutabilityPolicyLockData",
"azure.mgmt.compute.models.InnerError": "Common.InnerError",
"azure.mgmt.compute.models.InstanceViewStatus": "Compute.InstanceViewStatus",
"azure.mgmt.compute.models.InterconnectBlock": "Compute.InterconnectBlock",
Expand Down Expand Up @@ -604,6 +607,7 @@
"azure.mgmt.compute.models.EncryptionType": "ComputeDisk.EncryptionType",
"azure.mgmt.compute.models.NetworkAccessPolicy": "ComputeDisk.NetworkAccessPolicy",
"azure.mgmt.compute.models.DiskSecurityTypes": "ComputeDisk.DiskSecurityTypes",
"azure.mgmt.compute.models.ConfidentialVMVersion": "ComputeDisk.ConfidentialVMVersion",
"azure.mgmt.compute.models.PublicNetworkAccess": "ComputeDisk.PublicNetworkAccess",
"azure.mgmt.compute.models.DataAccessAuthMode": "ComputeDisk.DataAccessAuthMode",
"azure.mgmt.compute.models.AvailabilityPolicyDiskDelay": "ComputeDisk.AvailabilityPolicyDiskDelay",
Expand All @@ -615,6 +619,7 @@
"azure.mgmt.compute.models.DiskEncryptionSetType": "ComputeDisk.DiskEncryptionSetType",
"azure.mgmt.compute.models.DiskEncryptionSetIdentityType": "ComputeDisk.DiskEncryptionSetIdentityType",
"azure.mgmt.compute.models.CopyCompletionErrorReason": "ComputeDisk.CopyCompletionErrorReason",
"azure.mgmt.compute.models.ImmutabilityPolicyType": "ComputeDisk.ImmutabilityPolicyType",
"azure.mgmt.compute.models.SnapshotStorageAccountTypes": "ComputeDisk.SnapshotStorageAccountTypes",
"azure.mgmt.compute.models.GalleryProvisioningState": "ComputeGallery.GalleryProvisioningState",
"azure.mgmt.compute.models.GallerySharingPermissionTypes": "ComputeGallery.GallerySharingPermissionTypes",
Expand Down Expand Up @@ -1027,6 +1032,10 @@
"azure.mgmt.compute.aio.operations.SnapshotsOperations.begin_grant_access": "ComputeDisk.Snapshots.grantAccess",
"azure.mgmt.compute.operations.SnapshotsOperations.begin_revoke_access": "ComputeDisk.Snapshots.revokeAccess",
"azure.mgmt.compute.aio.operations.SnapshotsOperations.begin_revoke_access": "ComputeDisk.Snapshots.revokeAccess",
"azure.mgmt.compute.operations.SnapshotsOperations.begin_update_immutability_policy": "ComputeDisk.Snapshots.updateImmutabilityPolicy",
"azure.mgmt.compute.aio.operations.SnapshotsOperations.begin_update_immutability_policy": "ComputeDisk.Snapshots.updateImmutabilityPolicy",
"azure.mgmt.compute.operations.SnapshotsOperations.begin_update_immutability_policy_lock": "ComputeDisk.Snapshots.updateImmutabilityPolicyLock",
"azure.mgmt.compute.aio.operations.SnapshotsOperations.begin_update_immutability_policy_lock": "ComputeDisk.Snapshots.updateImmutabilityPolicyLock",
"azure.mgmt.compute.operations.GalleriesOperations.get": "ComputeGallery.Galleries.get",
"azure.mgmt.compute.aio.operations.GalleriesOperations.get": "ComputeGallery.Galleries.get",
"azure.mgmt.compute.operations.GalleriesOperations.begin_create_or_update": "ComputeGallery.Galleries.createOrUpdate",
Expand Down Expand Up @@ -1141,6 +1150,14 @@
"azure.mgmt.compute.aio.operations.CommunityGalleryImageVersionsOperations.get": "ComputeGallery.CommunityGalleryImageVersions.get",
"azure.mgmt.compute.operations.CommunityGalleryImageVersionsOperations.list": "ComputeGallery.CommunityGalleryImageVersions.list",
"azure.mgmt.compute.aio.operations.CommunityGalleryImageVersionsOperations.list": "ComputeGallery.CommunityGalleryImageVersions.list",
"azure.mgmt.compute.operations.SharedGalleryInvitesOperations.begin_gallery_sharing_accept": "ComputeGallery.SharedGalleryInvites.gallerySharingAccept",
"azure.mgmt.compute.aio.operations.SharedGalleryInvitesOperations.begin_gallery_sharing_accept": "ComputeGallery.SharedGalleryInvites.gallerySharingAccept",
"azure.mgmt.compute.operations.SharedGalleryInvitesOperations.begin_gallery_sharing_reject": "ComputeGallery.SharedGalleryInvites.gallerySharingReject",
"azure.mgmt.compute.aio.operations.SharedGalleryInvitesOperations.begin_gallery_sharing_reject": "ComputeGallery.SharedGalleryInvites.gallerySharingReject",
"azure.mgmt.compute.operations.TenantLevelSharedGalleryInvitesOperations.begin_tenant_level_gallery_sharing_accept": "ComputeGallery.TenantLevelSharedGalleryInvites.tenantLevelGallerySharingAccept",
"azure.mgmt.compute.aio.operations.TenantLevelSharedGalleryInvitesOperations.begin_tenant_level_gallery_sharing_accept": "ComputeGallery.TenantLevelSharedGalleryInvites.tenantLevelGallerySharingAccept",
"azure.mgmt.compute.operations.TenantLevelSharedGalleryInvitesOperations.begin_tenant_level_gallery_sharing_reject": "ComputeGallery.TenantLevelSharedGalleryInvites.tenantLevelGallerySharingReject",
"azure.mgmt.compute.aio.operations.TenantLevelSharedGalleryInvitesOperations.begin_tenant_level_gallery_sharing_reject": "ComputeGallery.TenantLevelSharedGalleryInvites.tenantLevelGallerySharingReject",
"azure.mgmt.compute.operations.ResourceSkusOperations.list": "ComputeSku.ResourceSkus.list",
"azure.mgmt.compute.aio.operations.ResourceSkusOperations.list": "ComputeSku.ResourceSkus.list",
"azure.mgmt.compute.operations.VirtualMachineScaleSetRollingUpgradesOperations.begin_start_extension_upgrade": "Compute.VirtualMachineScaleSets.startExtensionUpgrade",
Expand Down Expand Up @@ -1246,5 +1263,5 @@
"azure.mgmt.compute.operations.GallerySharingProfileOperations.begin_update": "ComputeGallery.Galleries.gallerySharingProfileUpdate",
"azure.mgmt.compute.aio.operations.GallerySharingProfileOperations.begin_update": "ComputeGallery.Galleries.gallerySharingProfileUpdate"
},
"CrossLanguageVersion": "89bf2ff23924"
"CrossLanguageVersion": "e3f97638089f"
}
13 changes: 13 additions & 0 deletions sdk/compute/azure-mgmt-compute/azure/mgmt/compute/_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,11 @@
SharedGalleriesOperations,
SharedGalleryImageVersionsOperations,
SharedGalleryImagesOperations,
SharedGalleryInvitesOperations,
SnapshotsOperations,
SoftDeletedResourceOperations,
SshPublicKeysOperations,
TenantLevelSharedGalleryInvitesOperations,
UsageOperations,
VirtualMachineExtensionImagesOperations,
VirtualMachineExtensionsOperations,
Expand Down Expand Up @@ -187,6 +189,11 @@ class ComputeManagementClient: # pylint: disable=client-accepts-api-version-key
:ivar community_gallery_image_versions: CommunityGalleryImageVersionsOperations operations
:vartype community_gallery_image_versions:
azure.mgmt.compute.operations.CommunityGalleryImageVersionsOperations
:ivar shared_gallery_invites: SharedGalleryInvitesOperations operations
:vartype shared_gallery_invites: azure.mgmt.compute.operations.SharedGalleryInvitesOperations
:ivar tenant_level_shared_gallery_invites: TenantLevelSharedGalleryInvitesOperations operations
:vartype tenant_level_shared_gallery_invites:
azure.mgmt.compute.operations.TenantLevelSharedGalleryInvitesOperations
:ivar resource_skus: ResourceSkusOperations operations
:vartype resource_skus: azure.mgmt.compute.operations.ResourceSkusOperations
:ivar virtual_machine_scale_set_rolling_upgrades:
Expand Down Expand Up @@ -372,6 +379,12 @@ def __init__(
self.community_gallery_image_versions = CommunityGalleryImageVersionsOperations(
self._client, self._config, self._serialize, self._deserialize
)
self.shared_gallery_invites = SharedGalleryInvitesOperations(
self._client, self._config, self._serialize, self._deserialize
)
self.tenant_level_shared_gallery_invites = TenantLevelSharedGalleryInvitesOperations(
self._client, self._config, self._serialize, self._deserialize
)
self.resource_skus = ResourceSkusOperations(self._client, self._config, self._serialize, self._deserialize)
self.virtual_machine_scale_set_rolling_upgrades = VirtualMachineScaleSetRollingUpgradesOperations(
self._client, self._config, self._serialize, self._deserialize
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,29 @@ def _serialize_bytes(o, format: typing.Optional[str] = None) -> str:
return encoded


def _serialize_duration(td: timedelta, format: typing.Optional[str] = None):
"""Serialize a timedelta to its wire representation.

For the ``seconds``/``milliseconds`` encodings the value is converted to a
numeric value, otherwise it falls back to an ISO 8601 duration string.

:param timedelta td: The timedelta to serialize.
:param str format: The duration encoding format.
:rtype: int or float or str
:return: serialized duration
"""
seconds = td.total_seconds()
if format == "duration-seconds-int":
return int(seconds)
if format == "duration-seconds-float":
return seconds
if format == "duration-milliseconds-int":
return int(seconds * 1000)
if format == "duration-milliseconds-float":
return seconds * 1000
return _timedelta_as_isostr(td)


def _serialize_datetime(o, format: typing.Optional[str] = None):
if hasattr(o, "year") and hasattr(o, "hour"):
if format == "rfc7231":
Expand Down Expand Up @@ -301,6 +324,12 @@ def _deserialize_duration(attr):
return isodate.parse_duration(attr)


def _deserialize_duration_numeric(attr, unit):
if isinstance(attr, timedelta):
return attr
return timedelta(**{unit: float(attr)})


def _deserialize_decimal(attr):
if isinstance(attr, decimal.Decimal):
return attr
Expand Down Expand Up @@ -330,6 +359,10 @@ def _deserialize_int_as_str(attr):
"unix-timestamp": _deserialize_datetime_unix_timestamp,
"base64": _deserialize_bytes,
"base64url": _deserialize_bytes_base64,
"duration-seconds-int": functools.partial(_deserialize_duration_numeric, unit="seconds"),
"duration-seconds-float": functools.partial(_deserialize_duration_numeric, unit="seconds"),
"duration-milliseconds-int": functools.partial(_deserialize_duration_numeric, unit="milliseconds"),
"duration-milliseconds-float": functools.partial(_deserialize_duration_numeric, unit="milliseconds"),
}


Expand Down Expand Up @@ -564,7 +597,7 @@ def _serialize(o, format: typing.Optional[str] = None): # pylint: disable=too-m
pass
# Last, try datetime.timedelta
try:
return _timedelta_as_isostr(o)
return _serialize_duration(o, format)
except AttributeError:
# This will be raised when it hits value.total_seconds in the method above
pass
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -520,6 +520,10 @@ def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None:
"rfc-1123": Serializer.serialize_rfc,
"unix-time": Serializer.serialize_unix,
"duration": Serializer.serialize_duration,
"duration-seconds-int": Serializer.serialize_duration_seconds_int,
"duration-seconds-float": Serializer.serialize_duration_seconds_float,
"duration-milliseconds-int": Serializer.serialize_duration_milliseconds_int,
"duration-milliseconds-float": Serializer.serialize_duration_milliseconds_float,
"date": Serializer.serialize_date,
"time": Serializer.serialize_time,
"decimal": Serializer.serialize_decimal,
Expand Down Expand Up @@ -1109,6 +1113,61 @@ def serialize_duration(attr, **kwargs): # pylint: disable=unused-argument
attr = isodate.parse_duration(attr)
return isodate.duration_isoformat(attr)

@staticmethod
def _serialize_duration_numeric(attr, scale, as_int):
"""Serialize a TimeDelta into a numeric value scaled to the wire unit.

:param TimeDelta attr: Object to be serialized.
:param int scale: Multiplier applied to total seconds (1 for seconds, 1000 for milliseconds).
:param bool as_int: Whether to truncate the result to an int.
:rtype: int or float
:return: serialized duration
"""
if isinstance(attr, str):
attr = isodate.parse_duration(attr)
value = attr.total_seconds() * scale if isinstance(attr, datetime.timedelta) else attr
return int(value) if as_int else float(value)

@staticmethod
def serialize_duration_seconds_int(attr, **kwargs): # pylint: disable=unused-argument
"""Serialize TimeDelta object into an integer number of seconds.

:param TimeDelta attr: Object to be serialized.
:rtype: int
:return: serialized duration
"""
return Serializer._serialize_duration_numeric(attr, 1, True)

@staticmethod
def serialize_duration_seconds_float(attr, **kwargs): # pylint: disable=unused-argument
"""Serialize TimeDelta object into a floating point number of seconds.

:param TimeDelta attr: Object to be serialized.
:rtype: float
:return: serialized duration
"""
return Serializer._serialize_duration_numeric(attr, 1, False)

@staticmethod
def serialize_duration_milliseconds_int(attr, **kwargs): # pylint: disable=unused-argument
"""Serialize TimeDelta object into an integer number of milliseconds.

:param TimeDelta attr: Object to be serialized.
:rtype: int
:return: serialized duration
"""
return Serializer._serialize_duration_numeric(attr, 1000, True)

@staticmethod
def serialize_duration_milliseconds_float(attr, **kwargs): # pylint: disable=unused-argument
"""Serialize TimeDelta object into a floating point number of milliseconds.

:param TimeDelta attr: Object to be serialized.
:rtype: float
:return: serialized duration
"""
return Serializer._serialize_duration_numeric(attr, 1000, False)

@staticmethod
def serialize_rfc(attr, **kwargs): # pylint: disable=unused-argument
"""Serialize Datetime object into RFC-1123 formatted string.
Expand Down Expand Up @@ -1381,6 +1440,10 @@ def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None:
"rfc-1123": Deserializer.deserialize_rfc,
"unix-time": Deserializer.deserialize_unix,
"duration": Deserializer.deserialize_duration,
"duration-seconds-int": Deserializer.deserialize_duration_seconds,
"duration-seconds-float": Deserializer.deserialize_duration_seconds,
"duration-milliseconds-int": Deserializer.deserialize_duration_milliseconds,
"duration-milliseconds-float": Deserializer.deserialize_duration_milliseconds,
"date": Deserializer.deserialize_date,
"time": Deserializer.deserialize_time,
"decimal": Deserializer.deserialize_decimal,
Expand All @@ -1393,6 +1456,10 @@ def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None:
}
self.deserialize_expected_types = {
"duration": (isodate.Duration, datetime.timedelta),
"duration-seconds-int": (isodate.Duration, datetime.timedelta),
"duration-seconds-float": (isodate.Duration, datetime.timedelta),
"duration-milliseconds-int": (isodate.Duration, datetime.timedelta),
"duration-milliseconds-float": (isodate.Duration, datetime.timedelta),
"iso-8601": (datetime.datetime),
}
self.dependencies: dict[str, type] = dict(classes) if classes else {}
Expand Down Expand Up @@ -1954,6 +2021,48 @@ def deserialize_duration(attr):
raise DeserializationError(msg) from err
return duration

@staticmethod
def _deserialize_duration_numeric(attr, unit):
"""Deserialize a numeric duration value into a TimeDelta object.

:param float attr: response value to be deserialized.
:param str unit: The wire unit, used as the ``timedelta`` keyword
(``"seconds"`` or ``"milliseconds"``).
:return: Deserialized duration
:rtype: TimeDelta
:raises DeserializationError: if value is invalid.
"""
if isinstance(attr, ET.Element):
attr = attr.text
try:
duration = datetime.timedelta(**{unit: float(attr)}) # type: ignore
except (ValueError, OverflowError, TypeError) as err:
msg = "Cannot deserialize duration object."
raise DeserializationError(msg) from err
return duration

@staticmethod
def deserialize_duration_seconds(attr):
"""Deserialize a numeric number of seconds into a TimeDelta object.

:param float attr: response value to be deserialized.
:return: Deserialized duration
:rtype: TimeDelta
:raises DeserializationError: if value is invalid.
"""
return Deserializer._deserialize_duration_numeric(attr, "seconds")

@staticmethod
def deserialize_duration_milliseconds(attr):
"""Deserialize a numeric number of milliseconds into a TimeDelta object.

:param float attr: response value to be deserialized.
:return: Deserialized duration
:rtype: TimeDelta
:raises DeserializationError: if value is invalid.
"""
return Deserializer._deserialize_duration_numeric(attr, "milliseconds")

@staticmethod
def deserialize_date(attr):
"""Deserialize ISO-8601 formatted string into Date object.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@
# Changes may cause incorrect behavior and will be lost if the code is regenerated.
# --------------------------------------------------------------------------

VERSION = "38.1.0"
VERSION = "38.2.0"
Loading
Loading