The apply command executes infrastructure plans generated by maker mode . It runs AWS CLI commands with progress tracking, error handling, and automatic retries.
Usage
clanker ask --apply [flags]
From file
From stdin
Inline generation and apply
clanker ask --apply --plan-file plan.json
Examples
Basic workflow
# 1. Generate plan
clanker ask --maker "create an s3 bucket for logs" > plan.json
# 2. Review plan
cat plan.json | jq
# 3. Apply plan
clanker ask --apply --plan-file plan.json
Multi-resource deployment
# Generate complex infrastructure plan
clanker ask --maker \
"deploy a web app with ALB, ECS cluster, and RDS database" \
> webapp-plan.json
# Review and apply
clanker ask --apply --plan-file webapp-plan.json
Destructive operations
# Generate plan with deletions
clanker ask --maker --destroyer \
"delete test s3 buckets" \
> cleanup-plan.json
# Review carefully before applying
cat cleanup-plan.json | jq '.commands[] | .reason'
# Apply
clanker ask --apply --plan-file cleanup-plan.json
Flags
--apply
boolean
default: "false"
required
Enable apply mode to execute a plan
Path to plan JSON file. If not provided, reads from stdin
AWS profile to use for execution (overrides plan’s profile)
Confirm that destructive operations are allowed (safety check)
Show detailed execution logs including command output
Execution flow
When you apply a plan:
1. Plan validation
Validates JSON structure
Checks for required fields
Verifies command syntax
Validates AWS profile credentials
2. Pre-execution checks
Resolves AWS profile and region
Verifies AWS CLI is installed
Tests AWS credentials
Checks for destructive operations
3. Command execution
Executes commands sequentially
Substitutes variables (${VAR}) from previous outputs
Captures command outputs
Handles errors with automatic retries
4. Progress tracking
[1/5] Creating VPC...
✓ VPC created: vpc-0abc123
[2/5] Creating subnet...
✓ Subnet created: subnet-0def456
[3/5] Creating security group...
✓ Security group created: sg-0ghi789
[4/5] Creating EC2 instance...
✓ Instance launched: i-0jkl012
[5/5] Configuring instance...
✓ Configuration complete
5. Error handling
Captures error messages
Uses AI to analyze and suggest fixes
Retries failed commands with corrections
Provides rollback guidance if needed
Variable substitution
The apply command automatically replaces variables in commands:
{
"commands" : [
{
"args" : [ "ec2" , "create-vpc" , "--cidr-block" , "10.0.0.0/16" ],
"produces" : { "VPC_ID" : "output:VpcId" }
},
{
"args" : [
"ec2" ,
"create-subnet" ,
"--vpc-id" ,
"${VPC_ID}" ,
"--cidr-block" ,
"10.0.1.0/24"
]
}
]
}
First command creates VPC and captures VPC ID
Second command uses ${VPC_ID} which gets replaced with actual ID
Result: --vpc-id vpc-0abc123
Error recovery
When a command fails:
1. AI analyzes the error
✗ Command failed: s3api create-bucket --bucket my-bucket
Error: BucketAlreadyExists
[AI] Analyzing error...
[AI] Bucket name 'my-bucket' is already taken globally
[AI] Suggested fix: Use unique bucket name 'my-bucket-20260301-103045'
2. Automatic retry
[Retry 1/3] Creating bucket with unique name...
✓ Bucket created: my-bucket-20260301-103045
3. Manual intervention
If automatic retry fails, you can:
Fix the plan and re-apply
Continue from specific command
Roll back changes
For plans that use CloudFormation:
# Plan includes CloudFormation stack creation
clanker ask --maker "create vpc using cloudformation" > cfn-plan.json
# Apply waits for stack completion
clanker ask --apply --plan-file cfn-plan.json
Output:
[1/2] Creating CloudFormation stack...
✓ Stack creation initiated: my-vpc-stack
[2/2] Waiting for stack completion...
⏳ CREATE_IN_PROGRESS (10s)
⏳ CREATE_IN_PROGRESS (20s)
✓ CREATE_COMPLETE (45s)
Stack outputs:
VpcId: vpc-0abc123
SubnetId: subnet-0def456
Kubernetes plan execution
For Kubernetes plans (using kubectl/helm/eksctl):
# Generate Kubernetes deployment plan
clanker ask --maker "deploy nginx to kubernetes" > k8s-plan.json
# Apply executes kubectl/helm commands
clanker ask --apply --plan-file k8s-plan.json
Multi-cloud plans
Apply automatically detects the cloud provider:
# AWS plan
clanker ask --apply --plan-file aws-plan.json
# GCP plan
clanker ask --apply --plan-file gcp-plan.json
# Azure plan
clanker ask --apply --plan-file azure-plan.json
# Cloudflare plan
clanker ask --apply --plan-file cloudflare-plan.json
Output
Apply command outputs:
Command execution progress
Success/failure status for each command
Resource IDs and ARNs
Error messages with AI suggestions
Final summary
Safety features
Destructive operation check Plans with destructive operations require --destroyer flag: clanker ask --apply --destroyer --plan-file cleanup-plan.json
Dry run simulation While there’s no built-in dry-run mode, you can review the plan before applying: # Show all commands that will be executed
cat plan.json | jq -r '.commands[] | .args | join(" ")'
Idempotency Many AWS CLI commands are not idempotent. Re-applying the same plan may fail or create duplicate resources. Review the plan carefully before re-applying.
Best practices
Test in dev environment first # Generate plan for dev
clanker ask --maker --profile dev "create resources" > plan.json
# Apply to dev
clanker ask --apply --profile dev --plan-file plan.json
# After testing, apply to prod
clanker ask --apply --profile prod --plan-file plan.json
Enable debug for troubleshooting clanker ask --apply --debug --plan-file plan.json
Save plan execution logs clanker ask --apply --plan-file plan.json 2>&1 | tee apply.log
Troubleshooting
AWS CLI not found
# Install AWS CLI
brew install awscli # macOS
apt-get install awscli # Ubuntu/Debian
Invalid credentials
# Verify credentials
aws sts get-caller-identity --profile dev
# For SSO profiles
aws sso login --profile dev
Command timeouts
# Increase timeout with debug mode
clanker ask --apply --debug --plan-file plan.json
Partial execution
If a plan fails mid-execution:
Review the error message
Fix the issue (manually or regenerate plan)
Create a new plan that continues from where it failed
Apply the continuation plan
See also