public Task<int> GetCurrentInstanceCount(AzureCurrentDeployment currentDeployment, string roleName, CancellationToken cancellationToken) { var client = HttpClientFactory.Create(_subscriptionId, _certificate); var completionSource = new TaskCompletionSource<int>(); currentDeployment.Discover(cancellationToken).ContinuePropagateWith( completionSource, cancellationToken, discoveryTask => DoGetDeploymentConfiguration(client, discoveryTask.Result.HostedServiceName, discoveryTask.Result.DeploymentName, cancellationToken).ContinuePropagateWith( completionSource, cancellationToken, queryTask => completionSource.TrySetResult(Int32.Parse(GetInstanceCountConfigElement(queryTask.Result, roleName).Value)))); completionSource.Task.ContinueRaiseSystemEventOnFault(_observer, EventForFailedOperation); return completionSource.Task; }
/// <summary>IoC constructor.</summary> public CloudProvisioning(ICloudConfigurationSettings settings, ILog log, ICloudProvisioningObserver provisioningObserver = null) { _log = log; // try get settings and certificate if (!CloudEnvironment.IsAvailable) { _log.WarnFormat("Provisioning: RoleEnvironment not available on worker {0}.", CloudEnvironment.PartitionKey); return; } var currentDeploymentPrivateId = CloudEnvironment.AzureDeploymentId; Maybe<X509Certificate2> certificate = Maybe<X509Certificate2>.Empty; if (!String.IsNullOrWhiteSpace(settings.SelfManagementCertificateThumbprint)) { certificate = CloudEnvironment.GetCertificate(settings.SelfManagementCertificateThumbprint); } // early evaluate management status for intrinsic fault states, to skip further processing if (!currentDeploymentPrivateId.HasValue || !certificate.HasValue || string.IsNullOrWhiteSpace(settings.SelfManagementSubscriptionId)) { _log.DebugFormat("Provisioning: Not available because either the certificate or the subscription was not provided correctly."); return; } // detect dev fabric if (currentDeploymentPrivateId.Value.StartsWith("deployment(")) { _log.DebugFormat("Provisioning: Not available in dev fabric instance '{0}'.", CloudEnvironment.AzureCurrentInstanceId.GetValue("N/A")); return; } // ok _provisioning = new AzureProvisioning(settings.SelfManagementSubscriptionId, certificate.Value, provisioningObserver); _currentDeployment = new AzureCurrentDeployment(currentDeploymentPrivateId.Value, settings.SelfManagementSubscriptionId, certificate.Value, provisioningObserver); }
public Task<int> GetCurrentLokadCloudWorkerCount(AzureCurrentDeployment currentDeployment, CancellationToken cancellationToken) { return GetCurrentInstanceCount(currentDeployment, "Lokad.Cloud.WorkerRole", cancellationToken); }
public Task UpdateCurrentInstanceCount(AzureCurrentDeployment currentDeployment, string roleName, int instanceCount, CancellationToken cancellationToken) { var client = HttpClientFactory.Create(_subscriptionId, _certificate); var completionSource = new TaskCompletionSource<HttpStatusCode>(); currentDeployment.Discover(cancellationToken) .ContinuePropagateWith(completionSource, cancellationToken, discoveryTask => DoGetDeploymentConfiguration(client, discoveryTask.Result.HostedServiceName, discoveryTask.Result.DeploymentName, cancellationToken) .ContinuePropagateWith(completionSource, cancellationToken, queryTask => { var config = queryTask.Result; if (!UpdateInstanceCountConfig(config, roleName, instanceCount)) { completionSource.TrySetResult(HttpStatusCode.NotModified); return; } DoUpdateDeploymentConfiguration(client, discoveryTask.Result.HostedServiceName, discoveryTask.Result.DeploymentName, config, cancellationToken) .ContinuePropagateWith(completionSource, cancellationToken, updateTask => completionSource.TrySetResult(updateTask.Result)); })); completionSource.Task.ContinueRaiseSystemEventOnFault(_observer, EventForFailedOperation); return completionSource.Task; }