File: Resources\ServiceNodes\Swarm\Deploy.cs
Web Access
Project: src\src\Aspire.Hosting.Docker\Aspire.Hosting.Docker.csproj (Aspire.Hosting.Docker)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using YamlDotNet.Serialization;
 
namespace Aspire.Hosting.Docker.Resources.ServiceNodes.Swarm;
 
/// <summary>
/// Represents the deployment configuration for a Docker service. This class is used to define various aspects such as replication, mode, resource constraints, updates, and restart policies.
/// </summary>
[YamlSerializable]
public sealed class Deploy
{
    /// <summary>
    /// Represents the number of task replicas for a service node deployment.
    /// The replicas define the desired count of independently running instances
    /// of the service within the deployment.
    /// </summary>
    [YamlMember(Alias = "replicas")]
    public int? Replicas { get; set; }
 
    /// <summary>
    /// Gets or sets the deployment mode for the service.
    /// Specifies how tasks are scheduled on nodes.
    /// Common values include "replicated" for distributing tasks across nodes
    /// or "global" for running a task on every node in the cluster.
    /// </summary>
    [YamlMember(Alias = "mode")]
    public string? Mode { get; set; }
 
    /// <summary>
    /// Represents the resource configurations for a deployable service within Docker.
    /// </summary>
    /// <remarks>
    /// The <c>Resources</c> class is used to define resources such as CPU and memory
    /// that are allocated to or reserved for a service. It includes configurations for
    /// both resource limits and reservations.
    /// </remarks>
    /// <seealso cref="ResourceSpec"/>
    [YamlMember(Alias = "resources")]
    public Resources? Resources { get; set; }
 
    /// <summary>
    /// Specifies the placement constraints and preferences for service deployment.
    /// </summary>
    /// <remarks>
    /// The <c>Placement</c> property defines the rules for how the service should be placed
    /// on nodes within a Docker Swarm. This includes constraints that must be satisfied
    /// and preferences to guide the scheduler.
    /// </remarks>
    [YamlMember(Alias = "placement")]
    public Placement? Placement { get; set; }
 
    /// <summary>
    /// Represents the update configuration used during service deployments.
    /// </summary>
    /// <remarks>
    /// The <c>UpdateConfig</c> property defines the parameters associated with updating services.
    /// It allows configuration of update behavior such as parallelism, delays, failure actions, and monitoring.
    /// </remarks>
    /// <seealso cref="Swarm.UpdateConfig"/>
    [YamlMember(Alias = "update_config")]
    public UpdateConfig? UpdateConfig { get; set; }
 
    /// <summary>
    /// Specifies the restart policy for a Docker service.
    /// </summary>
    /// <remarks>
    /// The RestartPolicy defines conditions under which the service containers
    /// will be restarted, as well as parameters like delay between restarts,
    /// maximum restart attempts, and a time window for evaluating restart conditions.
    /// </remarks>
    /// <seealso cref="Swarm.RestartPolicy.Condition"/>
    /// <seealso cref="Swarm.RestartPolicy.Delay"/>
    /// <seealso cref="Swarm.RestartPolicy.MaxAttempts"/>
    /// <seealso cref="Swarm.RestartPolicy.Window"/>
    [YamlMember(Alias = "restart_policy")]
    public RestartPolicy? RestartPolicy { get; set; }
 
    /// <summary>
    /// Represents the label configurations for a deployable service in Docker.
    /// </summary>
    /// <remarks>
    /// This property is used to define additional metadata, typically in the form of key-value pairs,
    /// that can be attached to services for organizational or descriptive purposes.
    /// </remarks>
    [YamlMember(Alias = "labels")]
    public LabelSpecs? Labels { get; set; }
}