internal class CloudFormationTemplateResource()

in src/Aspire.Hosting.AWS/CloudFormation/CloudFormationTemplateResource.cs [9:51]


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();
    }
}