Initial commit
This commit is contained in:
8
skills/infrastructure-as-code-generator/assets/README.md
Normal file
8
skills/infrastructure-as-code-generator/assets/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
# Assets
|
||||
|
||||
Bundled resources for infrastructure-as-code-generator skill
|
||||
|
||||
- [ ] terraform_templates/: Directory containing Terraform templates for various cloud resources (e.g., EC2 instances, S3 buckets, VPCs).
|
||||
- [ ] cloudformation_templates/: Directory containing CloudFormation templates for various cloud resources.
|
||||
- [ ] pulumi_examples/: Directory containing Pulumi examples for various cloud resources.
|
||||
- [ ] iac_config_schema.json: JSON schema defining the structure of IaC configuration files.
|
||||
@@ -0,0 +1,201 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"title": "Infrastructure as Code Configuration",
|
||||
"description": "Configuration schema for generating Infrastructure as Code.",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"provider": {
|
||||
"type": "string",
|
||||
"enum": ["aws", "azure", "gcp", "kubernetes", "terraform", "cloudformation", "pulumi"],
|
||||
"description": "Cloud provider or IaC tool to use.",
|
||||
"_comment": "Supported providers include AWS, Azure, GCP, Kubernetes, Terraform, CloudFormation, and Pulumi."
|
||||
},
|
||||
"region": {
|
||||
"type": "string",
|
||||
"description": "Cloud region to deploy resources to.",
|
||||
"default": "us-east-1",
|
||||
"_comment": "Defaults to us-east-1 if not specified. Required for cloud providers."
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the infrastructure stack.",
|
||||
"default": "my-infrastructure",
|
||||
"_comment": "Used for naming resources and deployments."
|
||||
},
|
||||
"resource_group": {
|
||||
"type": "string",
|
||||
"description": "Resource group or project name.",
|
||||
"_comment": "Relevant for Azure and GCP. Will be used to create the resource group if it doesn't exist (where possible)."
|
||||
},
|
||||
"resources": {
|
||||
"type": "array",
|
||||
"description": "List of resources to create.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": ["ec2", "s3", "rds", "vpc", "subnet", "lambda", "container", "load_balancer", "firewall", "storage_account", "virtual_machine", "database", "service_account"],
|
||||
"description": "Type of resource to create.",
|
||||
"_comment": "Supported resource types vary depending on the provider."
|
||||
},
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the resource."
|
||||
},
|
||||
"properties": {
|
||||
"type": "object",
|
||||
"description": "Resource-specific properties.",
|
||||
"_comment": "These properties depend on the resource type and provider."
|
||||
},
|
||||
"dependencies": {
|
||||
"type": "array",
|
||||
"description": "List of resources this resource depends on.",
|
||||
"items": {
|
||||
"type": "string",
|
||||
"description": "Name of a dependency."
|
||||
},
|
||||
"_comment": "Used to define resource creation order."
|
||||
}
|
||||
},
|
||||
"required": ["type", "name"]
|
||||
}
|
||||
},
|
||||
"outputs": {
|
||||
"type": "array",
|
||||
"description": "List of outputs to define.",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {
|
||||
"type": "string",
|
||||
"description": "Name of the output."
|
||||
},
|
||||
"value": {
|
||||
"type": "string",
|
||||
"description": "Expression for the output value (e.g., ARN of a resource)."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Description of the output."
|
||||
}
|
||||
},
|
||||
"required": ["name", "value", "description"]
|
||||
}
|
||||
},
|
||||
"variables": {
|
||||
"type": "object",
|
||||
"description": "Variables to use in the IaC.",
|
||||
"additionalProperties": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": ["string", "number", "bool", "list", "map"],
|
||||
"description": "Type of the variable."
|
||||
},
|
||||
"default": {
|
||||
"type": ["string", "number", "boolean", "array", "object"],
|
||||
"description": "Default value of the variable."
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"description": "Description of the variable."
|
||||
}
|
||||
},
|
||||
"required": ["type", "description"]
|
||||
}
|
||||
},
|
||||
"tags": {
|
||||
"type": "object",
|
||||
"description": "Tags to apply to resources.",
|
||||
"additionalProperties": {
|
||||
"type": "string",
|
||||
"description": "Tag value."
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["provider", "resources"],
|
||||
"example": {
|
||||
"_comment": "Example AWS configuration for a simple EC2 instance.",
|
||||
"provider": "aws",
|
||||
"region": "us-west-2",
|
||||
"name": "my-ec2-instance",
|
||||
"tags": {
|
||||
"Environment": "Production",
|
||||
"Project": "WebApp"
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"type": "vpc",
|
||||
"name": "main_vpc",
|
||||
"properties": {
|
||||
"cidr_block": "10.0.0.0/16",
|
||||
"enable_dns_hostnames": true,
|
||||
"enable_dns_support": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "subnet",
|
||||
"name": "public_subnet",
|
||||
"properties": {
|
||||
"vpc_id": "${main_vpc.id}",
|
||||
"cidr_block": "10.0.1.0/24",
|
||||
"availability_zone": "us-west-2a",
|
||||
"map_public_ip_on_launch": true
|
||||
},
|
||||
"dependencies": ["main_vpc"]
|
||||
},
|
||||
{
|
||||
"type": "ec2",
|
||||
"name": "web_server",
|
||||
"properties": {
|
||||
"ami": "ami-0c55b33c5d5a45fb9",
|
||||
"instance_type": "t2.micro",
|
||||
"subnet_id": "${public_subnet.id}",
|
||||
"key_name": "my-key",
|
||||
"security_groups": ["${web_sg.id}"]
|
||||
},
|
||||
"dependencies": ["public_subnet", "web_sg"]
|
||||
},
|
||||
{
|
||||
"type": "firewall",
|
||||
"name": "web_sg",
|
||||
"properties": {
|
||||
"description": "Allow web traffic",
|
||||
"ingress": [
|
||||
{
|
||||
"from_port": 80,
|
||||
"to_port": 80,
|
||||
"protocol": "tcp",
|
||||
"cidr_blocks": ["0.0.0.0/0"]
|
||||
},
|
||||
{
|
||||
"from_port": 443,
|
||||
"to_port": 443,
|
||||
"protocol": "tcp",
|
||||
"cidr_blocks": ["0.0.0.0/0"]
|
||||
}
|
||||
],
|
||||
"egress": [
|
||||
{
|
||||
"from_port": 0,
|
||||
"to_port": 0,
|
||||
"protocol": "-1",
|
||||
"cidr_blocks": ["0.0.0.0/0"]
|
||||
}
|
||||
],
|
||||
"vpc_id": "${main_vpc.id}"
|
||||
},
|
||||
"dependencies": ["main_vpc"]
|
||||
}
|
||||
],
|
||||
"outputs": [
|
||||
{
|
||||
"name": "public_ip",
|
||||
"value": "${web_server.public_ip}",
|
||||
"description": "Public IP address of the web server."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user