protected Creatable(string name, InnerResourceT innerObject) : base(name, innerObject) { Name = name; IResourceCreator <IResourceT> creator = this as IResourceCreator <IResourceT>; CreatorTaskGroup = new CreatorTaskGroup <IResourceT>(this.Key, creator); }
public virtual Task <IFluentResourceT> CreateAsync(CancellationToken cancellationToken, bool multiThreaded = true) { TaskCompletionSource <IFluentResourceT> taskCompletionSource = new TaskCompletionSource <IFluentResourceT>(); if (CreatorTaskGroup.IsPreparer) { CreatorTaskGroup.Prepare(); CreatorTaskGroup.ExecuteAsync(cancellationToken, multiThreaded).ContinueWith( (task) => { if (task.Exception != null) { taskCompletionSource.SetException(task.Exception.InnerExceptions); } else if (task.IsCanceled) { taskCompletionSource.SetCanceled(); } else { IFluentResourceT thisResource = this as IFluentResourceT; if (thisResource == null) { taskCompletionSource.SetException(new InvalidOperationException("Internal Error: Expected 'of type' '" + typeof(IFluentResourceT) + "', but got '" + this.GetType().Namespace + "'")); } else { taskCompletionSource.SetResult(thisResource); } } }, CancellationToken.None, TaskContinuationOptions.ExecuteSynchronously, TaskScheduler.Default); } else { taskCompletionSource.SetException(new InvalidOperationException("Internal Error: Creatable::CreateAsync can be invoked only on preparer")); } return(taskCompletionSource.Task); }
/// <summary> /// Specifies the definition of a not-yet-created user assigned identity to be associated with the virtual machine. /// </summary> /// <param name="virtualMachineInner">The virtual machine to set the identity.</param> /// <param name="vmTaskGroup">the task group of the virtual machine</param> /// <param name="creatableIdentity">the creatable user assigned identity</param> /// <returns>VirtualMachineMsiHelper.</returns> internal VirtualMachineMsiHelper WithNewUserAssignedManagedServiceIdentity(VirtualMachineInner virtualMachineInner, CreatorTaskGroup <IHasId> vmTaskGroup, ICreatable <IIdentity> creatableIdentity) { if (!this.userAssignedIdentityCreatableKeys.Contains(creatableIdentity.Key)) { InitVMIdentity(virtualMachineInner, ResourceIdentityType.UserAssigned); this.userAssignedIdentityCreatableKeys.Add(creatableIdentity.Key); ((creatableIdentity as IResourceCreator <IHasId>).CreatorTaskGroup).Merge(vmTaskGroup); } return(this); }
/// <summary> /// Set user assigned identity ids to the given virtual machine inner model /// </summary> /// <param name="virtualMachineInner">the virtual machine inner model</param> /// <param name="vmTaskGroup">the virtual machine task group</param> internal void HandleUserAssignedIdentities(VirtualMachineInner virtualMachineInner, CreatorTaskGroup <IHasId> vmTaskGroup) { try { if (virtualMachineInner.Identity == null || virtualMachineInner.Identity.Type == null) { return; } var parsedIdentityType = virtualMachineInner.Identity.Type; if (parsedIdentityType.Equals(ResourceIdentityType.None) || parsedIdentityType.Equals(ResourceIdentityType.SystemAssigned)) { return; } foreach (var key in this.userAssignedIdentityCreatableKeys) { var identity = (IIdentity)vmTaskGroup.CreatedResource(key); if (!this.userAssignedIdentityIdsToAssociate.Contains(identity.Id)) { this.userAssignedIdentityIdsToAssociate.Add(identity.Id); } } if (virtualMachineInner.Identity.IdentityIds == null) { virtualMachineInner.Identity.IdentityIds = new List <string>(); } foreach (var identityId in this.userAssignedIdentityIdsToAssociate) { if (!virtualMachineInner.Identity.IdentityIds.Contains(identityId)) { virtualMachineInner.Identity.IdentityIds.Add(identityId); } } foreach (var identityId in this.userAssignedIdentityIdsToRemove) { if (virtualMachineInner.Identity.IdentityIds.Contains(identityId)) { virtualMachineInner.Identity.IdentityIds.Remove(identityId); } } if (virtualMachineInner.Identity.IdentityIds.Any()) { this.installExtensionIfNotInstalled = true; } } finally { this.userAssignedIdentityCreatableKeys.Clear(); this.userAssignedIdentityIdsToAssociate.Clear(); this.userAssignedIdentityIdsToRemove.Clear(); } }
protected IResourceT CreatedResource(string key) { return(CreatorTaskGroup.TaskResult(key)); }
/// <summary> /// Specifies the definition of a not-yet-created user assigned identity to be associated with the VMSS. /// </summary> /// <param name="vmssInner">The VMSS to set the identity.</param> /// <param name="vmTaskGroup">the task group of the virtual machine</param> /// <param name="creatableIdentity">the creatable user assigned identity</param> /// <returns>VirtualMachineScaleSetMsiHelper.</returns> internal VirtualMachineScaleSetMsiHelper WithNewUserAssignedManagedServiceIdentity(VirtualMachineScaleSetInner vmssInner, CreatorTaskGroup<IHasId> vmTaskGroup, ICreatable<IIdentity> creatableIdentity) { if (!this.userAssignedIdentityCreatableKeys.Contains(creatableIdentity.Key)) { this.installExtensionIfNotInstalled = true; InitVMIdentity(vmssInner, ResourceIdentityType.UserAssigned); this.userAssignedIdentityCreatableKeys.Add(creatableIdentity.Key); ((creatableIdentity as IResourceCreator<IHasId>).CreatorTaskGroup).Merge(vmTaskGroup); } return this; }
/// <summary> /// Set user assigned identity ids to the given VMSS inner model /// </summary> /// <param name="vmssInner">the VMSS inner model</param> /// <param name="vmTaskGroup">the VMSS task group</param> internal void HandleUserAssignedIdentities(VirtualMachineScaleSetInner vmssInner, CreatorTaskGroup <IHasId> vmTaskGroup) { try { if (vmssInner.Identity == null || vmssInner.Identity.Type == null) { return; } ResourceIdentityType?parsedIdentityType = ResourceIdentityTypeEnumExtension.ParseResourceIdentityType(vmssInner.Identity.Type); if (parsedIdentityType.Equals(ResourceIdentityType.None) || parsedIdentityType.Equals(ResourceIdentityType.SystemAssigned)) { return; } foreach (var key in this.userAssignedIdentityCreatableKeys) { var identity = (IIdentity)vmTaskGroup.CreatedResource(key); if (!this.userAssignedIdentityIdsToAssociate.Contains(identity.Id)) { this.userAssignedIdentityIdsToAssociate.Add(identity.Id); } } if (vmssInner.Identity.IdentityIds == null) { vmssInner.Identity.IdentityIds = new List <string>(); } foreach (var identityId in this.userAssignedIdentityIdsToAssociate) { if (!vmssInner.Identity.IdentityIds.Contains(identityId)) { vmssInner.Identity.IdentityIds.Add(identityId); } } foreach (var identityId in this.userAssignedIdentityIdsToRemove) { if (vmssInner.Identity.IdentityIds.Contains(identityId)) { vmssInner.Identity.IdentityIds.Remove(identityId); } } } finally { this.userAssignedIdentityCreatableKeys.Clear(); this.userAssignedIdentityIdsToAssociate.Clear(); this.userAssignedIdentityIdsToRemove.Clear(); } }