Template
Templates define the organizational structure and meta-information for your infrastructure components. They establish hierarchical relationships between different infrastructure elements and provide the framework for provisioning actual resources.
Templates are abstract definitions that become concrete when you create Resources from them using Template Versions. Think of templates as recipes in your infrastructure kitchen—they define what can be built, but not the actual infrastructure itself.
Template Properties
Each template in InfraKitchen contains the following core properties:
| Property | Description | Notes |
|---|---|---|
| Name | Human-readable display name | E.g., “AWS VPC”, “EKS Cluster” |
| Template Key | Unique, immutable identifier | Lowercase, alphanumeric with underscores |
| Description | Detailed information about the template | Markdown supported |
| Status | Current state of the template | enabled or disabled |
| Abstract | Whether template can be instantiated | If true, serves only as a parent |
| Parents | Templates this template depends on | Hierarchical relationships |
| Children | Templates that depend on this template | Hierarchical relationships |
| Cloud Resource Types | Types of cloud resources managed | E.g., aws_vpc, azurerm_resource_group |
| Configuration | Runtime constraints for resource creation | Provider restrictions and integration limits |
| Labels | Tags for organizing and filtering | E.g., aws, networking, production |
| Revision Number | Version tracking for template changes | Auto-incremented on updates |
Template Configuration
Templates support a configuration object that controls how resources can be created from that template.
| Option | Description | Notes |
|---|---|---|
| Allowed Integration Providers | Restricts which integration providers can be attached to template resources | Empty list means all providers are allowed |
| One Resource Per Integration | Enforces uniqueness of resource+integration for selected providers | Applies only to providers listed in this option; other providers can still be reused |
Allowed Integration Providers
Use this option when a template should only work with specific providers.
- If configured, resource creation/update requires integrations that match the allowed providers
- Resource integration count must match the number of configured allowed providers
- If no providers are configured, InfraKitchen does not apply provider-type restrictions
One Resource Per Integration
Use this option when the same integration must not be reused across multiple resources of the same template.
- Configure a list of providers where uniqueness must be enforced
- During resource creation, InfraKitchen checks existing resources for the same template
- If a matching integration is already used, resource creation is rejected with a dependency error
Template Hierarchies
Templates support parent-child relationships that mirror your infrastructure dependencies. This allows you to establish logical groupings and enforce provisioning order.
Example Hierarchy:
AWS Account (abstract)
↓
AWS Regional Environment
↓
AWS VPC
↓
EKS Cluster
↓
Kubernetes Namespace
Hierarchy Rules:
- A template cannot be both a parent and child of the same template (no circular dependencies)
- Abstract templates can only serve as parents and cannot be instantiated as resources
- Disabled templates cannot be used as parents or children
- Deleting a template with children is not allowed
Creating Templates
Templates can be created in two primary ways:
Import from Repository
Import a template directly from a Git repository containing Infrastructure as Code. InfraKitchen will automatically analyze the code and create both the template and its first template version.
Navigate to Templates
Go to Templates in the sidebar and click Import.
Select template type
Currently OpenTofu/Terraform.
Configure Git source
Integration, repository, folder, branch.
Add metadata
Name, description, labels, parents.
Import
Click Import.
Manual Creation
Create a template from scratch by defining all properties manually. This is useful when you want to establish the organizational structure before adding infrastructure code.
Navigate to Templates
Go to Templates in the sidebar and click Create.
Fill in required fields
Name, template key, description.
Configure optional properties
Parents, children, labels, cloud resource types, template configuration.
Mark abstract if needed
Check Abstract if the template should not be instantiated directly.
Save
Click Save.
Managing Templates
Template Details
Click View Details on any template to see comprehensive information organized into sections:
| Section | Content |
|---|---|
| Overview | Status, abstract flag, creation info, labels, parent/child relationships |
| Resources | All resource instances created from this template |
| Input Variables | Aggregated variables from template versions with types and descriptions |
| Output Values | Available outputs after resource provisioning |
| Tree View | Visual hierarchy showing parents (upward) or children (downward) |
Updating Templates
Template metadata can be modified after creation, with some important constraints:
- Updates increment the revision number
- Template key is immutable and cannot be changed
- Parent/child relationship changes affect hierarchy but not existing resources
Disabling Templates
Disabling prevents new resources from being created but doesn’t affect existing ones.
Effects of disabling:
- Cannot create new resources from this template
- Cannot be selected as parent or child for other templates
- Can be re-enabled later
- Existing resources remain functional
Deleting Templates
Templates must be disabled before deletion and cannot be deleted if they have:
- Child templates
- Existing resources
- Associated template versions
Integration with Other Features
Template Variables and Template Versions
Templates don’t contain executable code directly. Instead, they’re associated with Template Versions that contain:
- Infrastructure as Code (OpenTofu/Terraform) modules
- Variable definitions
- Output definitions
- Provisioning logic
A single template can have multiple template versions, allowing you to:
- Support different implementations
- Version infrastructure code independently
- Test new versions before making them default
Templates and Resources
Resource is a concrete instance of a template. Each resource:
- References exactly one template
- Uses a template version associated with that template
- Inherits the template’s hierarchical structure
- Can only have parents matching the template’s parent templates
Template Permissions
Template actions are controlled by user permissions:
| Action | Permission Required |
|---|---|
| View | All authenticated users |
| Create | Template create permission |
| Edit | Admin permission on the template |
| Disable/Enable | Admin permission on the template |
| Delete | Admin permission on the template |
Permissions are inherited from the organization’s role-based access control (RBAC) configuration.
Version Lifecycle
Version Lifecycle State describes where a Template Version sits in its life—from an early preview, through active use, to eventual deprecation and archival. It gives platform teams a clear signal about which versions are safe to use for new resources and which should be avoided.
Each Template Version carries a single lifecycle state. The state is visualized throughout the UI as a colored chip, helping developers pick the right version at a glance when creating or updating resources.
Lifecycle States
InfraKitchen supports the following lifecycle states:
| State | Meaning | Chip Color | Typical Use |
|---|---|---|---|
| Unknown | Default state; no explicit lifecycle has been assigned | Default | Newly created versions before curation |
| Preview | Early or experimental version, not yet recommended for production | Info | Testing new implementations before promoting them |
| Active | Recommended, production-ready version | Success | The version developers should use for new resources |
| Deprecated | Still usable, but discouraged; a newer version is preferred | Warning | Signaling a planned migration away from this version |
| Archived | No longer in use; typically set when a version is disabled | Error | Retiring a version from active selection |
State Transitions
Lifecycle state can be set explicitly when updating a Template Version, and it is also adjusted automatically by certain actions:
- Disabling a version sets its lifecycle state to Archived.
- Enabling a previously disabled version resets its lifecycle state to Unknown.
- All other transitions (Preview, Active, Deprecated) are set explicitly by editing the version.
Breaking Changes
Alongside the lifecycle state, a version can carry an optional Breaking Changes note. When present, the UI displays a warning indicator next to the lifecycle chip with the details in a tooltip.
Use this field to communicate incompatibilities-such as changed variables, removed outputs, or required migration steps-so developers understand the impact before adopting the version.
Setting the Lifecycle State
The lifecycle state is a property of a Template Version and can be changed when editing that version: open the template’s Template Versions, select the version to curate, update the Lifecycle State, and optionally add a Breaking Changes note.