static async Task Worker( ServiceClientCredentials credentials, string subid, string rgName, string namePrefix, string sshKeyData, LatencyInfo latencyInfo) { Console.WriteLine($"Creating/Update Network {namePrefix}_nic..."); var nic = await ResourceHelper.CreateNicAsync(credentials, subid, rgName, DefaultLocation, namePrefix + "_nic"); Console.WriteLine($"Creating/Update AvailabilitySet {namePrefix}_aSet ..."); var aset = await ResourceHelper.CreateAvailabilitySetAsync(credentials, subid, rgName, DefaultLocation, namePrefix + "_aSet"); var startTime = DateTime.UtcNow; Console.WriteLine($"Creating/Update VM {namePrefix}_vm...\t\t{DateTime.UtcNow.ToLongTimeString()}"); var response = await ResourceHelper.CreateVmAsync(credentials, subid, rgName, DefaultLocation, $"{namePrefix}_vm", aset.Id, nic.Id, sshKeyData); latencyInfo.Latency = DateTime.UtcNow - startTime; latencyInfo.ProvisioningState = response.Body.ProvisioningState; Console.WriteLine($"\t Done Creating/Update VM {namePrefix}_vm. \t\t{latencyInfo.Latency.TotalSeconds} sec"); }
static async Task ScenarioHandler( string namePrefix, int count, bool isSequential) { var clientId = Environment.GetEnvironmentVariable(ClientId); var clientSecret = Environment.GetEnvironmentVariable(ClientSecret); var subid = Environment.GetEnvironmentVariable(SubscriptionId); var rgName = namePrefix + "_rg"; if (CheckMissingParam(namePrefix, nameof(namePrefix)) || CheckMissingParam(clientId, ClientId) || CheckMissingParam(clientSecret, ClientSecret) || CheckMissingParam(subid, SubscriptionId)) { return; } var userFolder = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); var sshKeyFile = Path.Combine(userFolder, ".ssh/id_rsa.pub"); if (!File.Exists(sshKeyFile)) { Console.WriteLine($"SSH public key file {sshKeyFile} not found. Please follow https://docs.microsoft.com/en-us/azure/virtual-machines/linux/create-ssh-keys-detailed to create the SSH key file"); return; } var sshKeyData = File.ReadAllText(sshKeyFile); Console.Write($"Logging in with Cliend Id: {clientId} ..."); var credentials = await ApplicationTokenProvider.LoginSilentAsync("microsoft.com", clientId, clientSecret); Console.WriteLine("\t Done"); Console.Write($"Creating/Update ResourceGroup {rgName} ..."); await ResourceHelper.CreateResourceGroupAsync(credentials, subid, rgName, DefaultLocation); Console.WriteLine("\t Done"); Console.WriteLine($"Start VM creation in {(isSequential ? "Sequential" : "Parallel")} mode."); var overallStart = DateTime.UtcNow; var taskList = new List <Task>(); var result = new List <LatencyInfo>(); for (int i = 0; i < count; i++) { var name = $"{namePrefix}_{i}"; var latency = new LatencyInfo() { Name = name }; if (isSequential) { await Worker(credentials, subid, rgName, name, sshKeyData, latency); } else { taskList.Add(Task.Run(async() => await Worker(credentials, subid, rgName, name, sshKeyData, latency))); } result.Add(latency); } await Task.WhenAll(taskList); // Dump result Console.WriteLine("-------------- Overall Summary ---------------"); Console.WriteLine($"\t Started at {overallStart} taking {(DateTime.UtcNow-overallStart).TotalSeconds:F2} seconds."); Console.WriteLine("-------------- Latency Result ---------------"); Console.WriteLine("Name\t\tLatency(sec)\tState"); foreach (var l in result) { Console.WriteLine($"{l.Name}\t\t{l.Latency.TotalSeconds:F2}\t\t{l.ProvisioningState}"); } }