mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-01-09 07:08:09 -05:00
feat(rnd,infra) Set up terraform (#7565)
* add terraform * gitignore update * linting * formatting and linting in ci * store state in backend bucket
This commit is contained in:
33
.github/workflows/autogpt-infra-ci.yml
vendored
Normal file
33
.github/workflows/autogpt-infra-ci.yml
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
name: AutoGPT Builder Infra
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
paths:
|
||||
- '.github/workflows/autogpt-infra-ci.yml'
|
||||
- 'rnd/infra/**'
|
||||
pull_request:
|
||||
paths:
|
||||
- '.github/workflows/autogpt-infra-ci.yml'
|
||||
- 'rnd/infra/**'
|
||||
|
||||
defaults:
|
||||
run:
|
||||
shell: bash
|
||||
working-directory: rnd/infra
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
- name: TFLint
|
||||
uses: pauloconnor/tflint-action@v0.0.2
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
tflint_path: terraform/
|
||||
tflint_recurse: true
|
||||
tflint_changed_only: false
|
||||
4
rnd/infra/terraform/.gitignore
vendored
Normal file
4
rnd/infra/terraform/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
*.tfstate
|
||||
*.tfstate.backup
|
||||
tfplan
|
||||
.terraform/
|
||||
22
rnd/infra/terraform/.terraform.lock.hcl
generated
Normal file
22
rnd/infra/terraform/.terraform.lock.hcl
generated
Normal file
@@ -0,0 +1,22 @@
|
||||
# This file is maintained automatically by "terraform init".
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/google" {
|
||||
version = "4.85.0"
|
||||
constraints = "~> 4.0"
|
||||
hashes = [
|
||||
"h1:ZVDZuhYSIWhCkSuDkwFeSIJjn0/DcCxak2W/cHW4OQQ=",
|
||||
"zh:17d60a6a6c1741cf1e09ac6731433a30950285eac88236e623ab4cbf23832ca3",
|
||||
"zh:1c70254c016439dbb75cab646b4beace6ceeff117c75d81f2cc27d41c312f752",
|
||||
"zh:35e2aa2cc7ac84ce55e05bb4de7b461b169d3582e56d3262e249ff09d64fe008",
|
||||
"zh:417afb08d7b2744429f6b76806f4134d62b0354acf98e8a6c00de3c24f2bb6ad",
|
||||
"zh:622165d09d21d9a922c86f1fc7177a400507f2a8c4a4513114407ae04da2dd29",
|
||||
"zh:7cdb8e39a8ea0939558d87d2cb6caceded9e21f21003d9e9f9ce648d5db0bc3a",
|
||||
"zh:851e737dc551d6004a860a8907fda65118fc2c7ede9fa828f7be704a2a39e68f",
|
||||
"zh:a331ad289a02a2c4473572a573dc389be0a604cdd9e03dd8dbc10297fb14f14d",
|
||||
"zh:b67fd531251380decd8dd1f849460d60f329f89df3d15f5815849a1dd001f430",
|
||||
"zh:be8785957acca4f97aa3e800b313b57d1fca07788761c8867c9bc701fbe0bdb5",
|
||||
"zh:cb6579a259fe020e1f88217d8f6937b2d5ace15b6406370977a1966eb31b1ca5",
|
||||
"zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c",
|
||||
]
|
||||
}
|
||||
11
rnd/infra/terraform/environments/dev.tfvars
Normal file
11
rnd/infra/terraform/environments/dev.tfvars
Normal file
@@ -0,0 +1,11 @@
|
||||
project_id = "agpt-dev"
|
||||
region = "us-central1"
|
||||
zone = "us-central1-a"
|
||||
network_name = "dev-gke-network"
|
||||
subnet_name = "dev-gke-subnet"
|
||||
subnet_cidr = "10.0.0.0/24"
|
||||
cluster_name = "dev-gke-cluster"
|
||||
node_count = 2
|
||||
node_pool_name = "dev-main-pool"
|
||||
machine_type = "e2-medium"
|
||||
disk_size_gb = 100
|
||||
43
rnd/infra/terraform/main.tf
Normal file
43
rnd/infra/terraform/main.tf
Normal file
@@ -0,0 +1,43 @@
|
||||
terraform {
|
||||
required_version = ">= 1.9.0"
|
||||
required_providers {
|
||||
google = {
|
||||
source = "hashicorp/google"
|
||||
version = "~> 4.0"
|
||||
}
|
||||
}
|
||||
backend "gcs" {
|
||||
bucket = "agpt-dev-terraform"
|
||||
prefix = "terraform/state"
|
||||
}
|
||||
}
|
||||
|
||||
provider "google" {
|
||||
project = var.project_id
|
||||
zone = var.zone
|
||||
}
|
||||
|
||||
module "networking" {
|
||||
source = "./modules/networking"
|
||||
|
||||
project_id = var.project_id
|
||||
region = var.region
|
||||
network_name = var.network_name
|
||||
subnet_name = var.subnet_name
|
||||
subnet_cidr = var.subnet_cidr
|
||||
}
|
||||
|
||||
module "gke_cluster" {
|
||||
source = "./modules/gke_cluster"
|
||||
|
||||
project_id = var.project_id
|
||||
zone = var.zone
|
||||
cluster_name = var.cluster_name
|
||||
node_pool_name = var.node_pool_name
|
||||
node_count = var.node_count
|
||||
machine_type = var.machine_type
|
||||
disk_size_gb = var.disk_size_gb
|
||||
network = module.networking.network_self_link
|
||||
subnetwork = module.networking.subnet_self_link
|
||||
enable_autopilot = var.enable_autopilot
|
||||
}
|
||||
21
rnd/infra/terraform/modules/gke_cluster/main.tf
Normal file
21
rnd/infra/terraform/modules/gke_cluster/main.tf
Normal file
@@ -0,0 +1,21 @@
|
||||
resource "google_container_cluster" "primary" {
|
||||
name = var.cluster_name
|
||||
location = var.zone
|
||||
|
||||
dynamic "node_pool" {
|
||||
for_each = var.enable_autopilot ? [] : [1]
|
||||
content {
|
||||
name = var.node_pool_name
|
||||
node_count = var.node_count
|
||||
|
||||
node_config {
|
||||
machine_type = var.machine_type
|
||||
disk_size_gb = var.disk_size_gb
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
network = var.network
|
||||
subnetwork = var.subnetwork
|
||||
}
|
||||
|
||||
14
rnd/infra/terraform/modules/gke_cluster/outputs.tf
Normal file
14
rnd/infra/terraform/modules/gke_cluster/outputs.tf
Normal file
@@ -0,0 +1,14 @@
|
||||
output "cluster_name" {
|
||||
description = "The name of the cluster"
|
||||
value = google_container_cluster.primary.name
|
||||
}
|
||||
|
||||
output "cluster_endpoint" {
|
||||
description = "The endpoint for the cluster"
|
||||
value = google_container_cluster.primary.endpoint
|
||||
}
|
||||
|
||||
output "node_pool_name" {
|
||||
description = "The name of the node pool"
|
||||
value = var.enable_autopilot ? null : google_container_cluster.primary.node_pool[0].name
|
||||
}
|
||||
41
rnd/infra/terraform/modules/gke_cluster/variables.tf
Normal file
41
rnd/infra/terraform/modules/gke_cluster/variables.tf
Normal file
@@ -0,0 +1,41 @@
|
||||
variable "project_id" {
|
||||
description = "The project ID to host the cluster in"
|
||||
}
|
||||
|
||||
variable "zone" {
|
||||
description = "The zone to host the cluster in"
|
||||
}
|
||||
|
||||
variable "cluster_name" {
|
||||
description = "The name for the GKE cluster"
|
||||
}
|
||||
|
||||
variable "node_count" {
|
||||
description = "Number of nodes in the cluster"
|
||||
}
|
||||
|
||||
variable "node_pool_name" {
|
||||
description = "Name of the node pool in the cluster"
|
||||
}
|
||||
|
||||
variable "machine_type" {
|
||||
description = "Type of machine to use for nodes"
|
||||
}
|
||||
|
||||
variable "disk_size_gb" {
|
||||
description = "Size of the disk attached to each node, specified in GB"
|
||||
default = 100
|
||||
}
|
||||
|
||||
variable "network" {
|
||||
description = "The VPC network to host the cluster in"
|
||||
}
|
||||
|
||||
variable "subnetwork" {
|
||||
description = "The subnetwork to host the cluster in"
|
||||
}
|
||||
|
||||
variable "enable_autopilot" {
|
||||
description = "Enable Autopilot for this cluster"
|
||||
type = bool
|
||||
}
|
||||
12
rnd/infra/terraform/modules/networking/main.tf
Normal file
12
rnd/infra/terraform/modules/networking/main.tf
Normal file
@@ -0,0 +1,12 @@
|
||||
resource "google_compute_network" "vpc_network" {
|
||||
name = var.network_name
|
||||
auto_create_subnetworks = false
|
||||
}
|
||||
|
||||
resource "google_compute_subnetwork" "subnet" {
|
||||
name = var.subnet_name
|
||||
ip_cidr_range = var.subnet_cidr
|
||||
region = var.region
|
||||
network = google_compute_network.vpc_network.self_link
|
||||
}
|
||||
|
||||
19
rnd/infra/terraform/modules/networking/ouputs.tf
Normal file
19
rnd/infra/terraform/modules/networking/ouputs.tf
Normal file
@@ -0,0 +1,19 @@
|
||||
output "network_name" {
|
||||
description = "The name of the VPC network"
|
||||
value = google_compute_network.vpc_network.name
|
||||
}
|
||||
|
||||
output "network_self_link" {
|
||||
description = "The self-link of the VPC network"
|
||||
value = google_compute_network.vpc_network.self_link
|
||||
}
|
||||
|
||||
output "subnet_name" {
|
||||
description = "The name of the subnet"
|
||||
value = google_compute_subnetwork.subnet.name
|
||||
}
|
||||
|
||||
output "subnet_self_link" {
|
||||
description = "The self-link of the subnet"
|
||||
value = google_compute_subnetwork.subnet.self_link
|
||||
}
|
||||
21
rnd/infra/terraform/modules/networking/variables.tf
Normal file
21
rnd/infra/terraform/modules/networking/variables.tf
Normal file
@@ -0,0 +1,21 @@
|
||||
variable "project_id" {
|
||||
description = "The project ID to host the network in"
|
||||
}
|
||||
|
||||
variable "region" {
|
||||
description = "The region to host the network in"
|
||||
}
|
||||
|
||||
variable "network_name" {
|
||||
description = "The name of the VPC network"
|
||||
}
|
||||
|
||||
variable "subnet_name" {
|
||||
description = "The name of the subnet"
|
||||
}
|
||||
|
||||
variable "subnet_cidr" {
|
||||
description = "The CIDR range for the subnet"
|
||||
}
|
||||
|
||||
|
||||
70
rnd/infra/terraform/variables.tf
Normal file
70
rnd/infra/terraform/variables.tf
Normal file
@@ -0,0 +1,70 @@
|
||||
variable "project_id" {
|
||||
description = "The project ID to host the cluster in"
|
||||
type = string
|
||||
}
|
||||
|
||||
variable "region" {
|
||||
description = "Project region"
|
||||
type = string
|
||||
default = "us-central1"
|
||||
}
|
||||
|
||||
variable "zone" {
|
||||
description = "The zone to host the cluster in"
|
||||
type = string
|
||||
default = "us-central1-a"
|
||||
}
|
||||
|
||||
variable "network_name" {
|
||||
description = "The name of the VPC network"
|
||||
type = string
|
||||
default = "gke-network"
|
||||
}
|
||||
|
||||
variable "subnet_name" {
|
||||
description = "The name of the subnet"
|
||||
type = string
|
||||
default = "gke-subnet"
|
||||
}
|
||||
|
||||
variable "subnet_cidr" {
|
||||
description = "The CIDR range for the subnet"
|
||||
type = string
|
||||
default = "10.0.0.0/24"
|
||||
}
|
||||
|
||||
variable "cluster_name" {
|
||||
description = "The name for the GKE cluster"
|
||||
type = string
|
||||
default = "gke-cluster"
|
||||
}
|
||||
|
||||
variable "node_count" {
|
||||
description = "Number of nodes in the cluster"
|
||||
type = number
|
||||
default = 3
|
||||
}
|
||||
|
||||
variable "node_pool_name" {
|
||||
description = "The name for the node pool"
|
||||
type = string
|
||||
default = "default-pool"
|
||||
}
|
||||
|
||||
variable "machine_type" {
|
||||
description = "Type of machine to use for nodes"
|
||||
type = string
|
||||
default = "e2-medium"
|
||||
}
|
||||
|
||||
variable "disk_size_gb" {
|
||||
description = "Size of the disk attached to each node, specified in GB"
|
||||
type = number
|
||||
default = 100
|
||||
}
|
||||
|
||||
variable "enable_autopilot" {
|
||||
description = "Enable Autopilot for this cluster"
|
||||
type = bool
|
||||
default = false
|
||||
}
|
||||
Reference in New Issue
Block a user