Пример #1
0
        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);
        }
Пример #2
0
        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();
     }
 }
Пример #5
0
 protected IResourceT CreatedResource(string key)
 {
     return(CreatorTaskGroup.TaskResult(key));
 }
Пример #6
0
 /// <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;
 }
Пример #7
0
 /// <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();
     }
 }