diff --git a/terraform/civo/credentials.tf b/terraform/civo/credentials.tf new file mode 100644 index 0000000..6b57e71 --- /dev/null +++ b/terraform/civo/credentials.tf @@ -0,0 +1,9 @@ +# CIVO Credentials +# --- +# Credential Variables needed for CIVO + +# Civo Config +variable "civo_token" { + description = "Civo API Token" + type = string +} diff --git a/terraform/civo/kubernetes.tf b/terraform/civo/kubernetes.tf new file mode 100644 index 0000000..5a341a3 --- /dev/null +++ b/terraform/civo/kubernetes.tf @@ -0,0 +1,18 @@ +# CIVO Kubernetes +# --- +# Templates to create a Kubernetes Cluster on CIVO + +# Create a new Kubernetes Cluster +resource "civo_kubernetes_cluster" "your-kubernetes-cluster" { + name = "your-kubernetes-cluster" + applications = "" + num_target_nodes = 2 + target_nodes_size = element(data.civo_size.xsmall.sizes, 0).name +} + +# (Optional) Time Sleep elements for other Objects that need to wait a few seconds after the Cluster deployment +resource "time_sleep" "wait_for_kubernetes" { + depends_on = [civo_kubernetes_cluster.your-kubernetes-cluster] + + create_duration = "20s" +} diff --git a/terraform/civo/provider.tf b/terraform/civo/provider.tf new file mode 100644 index 0000000..e254165 --- /dev/null +++ b/terraform/civo/provider.tf @@ -0,0 +1,20 @@ +# CIVO Provider +# --- +# Initial Provider Configuration for CIVO + +terraform { + required_version = ">= 0.13.0" + + required_providers { + civo = { + source = "civo/civo" + version = "~> 1.0.9" + } + } +} + +provider "civo" { + token = var.civo_token + # (optional): Specify your region + # region = "FRA1" +} diff --git a/terraform/civo/query.tf b/terraform/civo/query.tf new file mode 100644 index 0000000..4c5b813 --- /dev/null +++ b/terraform/civo/query.tf @@ -0,0 +1,139 @@ +# CIVO Queries +# --- +# Query commonly used cloud resources from CIVO API + +# CIVO Instance Sizes +data "civo_size" "instance_xsmall" { + filter { + key = "name" + values = ["g3.xsmall"] + match_by = "re" + } +} + +data "civo_size" "instance_small" { + filter { + key = "name" + values = ["g3.small"] + match_by = "re" + } +} + +data "civo_size" "instance_medium" { + filter { + key = "name" + values = ["g3.medium"] + match_by = "re" + } +} + +data "civo_size" "instance_large" { + filter { + key = "name" + values = ["g3.large"] + match_by = "re" + } +} + +data "civo_size" "instance_xlarge" { + filter { + key = "name" + values = ["g3.xlarge"] + match_by = "re" + } +} + +data "civo_size" "instance_2xlarge" { + filter { + key = "name" + values = ["g3.2xlarge"] + match_by = "re" + } +} + + +# CIVO Kubernetes Standard Sizes +data "civo_size" "k8s_std_xsmall" { + filter { + key = "name" + values = ["g3.k3s.xsmall"] + match_by = "re" + } +} + +data "civo_size" "k8s_std_small" { + filter { + key = "name" + values = ["g3.k3s.small"] + match_by = "re" + } +} + +data "civo_size" "k8s_std_medium" { + filter { + key = "name" + values = ["g3.k3s.medium"] + match_by = "re" + } +} + +data "civo_size" "k8s_std_large" { + filter { + key = "name" + values = ["g3.k3s.large"] + match_by = "re" + } +} + +data "civo_size" "k8s_std_xlarge" { + filter { + key = "name" + values = ["g3.k3s.xlarge"] + match_by = "re" + } +} + +data "civo_size" "k8s_std_2xlarge" { + filter { + key = "name" + values = ["g3.k3s.2xlarge"] + match_by = "re" + } +} + + +# CIVO Instance Diskimages +data "civo_disk_image" "debian" { + filter { + key = "name" + values = ["debian-10"] + } +} + +data "civo_disk_image" "debian_9" { + filter { + key = "name" + values = ["debian-9"] + } +} + +data "civo_disk_image" "ubuntu" { + filter { + key = "name" + values = ["ubuntu-focal"] + } +} + +data "civo_disk_image" "ubuntu_bionic" { + filter { + key = "name" + values = ["ubuntu-bionic"] + } +} + +data "civo_disk_image" "centos" { + filter { + key = "name" + values = ["centos-7"] + } +} diff --git a/terraform/civo/server.tf b/terraform/civo/server.tf new file mode 100644 index 0000000..6c51d8c --- /dev/null +++ b/terraform/civo/server.tf @@ -0,0 +1,14 @@ +# CIVO Servers +# --- +# Templates to create a Linux Server on CIVO + +# CIVO Instance Server +resource "civo_instance" "your-server" { + hostname = "your-fqdn-server-name" + size = data.civo_size.instance_xsmall.sizes.0.name + disk_image = data.civo_disk_image.debian.diskimages.0.id + # initial_user = "your-initial-user" + # sshkey_id = data.civo_ssh_key.your-ssh-key.id + # reverse_dns = "your-server.your-domain" +} + diff --git a/terraform/civo/ssh_key.tf b/terraform/civo/ssh_key.tf new file mode 100644 index 0000000..42666c2 --- /dev/null +++ b/terraform/civo/ssh_key.tf @@ -0,0 +1,14 @@ +# CIVO SSH Keys +# --- +# Query or Create SSH Keys to authenticate to Servers on CIVO + +# Query existing CIVO SSH Key +data "civo_ssh_key" "your-ssh-key" { + name = "your-ssh-key-name" +} + +# Create new SSH Key +resource "civo_ssh_key" "your-ssh-key"{ + name = "your-ssh-key-name" + public_key = file("~/.ssh/id_rsa.pub") +}