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); }
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); } }
public static async Task <bool> IsWorkloadInstanceInInstallingState(AOSClient client, WorkloadInstance workloadInstance) { WorkloadInstanceStatus status = await GetWorkloadInstanceStatus(client, workloadInstance.Id); return(status.Health == InstallingState); }
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()); }
public WorkloadInstanceDFSNode(WorkloadInstance workloadInstance) { this.workloadInstance = workloadInstance; this.inProgress = false; }