File: CloudFormation\CloudFormationTemplateResource.cs
Web Access
Project: src\src\Aspire.Hosting.AWS\Aspire.Hosting.AWS.csproj (Aspire.Hosting.AWS)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Aspire.Hosting.Publishing;
using Aspire.Hosting.Utils;
 
namespace Aspire.Hosting.AWS.CloudFormation;
 
/// <inheritdoc cref="Aspire.Hosting.AWS.CloudFormation.ICloudFormationTemplateResource" />
internal class CloudFormationTemplateResource(string name, string stackName, string templatePath) : CloudFormationResource(name, stackName), ICloudFormationTemplateResource
{
    /// <inheritdoc/>
    public string TemplatePath { get; } = templatePath;
 
    /// <inheritdoc/>
    public string? RoleArn { get; set; }
 
    /// <inheritdoc/>
    public int StackPollingInterval { get; set; } = 3;
 
    /// <inheritdoc/>
    public bool DisableDiffCheck { get; set; }
 
    /// <inheritdoc/>
    public IList<string> DisabledCapabilities { get; } = [];
 
    public IDictionary<string, string> CloudFormationParameters { get; } = new Dictionary<string, string>();
 
    /// <inheritdoc/>
    public ICloudFormationTemplateResource AddParameter(string parameterName, string parameterValue)
    {
        CloudFormationParameters[parameterName] = parameterValue;
        return this;
    }
 
    internal override void WriteToManifest(ManifestPublishingContext context)
    {
        context.Writer.WriteString("type", "aws.cloudformation.template.v0");
        context.Writer.TryWriteString("stack-name", StackName);
        context.Writer.TryWriteString("template-path", context.GetManifestRelativePath(TemplatePath));
 
        context.Writer.WritePropertyName("references");
        context.Writer.WriteStartArray();
        foreach (var cloudFormationResource in Annotations.OfType<CloudFormationReferenceAnnotation>())
        {
            context.Writer.WriteStartObject();
            context.Writer.WriteString("target-resource", cloudFormationResource.TargetResource);
            context.Writer.WriteEndObject();
        }
        context.Writer.WriteEndArray();
    }
}