/// <summary> /// Serializes the object to JSON. /// </summary> /// <param name="writer">The <see cref="T: Newtonsoft.Json.JsonWriter" /> to write to.</param> /// <param name="obj">The object to serialize to JSON.</param> internal static void Serialize(JsonWriter writer, StatelessServiceUpdateDescription obj) { // Required properties are always serialized, optional properties are serialized when not null. writer.WriteStartObject(); writer.WriteProperty(obj.ServiceKind, "ServiceKind", ServiceKindConverter.Serialize); writer.WriteProperty(obj.DefaultMoveCost, "DefaultMoveCost", MoveCostConverter.Serialize); if (obj.Flags != null) { writer.WriteProperty(obj.Flags, "Flags", JsonWriterExtensions.WriteStringValue); } if (obj.PlacementConstraints != null) { writer.WriteProperty(obj.PlacementConstraints, "PlacementConstraints", JsonWriterExtensions.WriteStringValue); } if (obj.CorrelationScheme != null) { writer.WriteEnumerableProperty(obj.CorrelationScheme, "CorrelationScheme", ServiceCorrelationDescriptionConverter.Serialize); } if (obj.LoadMetrics != null) { writer.WriteEnumerableProperty(obj.LoadMetrics, "LoadMetrics", ServiceLoadMetricDescriptionConverter.Serialize); } if (obj.ServicePlacementPolicies != null) { writer.WriteEnumerableProperty(obj.ServicePlacementPolicies, "ServicePlacementPolicies", ServicePlacementPolicyDescriptionConverter.Serialize); } if (obj.ScalingPolicies != null) { writer.WriteEnumerableProperty(obj.ScalingPolicies, "ScalingPolicies", ScalingPolicyDescriptionConverter.Serialize); } if (obj.InstanceCount != null) { writer.WriteProperty(obj.InstanceCount, "InstanceCount", JsonWriterExtensions.WriteIntValue); } if (obj.MinInstanceCount != null) { writer.WriteProperty(obj.MinInstanceCount, "MinInstanceCount", JsonWriterExtensions.WriteIntValue); } if (obj.MinInstancePercentage != null) { writer.WriteProperty(obj.MinInstancePercentage, "MinInstancePercentage", JsonWriterExtensions.WriteIntValue); } if (obj.InstanceCloseDelayDurationSeconds != null) { writer.WriteProperty(obj.InstanceCloseDelayDurationSeconds, "InstanceCloseDelayDurationSeconds", JsonWriterExtensions.WriteStringValue); } writer.WriteEndObject(); }
public override async Task Execute(TriggerItem triggerItem) { var serviceDescription = new StatelessServiceUpdateDescription() { InstanceCount = TargetNumInstances }; await _fabricClient.ServiceManager.UpdateServiceAsync(triggerItem.Service.Properties.ServiceName, serviceDescription); }
/// <inheritdoc/> protected override void ProcessRecordInternal() { ServiceUpdateDescription serviceUpdateDescription = null; if (this.Stateful.IsPresent) { serviceUpdateDescription = new StatefulServiceUpdateDescription( flags: this.Flags, placementConstraints: this.PlacementConstraints, correlationScheme: this.CorrelationScheme, loadMetrics: this.LoadMetrics, servicePlacementPolicies: this.ServicePlacementPolicies, defaultMoveCost: this.DefaultMoveCost, scalingPolicies: this.ScalingPolicies, serviceDnsName: this.ServiceDnsName, tagsForPlacement: this.TagsForPlacement, tagsForRunning: this.TagsForRunning, targetReplicaSetSize: this.TargetReplicaSetSize, minReplicaSetSize: this.MinReplicaSetSize, replicaRestartWaitDurationSeconds: this.ReplicaRestartWaitDurationSeconds, quorumLossWaitDurationSeconds: this.QuorumLossWaitDurationSeconds, standByReplicaKeepDurationSeconds: this.StandByReplicaKeepDurationSeconds, servicePlacementTimeLimitSeconds: this.ServicePlacementTimeLimitSeconds, dropSourceReplicaOnMove: this.DropSourceReplicaOnMove, replicaLifecycleDescription: this.ReplicaLifecycleDescription, auxiliaryReplicaCount: this.AuxiliaryReplicaCount); } else if (this.Stateless.IsPresent) { serviceUpdateDescription = new StatelessServiceUpdateDescription( flags: this.Flags, placementConstraints: this.PlacementConstraints, correlationScheme: this.CorrelationScheme, loadMetrics: this.LoadMetrics, servicePlacementPolicies: this.ServicePlacementPolicies, defaultMoveCost: this.DefaultMoveCost, scalingPolicies: this.ScalingPolicies, serviceDnsName: this.ServiceDnsName, tagsForPlacement: this.TagsForPlacement, tagsForRunning: this.TagsForRunning, instanceCount: this.InstanceCount, minInstanceCount: this.MinInstanceCount, minInstancePercentage: this.MinInstancePercentage, instanceCloseDelayDurationSeconds: this.InstanceCloseDelayDurationSeconds, instanceLifecycleDescription: this.InstanceLifecycleDescription, instanceRestartWaitDurationSeconds: this.InstanceRestartWaitDurationSeconds); } this.ServiceFabricClient.Services.UpdateServiceAsync( serviceId: this.ServiceId, serviceUpdateDescription: serviceUpdateDescription, serverTimeout: this.ServerTimeout, cancellationToken: this.CancellationToken).GetAwaiter().GetResult(); Console.WriteLine("Success!"); }
public string Get(int id) { using (var client = new FabricClient()) { var services = client.QueryManager.GetServiceListAsync(new Uri("fabric:/minecraft")).Result; var service = services.FirstOrDefault(e => e.ServiceName.AbsolutePath.Contains("minecraft")); var updateDescription = new StatelessServiceUpdateDescription(); updateDescription.InstanceCount = id; client.ServiceManager.UpdateServiceAsync(new Uri(service.ServiceName.AbsoluteUri), updateDescription); } return("value"); }
protected override void ProcessRecord() { ServiceGroupUpdateDescription serviceGroupUpdateDescription = new ServiceGroupUpdateDescription(); if (this.Stateful) { var statefulServiceUpdateDescription = new StatefulServiceUpdateDescription(); if (this.TargetReplicaSetSize.HasValue) { statefulServiceUpdateDescription.TargetReplicaSetSize = this.TargetReplicaSetSize.Value; } if (this.MinReplicaSetSize.HasValue) { statefulServiceUpdateDescription.MinReplicaSetSize = this.MinReplicaSetSize.Value; } if (this.ReplicaRestartWaitDuration.HasValue) { statefulServiceUpdateDescription.ReplicaRestartWaitDuration = this.ReplicaRestartWaitDuration.Value; } if (this.QuorumLossWaitDuration.HasValue) { statefulServiceUpdateDescription.QuorumLossWaitDuration = this.QuorumLossWaitDuration.Value; } serviceGroupUpdateDescription.ServiceUpdateDescription = statefulServiceUpdateDescription; } else { var statelessServiceUpdateDescription = new StatelessServiceUpdateDescription(); if (this.InstanceCount.HasValue) { statelessServiceUpdateDescription.InstanceCount = this.InstanceCount.Value; } serviceGroupUpdateDescription.ServiceUpdateDescription = statelessServiceUpdateDescription; } if (this.ShouldProcess(this.ServiceName.OriginalString)) { if (this.Force || this.ShouldContinue(string.Empty, string.Empty)) { this.UpdateServiceGroup(this.ServiceName, serviceGroupUpdateDescription); } } }
protected StatelessServiceUpdateDescription GetStatelessServiceUpdateDescription( int?instanceCount, string[] metrics, string[] correlations, string[] placementPolicies, string placementConstraints, string defaultMoveCost, string[] partitionNamesToAdd, string[] partitionNamesToRemove, List <ScalingPolicyDescription> scalingPolicies) { var statelessServiceUpdateDescription = new StatelessServiceUpdateDescription(); if (instanceCount.HasValue) { statelessServiceUpdateDescription.InstanceCount = instanceCount.Value; } if (placementConstraints != null) { statelessServiceUpdateDescription.PlacementConstraints = placementConstraints; } if (metrics != null) { statelessServiceUpdateDescription.Metrics = new KeyedItemCollection <string, ServiceLoadMetricDescription>(d => d.Name); foreach (var str in metrics) { statelessServiceUpdateDescription.Metrics.Add(ServiceCmdletBase.ParseStatelessMetric(str)); } } if (defaultMoveCost != null) { statelessServiceUpdateDescription.DefaultMoveCost = ServiceCmdletBase.ParseMoveCost(defaultMoveCost); } if (correlations != null) { statelessServiceUpdateDescription.Correlations = new List <ServiceCorrelationDescription>(); foreach (var str in correlations) { statelessServiceUpdateDescription.Correlations.Add(ServiceCmdletBase.ParseCorrelation(str)); } } if (placementPolicies != null) { statelessServiceUpdateDescription.PlacementPolicies = new List <ServicePlacementPolicyDescription>(); foreach (var str in placementPolicies) { statelessServiceUpdateDescription.PlacementPolicies.Add(ServiceCmdletBase.ParsePlacementPolicy(str)); } } if ((partitionNamesToAdd != null && partitionNamesToAdd.Length > 0) || (partitionNamesToRemove != null && partitionNamesToRemove.Length > 0)) { statelessServiceUpdateDescription.RepartitionDescription = new NamedRepartitionDescription( partitionNamesToAdd, partitionNamesToRemove); } if (scalingPolicies != null) { statelessServiceUpdateDescription.ScalingPolicies = new List <ScalingPolicyDescription>(); foreach (var scale in scalingPolicies) { statelessServiceUpdateDescription.ScalingPolicies.Add(scale); } } return(statelessServiceUpdateDescription); }
private ServiceUpdateDescription CreateServiceUpdateDescription(ServiceOperationDescription serviceOperationDescription) { string errorMessage; ServiceUpdateDescription serviceUpdateDescription; switch (serviceOperationDescription.ServiceKind) { case ArmServiceKind.Stateful: if (!this.ValidObjectType <StatefulServiceOperationDescription>(serviceOperationDescription, out errorMessage)) { throw new InvalidCastException(errorMessage); } var statefulOperation = (StatefulServiceOperationDescription)serviceOperationDescription; serviceUpdateDescription = new StatefulServiceUpdateDescription() { MinReplicaSetSize = statefulOperation.MinReplicaSetSize, QuorumLossWaitDuration = statefulOperation.QuorumLossWaitDuration, ReplicaRestartWaitDuration = statefulOperation.ReplicaRestartWaitDuration, StandByReplicaKeepDuration = statefulOperation.StandByReplicaKeepDuration, TargetReplicaSetSize = statefulOperation.TargetReplicaSetSize }; break; case ArmServiceKind.Stateless: if (!this.ValidObjectType <StatelessServiceOperationDescription>(serviceOperationDescription, out errorMessage)) { throw new InvalidCastException(errorMessage); } var statelessOperation = (StatelessServiceOperationDescription)serviceOperationDescription; serviceUpdateDescription = new StatelessServiceUpdateDescription() { InstanceCount = statelessOperation.InstanceCount }; break; default: throw new ArgumentOutOfRangeException( nameof(serviceOperationDescription.ServiceKind), serviceOperationDescription.ServiceKind, $"{this.TraceType}: Unexpected ArmServiceKind"); } if (serviceOperationDescription.DefaultMoveCost.HasValue) { serviceUpdateDescription.DefaultMoveCost = (MoveCost)Enum.Parse( typeof(MoveCost), serviceOperationDescription.DefaultMoveCost.Value.ToString()); } serviceUpdateDescription.PlacementConstraints = serviceOperationDescription.PlacementConstraints; if (serviceOperationDescription.CorrelationScheme != null) { serviceUpdateDescription.Correlations = new List <ServiceCorrelationDescription>(); foreach (var scheme in serviceOperationDescription.CorrelationScheme) { serviceUpdateDescription.Correlations.Add(this.GetServiceCorrelationDescription(scheme)); } } if (serviceOperationDescription.ServiceLoadMetrics != null) { serviceUpdateDescription.Metrics = new KeyedItemCollection <string, ServiceLoadMetricDescription>(n => n.Name); foreach (var metric in serviceOperationDescription.ServiceLoadMetrics) { serviceUpdateDescription.Metrics.Add(this.GetServiceLoadMetricDescription(metric)); } } if (serviceOperationDescription.ServicePlacementPolicies != null) { serviceUpdateDescription.PlacementPolicies = new List <ServicePlacementPolicyDescription>(); foreach (var policy in serviceOperationDescription.ServicePlacementPolicies) { serviceUpdateDescription.PlacementPolicies.Add(this.GetServicePlacementPolicyDescription(policy)); } } return(serviceUpdateDescription); }