import * as imagebuilder from "@distilled.cloud/aws/imagebuilder";
import * as Provider from "../../Provider.ts";
import { Resource } from "../../Resource.ts";
import type { Providers } from "../Providers.ts";
declare const ImageRecipeVersionImmutable_base: new = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
readonly _tag: "AWS::ImageBuilder::ImageRecipeVersionImmutable";
} & Readonly;
/**
* Image Builder image recipe versions are immutable — the deployed recipe
* differs from the desired one but the semantic version was not bumped, so
* the cloud state cannot be converged.
*/
export declare class ImageRecipeVersionImmutable extends ImageRecipeVersionImmutable_base<{
message: string;
}> {
}
export interface RecipeComponentParameter {
/** Name of the component parameter to set. */
name: string;
/** Value(s) to assign to the parameter. */
value: string[];
}
export interface RecipeComponent {
/**
* Build-version ARN of the component to apply
* (e.g. `component.componentBuildVersionArn`).
*/
componentArn: string;
/** Parameter overrides for parameterized components. */
parameters?: RecipeComponentParameter[];
}
export interface ImageRecipeProps {
/**
* Name of the image recipe. If omitted, a deterministic physical name is
* generated. Changing the name replaces the recipe.
*/
imageRecipeName?: string;
/**
* Semantic version of the recipe (`major.minor.patch`). Recipes are
* immutable — bump the version when changing any property. Changing the
* version replaces the recipe.
* @default "1.0.0"
*/
semanticVersion?: string;
/**
* Base image of the recipe: an Image Builder image ARN (e.g. the
* AWS-managed `arn:aws:imagebuilder:us-west-2:aws:image/amazon-linux-2023-x86/x.x.x`),
* an AMI ID, or an SSM parameter reference (`ssm:/path/to/parameter`).
* Changing the parent image replaces the recipe.
*/
parentImage: string;
/**
* Components applied to the image, in order. Changing the component list
* replaces the recipe.
*/
components: RecipeComponent[];
/**
* Description of the recipe. Changing it replaces the recipe.
*/
description?: string;
/**
* Block device mappings for instances built from the recipe. Changing
* them replaces the recipe.
*/
blockDeviceMappings?: imagebuilder.InstanceBlockDeviceMapping[];
/**
* Working directory used during build and test workflows.
* Changing it replaces the recipe.
* @default "/tmp"
*/
workingDirectory?: string;
/**
* Additional instance configuration (SSM agent removal, user data
* override). Changing it replaces the recipe.
*/
additionalInstanceConfiguration?: imagebuilder.AdditionalInstanceConfiguration;
/**
* Tags applied to output AMIs created from the recipe. Changing them
* replaces the recipe.
*/
amiTags?: Record;
/**
* User-defined tags for the recipe.
*/
tags?: Record;
}
export interface ImageRecipe extends Resource<"AWS.ImageBuilder.ImageRecipe", ImageRecipeProps, {
/** The name of the image recipe. */
imageRecipeName: string;
/** The ARN of the image recipe. */
imageRecipeArn: string;
/** The semantic version of the recipe. */
semanticVersion: string;
/** The OS platform of the recipe (`Linux` / `Windows`). */
platform: string | undefined;
/** The base image the recipe builds on. */
parentImage: string | undefined;
/** When the recipe was created. */
dateCreated: string | undefined;
}, never, Providers> {
}
/**
* An EC2 Image Builder image recipe — the blueprint that combines a parent
* image with an ordered list of components to produce a new AMI.
*
* Recipes are immutable versions: every property except `tags` replaces the
* recipe. Bump `semanticVersion` when changing the definition.
* ### Creating an Image Recipe
* **Example:** Recipe from an AWS-Managed Parent Image
* ```typescript
* const recipe = yield* ImageBuilder.ImageRecipe("Recipe", {
* parentImage: "arn:aws:imagebuilder:us-west-2:aws:image/amazon-linux-2023-x86/x.x.x",
* semanticVersion: "1.0.0",
* components: [{ componentArn: component.componentBuildVersionArn }],
* });
* ```
*
* ### Using in a Pipeline
* **Example:** Wire into an Image Pipeline
* ```typescript
* const pipeline = yield* ImageBuilder.ImagePipeline("Pipeline", {
* imageRecipeArn: recipe.imageRecipeArn,
* infrastructureConfigurationArn: infra.infrastructureConfigurationArn,
* });
* ```
*
* @resource
*/
export declare const ImageRecipe: import("../../Resource.ts").ResourceClass;
export declare const ImageRecipeProvider: () => import("effect/Layer").Layer, never, import("../Environment.ts").AWSEnvironment | import("@distilled.cloud/aws/Credentials").Credentials | import("effect/unstable/http/HttpClient").HttpClient | import("../../Stack.ts").Stack | import("../../Stage.ts").Stage>;
export {};
//# sourceMappingURL=ImageRecipe.d.ts.map