Ejemplo n.º 1
0
        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");
        }
Ejemplo n.º 2
0
        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}");
            }
        }