private async Task WaitForWorkloadInstallation(WorkloadInstance workloadInstance)
        {
            if (!await WorkloadInstanceManager.IsWorkloadInstanceInInstallingState(scaleUnitAosClient, workloadInstance))
            {
                return;
            }

            Console.WriteLine($"Waiting for the {workloadInstance.VersionedWorkload.Workload.Name} workload initial sync to complete");

            int count = 0;

            do
            {
                for (int i = 0; i < 10; i++) // wait 10 seconds before querying the status again.
                {
                    await Task.Delay(TimeSpan.FromSeconds(1));

                    Console.Write(".");
                }

                count++;
                if (count == 12) // After two minutes
                {
                    Console.WriteLine($"\nThis is taking a long time. Ensure the upload packages, for the {workloadInstance.VersionedWorkload.Workload.Name} workload, haven't failed.");
                    Console.WriteLine($"Waiting for the {workloadInstance.VersionedWorkload.Workload.Name} workload initial sync to complete");
                }
            } while (!await WorkloadInstanceManager.IsWorkloadInstanceInReadyState(scaleUnitAosClient, workloadInstance));

            Console.WriteLine();
        }
        public void Sort_MesWesDependOnSys_SysBeforeMesWes()
        {
            // Arrange
            WorkloadInstance w1 = BuildWorkloadInstance(SYS);

            List <string> mesDependencies = new List <string> {
                SYS
            };
            WorkloadInstance w2 = BuildWorkloadInstance(MES, mesDependencies);

            List <string> wesDependencies = new List <string> {
                SYS
            };
            WorkloadInstance w3 = BuildWorkloadInstance(WES, wesDependencies);

            List <WorkloadInstance> workloadInstances = new List <WorkloadInstance>()
            {
                w2, w3, w1
            };

            // Act
            WorkloadInstanceTopologicalSortUtil topologicalSortUtil     = new WorkloadInstanceTopologicalSortUtil(workloadInstances);
            List <WorkloadInstance>             sortedWorkloadInstances = topologicalSortUtil.Sort();

            // Assert
            sortedWorkloadInstances[0].Should().Be(w1);
        }
Example #3
0
        private List <WorkloadInstance> GetSYSWorkloadInstancesPerLegalEntity(Workload workload)
        {
            List <string>           uniqueLegalEntityValues = Config.UniqueLegalEntityValues();
            List <WorkloadInstance> sysWorkloadInstances    = new List <WorkloadInstance>();
            List <string>           sysWorkloadInstanceIds  = Config.SYSWorkloadInstanceIds();
            int count = 0;

            foreach (string legalEntityValue in uniqueLegalEntityValues)
            {
                List <DynamicConstraintValue> sysDynamicConstraintValues = new List <DynamicConstraintValue>();
                DynamicConstraintValue        dynamicConstraintValue     = new DynamicConstraintValue()
                {
                    DomainName = "LegalEntity",
                    Value      = legalEntityValue,
                };

                sysDynamicConstraintValues.Add(dynamicConstraintValue);

                WorkloadInstance workloadInstance = new WorkloadInstance()
                {
                    Id = sysWorkloadInstanceIds[count++],
                    LogicalEnvironmentId = Config.LogicalEnvironmentId,
                    ExecutingEnvironment = new List <TemporalAssignment>()
                    {
                        new TemporalAssignment()
                        {
                            EffectiveDate = DateTime.Now,
                            Environment   = new PhysicalEnvironmentReference()
                            {
                                Id          = Config.ScaleUnitEnvironmentId,
                                Name        = Config.NonHubScaleUnit().ScaleUnitName,
                                ScaleUnitId = Config.NonHubScaleUnit().ScaleUnitId
                            },
                        },
                    },
                    VersionedWorkload = new VersionedWorkload()
                    {
                        Id = Guid.NewGuid().ToString(),
                        PlatformPackageId      = Guid.NewGuid().ToString(),
                        ApplicationPackageId   = Guid.NewGuid().ToString(),
                        CustomizationPackageId = Guid.NewGuid().ToString(),
                        Hash = Config.WorkloadDefinitionHash,
                        LogicalEnvironmentId = Config.LogicalEnvironmentId,
                        Workload             = workload,
                    },
                    DynamicConstraintValues = sysDynamicConstraintValues,
                };

                sysWorkloadInstances.Add(workloadInstance);
            }

            return(sysWorkloadInstances);
        }
        public void Sort_FourElementsWithMultipleDependencies_CorrectSort()
        {
            const string TEST = "Test";

            List <string> sysDependencies = new List <string> {
                MES
            };
            WorkloadInstance w1 = BuildWorkloadInstance(SYS, sysDependencies);

            List <string> mesDependencies = new List <string> {
                TEST
            };
            WorkloadInstance w2 = BuildWorkloadInstance(MES, mesDependencies);

            List <string> wesDependencies = new List <string> {
                SYS, TEST
            };
            WorkloadInstance w3 = BuildWorkloadInstance(WES, wesDependencies);

            WorkloadInstance w4 = BuildWorkloadInstance(TEST);

            List <WorkloadInstance> workloadInstances = new List <WorkloadInstance>()
            {
                w1, w2, w3, w4
            };

            // Act
            WorkloadInstanceTopologicalSortUtil topologicalSortUtil     = new WorkloadInstanceTopologicalSortUtil(workloadInstances);
            List <WorkloadInstance>             sortedWorkloadInstances = topologicalSortUtil.Sort();

            // Assert
            List <WorkloadInstance> expectedSortedList = new List <WorkloadInstance> {
                w4, w2, w1, w3
            };

            for (int i = 0; i < sortedWorkloadInstances.Count; i++)
            {
                sortedWorkloadInstances[i].Should().Be(expectedSortedList[i]);
            }
        }
        public void Sort_ThreeWorkloadInstancesInput_SortedListHasAllWorkloadInstances()
        {
            // Arrange
            WorkloadInstance w1 = BuildWorkloadInstance(SYS);
            WorkloadInstance w2 = BuildWorkloadInstance(MES);
            WorkloadInstance w3 = BuildWorkloadInstance(WES);

            List <WorkloadInstance> workloadInstances = new List <WorkloadInstance>()
            {
                w1, w2, w3
            };

            // Act
            WorkloadInstanceTopologicalSortUtil topologicalSortUtil     = new WorkloadInstanceTopologicalSortUtil(workloadInstances);
            List <WorkloadInstance>             sortedWorkloadInstances = topologicalSortUtil.Sort();

            // Assert
            sortedWorkloadInstances.Should().HaveCount(workloadInstances.Count);
            foreach (var expectedWorkloadInstance in workloadInstances)
            {
                sortedWorkloadInstances.Should().Contain(expectedWorkloadInstance);
            }
        }
Example #6
0
        public static async Task <bool> IsWorkloadInstanceInInstallingState(AOSClient client, WorkloadInstance workloadInstance)
        {
            WorkloadInstanceStatus status = await GetWorkloadInstanceStatus(client, workloadInstance.Id);

            return(status.Health == InstallingState);
        }
Example #7
0
        public async Task <List <WorkloadInstance> > CreateWorkloadInstances()
        {
            if (Config.WorkloadList() == null || Config.WorkloadList().Any() == false)
            {
                throw new Exception("No workload is defined in the UserConfig file.");
            }

            List <Workload> workloads = await client.GetWorkloads();

            List <WorkloadInstance> workloadInstances    = new List <WorkloadInstance>();
            List <WorkloadInstance> sysWorkloadInstances = new List <WorkloadInstance>();

            if (!ValidateIfConfigWorkloadsExistOnClient(workloads))
            {
                throw new Exception("UserConfig file has some workload types which are not found on client.");
            }

            foreach (Workload workload in workloads)
            {
                if (workload.Name.Equals("SYS", StringComparison.OrdinalIgnoreCase))
                {
                    sysWorkloadInstances = GetSYSWorkloadInstancesPerLegalEntity(workload);
                    continue;
                }

                List <ConfiguredDynamicConstraintValue> configuredDynamicConstraintValues;

                foreach (ConfiguredWorkload configuredworkload in Config.WorkloadList())
                {
                    if (configuredworkload.Name.Equals(workload.Name))
                    {
                        configuredDynamicConstraintValues = configuredworkload.ConfiguredDynamicConstraintValues;

                        if (!ValidateDynamicConstraints(configuredworkload.Name, configuredDynamicConstraintValues))
                        {
                            throw new Exception("Expected domainNames of dynamic constraints for " + workload.Name + " don't match with what is in UserConfig file.");
                        }

                        ScaleUnitInstance scaleUnit = Config.FindScaleUnitWithId(configuredworkload.ScaleUnitId);

                        WorkloadInstance workloadInstance = new WorkloadInstance()
                        {
                            Id = configuredworkload.WorkloadInstanceId,
                            LogicalEnvironmentId = Config.LogicalEnvironmentId,
                            ExecutingEnvironment = new List <TemporalAssignment>()
                            {
                                new TemporalAssignment()
                                {
                                    EffectiveDate = DateTime.Now,
                                    Environment   = new PhysicalEnvironmentReference()
                                    {
                                        Id          = Config.ScaleUnitEnvironmentId,
                                        Name        = scaleUnit.ScaleUnitName,
                                        ScaleUnitId = scaleUnit.ScaleUnitId,
                                    },
                                },
                            },
                            VersionedWorkload = new VersionedWorkload()
                            {
                                Id = Guid.NewGuid().ToString(),
                                PlatformPackageId      = Guid.NewGuid().ToString(),
                                ApplicationPackageId   = Guid.NewGuid().ToString(),
                                CustomizationPackageId = Guid.NewGuid().ToString(),
                                Hash = Config.WorkloadDefinitionHash,
                                LogicalEnvironmentId = Config.LogicalEnvironmentId,
                                Workload             = workload,
                            },
                            DynamicConstraintValues = GetConfiguredDynamicConstraintValues(configuredDynamicConstraintValues),
                        };

                        workloadInstances.Add(workloadInstance);
                    }
                }
            }

            WorkloadInstanceTopologicalSortUtil topologicalSortUtil = new WorkloadInstanceTopologicalSortUtil(sysWorkloadInstances.Concat(workloadInstances).ToList());

            return(topologicalSortUtil.Sort());
        }
Example #8
0
 public WorkloadInstanceDFSNode(WorkloadInstance workloadInstance)
 {
     this.workloadInstance = workloadInstance;
     this.inProgress       = false;
 }