BlueprintsΒΆ
In InfraKitchen, Blueprints are reusable definitions that combine multiple Templates into a single, executable plan. A Blueprint describes which infrastructure components to provision and how their outputs wire together β turning a multi-resource stack into a one-click operation.
Blueprints are the recipes in your infrastructure kitchen β they define the ingredients (templates), the order of preparation (dependency graph), and the connections between components (wiring rules), so you can reliably reproduce entire environments.
A blueprint combines:
- Templates (ordered list of infrastructure components)
- Wiring Rules (how outputs from one template feed into inputs of another)
- Default Variables (pre-configured values per template)
- Configuration (general settings for the blueprint)
- Labels (tags for organizing and filtering)
When executed, a blueprint creates a Workflow that provisions each resource in the correct dependency order.
β»οΈ Blueprint LifecycleΒΆ
Blueprints move through these stages: Create β Enable/Disable β Delete.
Statuses: enabled, disabled
Unlike Resources or Executors, blueprints are configuration entities β they define what to build, not running infrastructure. They can be executed multiple times, each execution creating a new Workflow.
graph LR
A[Create Blueprint] --> B[Enabled]
B -->|Disable| C[Disabled]
C -->|Enable| B
C -->|Delete| D[Deleted]
B -->|Execute| E[Workflow Created]
style B fill:#d4edda
style C fill:#fff3cd
style D fill:#f8d7da
style E fill:#d1ecf1
π Blueprint PropertiesΒΆ
Each blueprint in InfraKitchen contains the following core properties:
| Property | Description | Notes |
|---|---|---|
| Name | Unique identifier for the blueprint | Must be unique |
| Description | Detailed information about the blueprint | Markdown supported |
| Templates | Ordered list of templates included in the blueprint | At least one required |
| Wiring Rules | Output β input mappings between templates | Defines the dependency graph |
| Default Variables | Pre-configured variable values per template | Keyed by template ID |
| Configuration | General blueprint settings | Integration defaults, workspace, etc. |
| Labels | Tags for organizing and filtering | E.g., production, networking, data |
| Status | Current blueprint status | enabled or disabled |
| Revision Number | Version tracking for blueprint changes | Auto-incremented on updates |
| Creator | User who created the blueprint | Used for permissions and audit |
β Creating BlueprintsΒΆ
Blueprints are created to define repeatable multi-resource infrastructure stacks.
Creation StepsΒΆ
- Navigate to Blueprints in the sidebar
- Click Create
- Configure basic properties:
- Enter unique name
- Add description explaining the blueprint's purpose
- Select templates:
- Choose the templates that make up the blueprint
- Order them logically (the system will compute execution order from wiring)
- Define wiring rules:
- Map outputs from source templates to inputs on target templates
- The wiring canvas provides a visual editor for creating connections
- Set default variables:
- Configure default variable values per template
- These can be overridden at execution time
- Add labels for organization
- Click Save
When to Use Blueprints
Use blueprints for:
- Multi-tier environments β VPC + EKS + RDS in one click
- Standardized stacks β Repeatable patterns across teams
- Connected infrastructure β Components that depend on each other's outputs
- Environment replication β Dev, staging, production from the same definition
Use direct Resource creation for:
- Single, standalone resources
- One-off infrastructure with no dependencies
π Wiring RulesΒΆ
Wiring rules are the core mechanism that makes blueprints powerful. They define how the output of one template's resource automatically feeds into the input variable of another template's resource.
Wiring Rule StructureΒΆ
Each wiring rule contains four fields:
| Field | Description |
|---|---|
| Source Template ID | Template whose resource produces the output |
| Source Output | Name of the output variable on the source |
| Target Template ID | Template whose resource consumes the value |
| Target Variable | Name of the input variable on the target |
ExampleΒΆ
Blueprint: Production Environment
Templates:
- VPC Template
- EKS Cluster Template
- RDS Database Template
Wiring Rules:
- source: VPC Template.vpc_id β target: EKS Cluster Template.vpc_id
- source: VPC Template.private_subnet_ids β target: EKS Cluster Template.subnet_ids
- source: VPC Template.vpc_id β target: RDS Database Template.vpc_id
- source: VPC Template.database_subnet_ids β target: RDS Database Template.subnet_ids
Dependency GraphΒΆ
The wiring rules automatically create a directed acyclic graph (DAG) that determines execution order:
graph TD
A[VPC Template] -->|vpc_id| B[EKS Cluster Template]
A -->|private_subnet_ids| B
A -->|vpc_id| C[RDS Database Template]
A -->|database_subnet_ids| C
style A fill:#d1ecf1
style B fill:#d4edda
style C fill:#d4edda
Templates with no incoming dependencies execute first. Templates at the same level (no dependencies on each other) can execute in parallel.
Circular Dependencies
Wiring rules must not create circular dependencies. If template A depends on template B and template B depends on template A, the blueprint cannot be executed. The system validates this and raises an error.
π§ Managing BlueprintsΒΆ
Blueprints support lifecycle actions based on their current status.
| Action | When Available | Description |
|---|---|---|
| Edit | Status: enabled |
Modify blueprint configuration |
| Disable | Status: enabled |
Prevent new executions |
| Enable | Status: disabled |
Allow executions again |
| Delete | Status: disabled |
Permanently remove the blueprint |
| Execute | Status: enabled |
Create a new workflow from this blueprint |
Disabling Before Deleting
Blueprints must be disabled before they can be deleted. This prevents accidental deletion of actively used blueprints.
βΆοΈ Executing BlueprintsΒΆ
When a blueprint is executed, the system creates a Workflow that orchestrates resource provisioning.
Execution OptionsΒΆ
At execution time, you can customize the workflow with:
| Option | Description |
|---|---|
| Variable Overrides | Override default variables per template |
| Integration IDs | Cloud credentials shared across all resources |
| Secret IDs | Sensitive data shared across all resources |
| Storage ID | Backend for Terraform/OpenTofu state |
| Source Code Version Overrides | Use specific code versions per template |
| Parent Overrides | Specify parent resources for templates with external parents |
What Happens During ExecutionΒΆ
- Topological sort β templates are ordered by their wiring dependencies
- Variable merge β for each step: blueprint defaults β wired outputs β runtime overrides
- Workflow creation β a workflow is created with one step per template
- Blueprint link β the workflow is associated with the originating blueprint
- Execution β the workflow processes steps in dependency order
Variable Resolution OrderΒΆ
Variables for each step are resolved with this priority (highest wins):
βββββββββββββββββββββββββββββββ
β 3. Runtime Overrides β β Highest priority
βββββββββββββββββββββββββββββββ€
β 2. Wired Outputs β β From completed upstream steps
βββββββββββββββββββββββββββββββ€
β 1. Blueprint Defaults β β From blueprint configuration
βββββββββββββββββββββββββββββββ
π Blueprint WorkflowsΒΆ
Each blueprint execution creates a workflow that can be tracked independently. The blueprint detail page shows all workflows created from it, with their status and step progress.
Workflow TrackingΒΆ
From a blueprint's detail page you can:
- View all past and current executions
- See the status of each workflow (pending, in progress, done, error)
- Drill into individual workflows to see step-level progress
- Navigate to resources created by completed steps
π Blueprint PermissionsΒΆ
Blueprint actions are controlled by role-based access control:
| Action | Permission Required |
|---|---|
| View | Read access |
| Create | Write access |
| Edit | Admin access |
| Disable | Admin access |
| Enable | Admin access |
| Delete | Admin access |
| Execute | Write access |
π Blueprints vs Templates vs ExecutorsΒΆ
Understanding when to use each:
| Feature | Blueprint | Template | Executor |
|---|---|---|---|
| Purpose | Multi-resource orchestration plan | Reusable infrastructure pattern | One-time task execution |
| Reusability | Executed multiple times | Instantiated as resources | Not reusable |
| Dependencies | Automatic via wiring rules | Parent-child hierarchy | None |
| Variable Passing | Automated output β input | Manual per resource | Defined in source code |
| Common Uses | Environment stacks, multi-tier apps | VPCs, clusters, databases | Migrations, imports, cleanup |
Decision Guide:
- β Use Blueprint: "I need to provision a VPC, EKS, and RDS with automatic output wiring"
- β Use Template: "I need a reusable definition for a VPC that teams can instantiate"
- β Use Executor: "I need to run a one-time database migration"
π Best PracticesΒΆ
Blueprint DesignΒΆ
- Keep blueprints focused β one blueprint per logical environment or stack
- Use descriptive names that indicate purpose and scope
- Document the blueprint's purpose and expected inputs in the description
- Minimize the number of wiring rules β keep the dependency graph shallow
Naming ConventionsΒΆ
Use descriptive names that indicate purpose and scope:
β
Good:
- production-networking-stack
- eks-with-monitoring
- data-platform-tier
β Avoid:
- blueprint-1
- test
- my-stack
Wiring DesignΒΆ
- Wire only the outputs that downstream templates actually need
- Avoid unnecessary transitive dependencies
- Test wiring with a non-production execution first
- Document which outputs each template produces in the template description
Default VariablesΒΆ
- Set default variables for values that are consistent across executions
- Use runtime overrides for environment-specific values (regions, CIDR blocks)
- Document which variables should be overridden at execution time