示例#1
0
        private Task <HostedServiceGetDetailedResponse> CreateGetDetailedResponse(string serviceName)
        {
            var service = Services.FirstOrDefault(s => s.Name == serviceName);
            Task <HostedServiceGetDetailedResponse> resultTask;

            if (service != null)
            {
                var response = new HostedServiceGetDetailedResponse
                {
                    ServiceName = service.Name,
                    StatusCode  = HttpStatusCode.OK,
                };
                if (service.ProductionDeployment != null)
                {
                    response.Deployments.Add(CreateDeploymentResponse(service.ProductionDeployment));
                }

                if (service.StagingDeployment != null)
                {
                    response.Deployments.Add(CreateDeploymentResponse(service.StagingDeployment));
                }
                resultTask = Tasks.FromResult(response);
            }
            else
            {
                resultTask = Tasks.FromException <HostedServiceGetDetailedResponse>(ClientMocks.Make404Exception());
            }
            return(resultTask);
        }
示例#2
0
        public async Task <Byte[]> GetRdpAsync(string virtualMachineName, string cloudServiceName)
        {
            VirtualMachineGetRemoteDesktopFileResponse response = null;

            using (var computeClient = new ComputeManagementClient(_credentials))
            {
                var VMOperations = computeClient.VirtualMachines;
                var details      = await computeClient.HostedServices.GetDetailedAsync(cloudServiceName);

                HostedServiceGetDetailedResponse cs = await computeClient.HostedServices.GetDetailedAsync(cloudServiceName);

                Console.WriteLine("Found cloud service: " + cloudServiceName);

                Console.WriteLine("Fetching deployment.");
                //var deployment = cs.Deployments.ToList().First(x => x.Name == virtualMachineName);
                var deployment = cs.Deployments.ToList().First(x => x.Name == "brent1");

                if (deployment != null)
                {
                    response = await VirtualMachineOperationsExtensions.GetRemoteDesktopFileAsync(VMOperations, cloudServiceName, deployment.Name, virtualMachineName);
                }
            }

            return(response.RemoteDesktopFile);
        }
示例#3
0
        private void VerifyDeploymentExists(HostedServiceGetDetailedResponse cloudService, DeploymentSlot slot)
        {
            bool exists = false;

            if (cloudService.Deployments != null)
            {
                exists = cloudService.Deployments.Any(d => d.DeploymentSlot == slot);
            }

            if (!exists)
            {
                throw new Exception(string.Format(Resources.CannotFindDeployment, cloudService.ServiceName, slot));
            }
        }
示例#4
0
        private bool DeploymentExists(string name, DeploymentSlot slot)
        {
            HostedServiceGetDetailedResponse cloudService = GetCloudService(name);

            try
            {
                VerifyDeploymentExists(cloudService, slot);
                return(true);
            }
            catch (Exception)
            {
                return(false);
            }
        }
示例#5
0
        private void SetCloudServiceState(string name, DeploymentSlot slot, CloudServiceState state)
        {
            HostedServiceGetDetailedResponse cloudService = GetCloudService(name);

            VerifyDeploymentExists(cloudService, slot);
            ComputeClient.Deployments.UpdateStatusByDeploymentSlot(cloudService.ServiceName,
                                                                   slot, new DeploymentUpdateStatusParameters
            {
                Status =
                    state == CloudServiceState.Start
                            ? UpdatedDeploymentStatus.Running
                            : UpdatedDeploymentStatus.Suspended
            });
        }
 private bool DeploymentExists(string name, DeploymentSlot slot, out string deploymentName)
 {
     HostedServiceGetDetailedResponse cloudService = GetCloudService(name);
     deploymentName = null;
     try
     {
         VerifyDeploymentExists(cloudService, slot, out deploymentName);
         return true;
     }
     catch (Exception)
     {
         return false;
     }
 }
        private void VerifyDeploymentExists(HostedServiceGetDetailedResponse cloudService, DeploymentSlot slot)
        {
            bool exists = false;

            if (cloudService.Deployments != null)
            {
                exists = cloudService.Deployments.Any(d => d.DeploymentSlot == slot );
            }

            if (!exists)
            {
                throw new Exception(string.Format(Resources.CannotFindDeployment, cloudService.ServiceName, slot));
            }
            
        }
示例#8
0
        /// <summary>
        /// Writes selected fields of the give HostedServiceGetDetailedResponse
        /// object out to the console.
        /// </summary>
        /// <param name="service">
        /// The HostedServiceGetDetailedResponse object to display.
        /// </param>
        private static void DisplayServiceInformation(HostedServiceGetDetailedResponse service)
        {
            Console.WriteLine("Service Name {0}:", service.ServiceName);

            Console.WriteLine("  Date Created = {0}", service.Properties.DateCreated);
            Console.WriteLine("  Date Last Modified = {0}", service.Properties.DateLastModified);
            Console.WriteLine("  Description = {0}", service.Properties.Description);
            Console.WriteLine("  Label = {0}", service.Properties.Label);
            Console.WriteLine("  Location = {0}", service.Properties.Location);
            Console.WriteLine("  Status = {0}", service.Properties.Status);

#if false
            foreach (string size in service.ComputeCapabilities.VirtualMachinesRoleSizes)
            {
                Console.WriteLine("VM Role Size = {0}", size);
            }

            Console.WriteLine("URI = {0}", service.Uri);
#endif

            if (service.Deployments.Count == 0)
            {
                Console.WriteLine("  No current deployments!");
            }

            foreach (HostedServiceGetDetailedResponse.Deployment deployment in service.Deployments)
            {
                Console.WriteLine();
                Console.WriteLine("  Deployment Name {0}:", deployment.Name);
                Console.WriteLine("    Created = {0}", deployment.CreatedTime);
                Console.WriteLine("    Label = {0}", deployment.Label);
                Console.WriteLine("    Slot = {0}", deployment.DeploymentSlot);
                Console.WriteLine("    Status = {0}", deployment.Status);
                Console.WriteLine("    Instances = {0}", deployment.RoleInstances.Count);
                ////Console.WriteLine(deployment.Configuration);
            }
        }
示例#9
0
        /// <summary>
        /// Main program entry point.
        /// </summary>
        /// <param name="args">The parameter is unused.</param>
        private static void Main(string[] args)
        {
            Console.WriteLine();

            // Set some defaults.
            string packageFilename       = DefaultPackageFilename;
            string configurationFilename = DefaultConfigurationFilename;
            int    instanceCount         = DefaultInstanceCount;
            string command = "status";

            // Parse command line arguments.
            if (args.Length > 0)
            {
                command = args[0].ToLower();

                if (args.Length > 1)
                {
                    if (command == "start")
                    {
                        if (!int.TryParse(args[1], out instanceCount))
                        {
                            Usage(-1);
                        }
                    }
                    else
                    {
                        packageFilename = args[1];
                    }

                    if (args.Length > 2)
                    {
                        configurationFilename = args[2];
                    }
                }
            }

            // Get our Azure account information.
            AzureAccount azureAccount = GetOurAzureAccount();

            // Perform user requested action.
            CloudBlockBlob packageBlob;

            switch (command)
            {
            case "create":
                azureAccount.CreateServiceSpecification(NuBuildServiceName, "West US");
                break;

            case "deploy":
                // Upload our package (.cspkg file) to a blob.
                // We name the blob after the package filename.
                string blobName = Path.GetFileNameWithoutExtension(packageFilename);
                packageBlob = GetPackageBlob(azureAccount, blobName);
                packageBlob.UploadFromFile(packageFilename, System.IO.FileMode.Open);

                // Create a new deployment using the desired package blob.
                // TODO: Provide an unique name for each deployment?
                // REVIEW: Upload to "Staging" slot instead?
                string configuration = File.ReadAllText(configurationFilename);
                azureAccount.DeployService(NuBuildServiceName, "Production", DeploymentSlot.Production, configuration, packageBlob.Uri, startImmediately: true);

                Console.WriteLine("Issued deployment request");
                break;

            case "start":
                // Create a new deployment using a hard-coded configuration and a previously uploaded blob.
                ServiceConfiguration config = new ServiceConfiguration(
                    NuBuildServiceName,
                    "4",
                    "*",
                    "2014-06.2.4",
                    "CloudExecutionWorker",
                    instanceCount);
                packageBlob = GetPackageBlob(azureAccount, NuBuildServicePackageName);
                azureAccount.DeployService(NuBuildServiceName, "Production", DeploymentSlot.Production, config.ToXml(), packageBlob.Uri, startImmediately: true);

                Console.WriteLine("Issued deployment request");
                break;

            case "status":
                HostedServiceGetDetailedResponse serviceInfo = azureAccount.GetServiceInformation(NuBuildServiceName);
                DisplayServiceInformation(serviceInfo);
                break;

            case "stop":
                // Delete the Azure deployment.
                // This stops the currently running service, but leaves the
                // configuration for this service in the Azure database.
                azureAccount.DeleteDeployment(NuBuildServiceName, DeploymentSlot.Production);
                break;

            case "test":
                ////azureAccount.TestSomething();

                ServiceConfiguration testConfig = new ServiceConfiguration(NuBuildServiceName, "4", "*", "2014-06.2.4", "CloudExecutionWorker", 42);
                Console.WriteLine(testConfig.ToXml());
                break;

            case "upload":
                // Upload our package (.cspkg file) to a blob.
                packageBlob = GetPackageBlob(azureAccount, NuBuildServicePackageName);
                packageBlob.UploadFromFile(packageFilename, System.IO.FileMode.Open);
                Console.WriteLine("Uploaded package");
                break;

            case "/?":
            case "help":
                Usage(0);
                break;

            default:
                Usage(-1);
                break;
            }
        }
        private Task<HostedServiceGetDetailedResponse> CreateGetDetailedResponse(string serviceName)
        {
            var service = Services.FirstOrDefault(s => s.Name == serviceName);
            Task<HostedServiceGetDetailedResponse> resultTask;

            if (service != null)
            {
                var response = new HostedServiceGetDetailedResponse
                {
                    ServiceName = service.Name,
                    StatusCode = HttpStatusCode.OK,
                };
                if (service.ProductionDeployment != null)
                {
                    response.Deployments.Add(CreateDeploymentResponse(service.ProductionDeployment));
                }

                if (service.StagingDeployment != null)
                {
                    response.Deployments.Add(CreateDeploymentResponse(service.StagingDeployment));
                }
                resultTask = Tasks.FromResult(response);
            }
            else
            {
                resultTask = Tasks.FromException<HostedServiceGetDetailedResponse>(ClientMocks.Make404Exception());
            }
            return resultTask;
        }