/// <summary> /// Update multiple devices' twins. A maximum of 100 updates can be done per call, and each operation must be done on a different device twin. For larger scale operations, consider using <see href="https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities">IoT Hub jobs</see>. /// </summary> /// <param name="twinUpdates">The new twins to replace the twins on existing devices.</param> /// <param name="precondition">The condition on which to update each device twin.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>The result of the bulk operation and the http response <see cref="Response{T}"/>.</returns> public virtual Task <Response <BulkRegistryOperationResponse> > UpdateTwinsAsync( IEnumerable <TwinData> twinUpdates, BulkIfMatchPrecondition precondition = BulkIfMatchPrecondition.IfMatch, CancellationToken cancellationToken = default) { IEnumerable <ExportImportDevice> registryOperations = twinUpdates .Select(x => new ExportImportDevice() { Id = x.DeviceId, TwinETag = x.Etag, ImportMode = precondition == BulkIfMatchPrecondition.Unconditional ? ExportImportDeviceImportMode.UpdateTwin : ExportImportDeviceImportMode.UpdateTwinIfMatchETag }.WithTags(x.Tags).WithPropertiesFrom(x.Properties)); return(_devicesRestClient.BulkRegistryOperationsAsync(registryOperations, cancellationToken)); }
/// <summary> /// Update multiple modules. A maximum of 100 updates can be done per call, and each operation must be done on a different module identity. For larger scale operations, consider using <see href="https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities">IoT Hub jobs</see>.. /// </summary> /// <param name="moduleIdentities">The modules to update.</param> /// <param name="precondition">The condition on which to update each module identity.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>The result of the bulk operation and the http response <see cref="Response{T}"/>.</returns> public virtual Response <BulkRegistryOperationResponse> UpdateIdentities( IEnumerable <ModuleIdentity> moduleIdentities, BulkIfMatchPrecondition precondition = BulkIfMatchPrecondition.IfMatch, CancellationToken cancellationToken = default) { IEnumerable <ExportImportDevice> registryOperations = moduleIdentities .Select(x => new ExportImportDevice() { Id = x.DeviceId, ModuleId = x.ModuleId, Authentication = x.Authentication, ImportMode = precondition == BulkIfMatchPrecondition.Unconditional ? ExportImportDeviceImportMode.Update : ExportImportDeviceImportMode.UpdateIfMatchETag }); return(_bulkRegistryClient.UpdateRegistry(registryOperations, cancellationToken)); }
/// <summary> /// Delete multiple devices. A maximum of 100 deletions can be done per call. For larger scale operations, consider using <see href="https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities">IoT Hub jobs</see>. /// </summary> /// <param name="deviceIdentities">The devices to delete.</param> /// <param name="precondition">The condition on which to delete each device identity.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>The result of the bulk deletion and the http response <see cref="Response{T}"/>.</returns> public virtual Response <BulkRegistryOperationResponse> DeleteIdentities( IEnumerable <DeviceIdentity> deviceIdentities, BulkIfMatchPrecondition precondition = BulkIfMatchPrecondition.IfMatch, CancellationToken cancellationToken = default) { IEnumerable <ExportImportDevice> registryOperations = deviceIdentities .Select(x => new ExportImportDevice() { Id = x.DeviceId, ETag = x.Etag, ImportMode = precondition == BulkIfMatchPrecondition.Unconditional ? ExportImportDeviceImportMode.Delete : ExportImportDeviceImportMode.DeleteIfMatchETag }); return(_devicesRestClient.BulkRegistryOperations(registryOperations, cancellationToken)); }
/// <summary> /// Update multiple devices' twins. A maximum of 100 updates can be done per call, and each operation must be done on a different device twin. For larger scale operations, consider using <see href="https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities">IoT Hub jobs</see>. /// </summary> /// <param name="twinUpdates">The new twins to replace the twins on existing devices.</param> /// <param name="precondition">The condition on which to update each device twin.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>The result of the bulk operation and the http response <see cref="Response{T}"/>.</returns> public virtual Task <Response <BulkRegistryOperationResponse> > UpdateTwinsAsync( IEnumerable <TwinData> twinUpdates, BulkIfMatchPrecondition precondition = BulkIfMatchPrecondition.IfMatch, CancellationToken cancellationToken = default) { IEnumerable <ExportImportDevice> registryOperations = twinUpdates .Select(x => new ExportImportDevice() { Id = x.DeviceId, Tags = x.Tags, Properties = new PropertyContainer(x.Properties?.Desired, x.Properties?.Reported), TwinETag = x.Etag, ImportMode = precondition == BulkIfMatchPrecondition.Unconditional ? ExportImportDeviceImportMode.UpdateTwin : ExportImportDeviceImportMode.UpdateTwinIfMatchETag }); return(_registryManagerClient.BulkDeviceCrudAsync(registryOperations, cancellationToken)); }
/// <summary> /// Delete multiple modules. A maximum of 100 deletions can be done per call. For larger scale operations, consider using <see href="https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities">IoT Hub jobs</see>. /// </summary> /// <param name="moduleIdentities">The modules to delete.</param> /// <param name="precondition">The condition on which to delete each device identity.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>The result of the bulk deletion and the http response <see cref="Response{T}"/>.</returns> public virtual Task <Response <BulkRegistryOperationResponse> > DeleteIdentitiesAsync( IEnumerable <ModuleIdentity> moduleIdentities, BulkIfMatchPrecondition precondition = BulkIfMatchPrecondition.IfMatch, CancellationToken cancellationToken = default) { IEnumerable <ExportImportDevice> registryOperations = moduleIdentities .Select(x => new ExportImportDevice() { Id = x.DeviceId, ModuleId = x.ModuleId, ETag = x.Etag, ImportMode = precondition == BulkIfMatchPrecondition.Unconditional ? ExportImportDeviceImportMode.Delete : ExportImportDeviceImportMode.DeleteIfMatchETag }); return(_registryManagerClient.BulkDeviceCrudAsync(registryOperations, cancellationToken)); }
/// <summary> /// Update multiple devices. A maximum of 100 updates can be done per call, and each operation must be done on a different identity. For larger scale operations, consider using <see href="https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-identity-registry#import-and-export-device-identities">IoT Hub jobs</see>. /// </summary> /// <param name="deviceIdentities">The devices to update.</param> /// <param name="precondition">The condition on which to update each device identity.</param> /// <param name="cancellationToken">The cancellation token.</param> /// <returns>The result of the bulk operation and the http response <see cref="Response{T}"/>.</returns> public virtual Response <BulkRegistryOperationResponse> UpdateIdentities( IEnumerable <DeviceIdentity> deviceIdentities, BulkIfMatchPrecondition precondition = BulkIfMatchPrecondition.IfMatch, CancellationToken cancellationToken = default) { IEnumerable <ExportImportDevice> registryOperations = deviceIdentities .Select(x => new ExportImportDevice() { Id = x.DeviceId, Authentication = x.Authentication, Capabilities = x.Capabilities, DeviceScope = x.DeviceScope, ETag = x.Etag, Status = string.Equals(ExportImportDeviceStatus.Disabled.ToString(), x.Status?.ToString(), StringComparison.OrdinalIgnoreCase) ? ExportImportDeviceStatus.Disabled : ExportImportDeviceStatus.Enabled, StatusReason = x.StatusReason, ImportMode = precondition == BulkIfMatchPrecondition.Unconditional ? ExportImportDeviceImportMode.Update : ExportImportDeviceImportMode.UpdateIfMatchETag }.WithParentScopes(x.ParentScopes)); return(_devicesRestClient.BulkRegistryOperations(registryOperations, cancellationToken)); }