From b9ed4a37d5c70fcb910d8dbf92bc5b4b36bd9fd4 Mon Sep 17 00:00:00 2001 From: Curtis Wilson Date: Fri, 28 Jan 2022 10:57:09 -0500 Subject: [PATCH] Started to add disks modules. --- main.tf | 44 ++++++++++++++++++++++++++-- modules/aws-disk-mounts/main.tf | 6 ++++ modules/aws-disk-mounts/outputs.tf | 0 modules/aws-disk-mounts/variables.tf | 16 ++++++++++ modules/aws-disks/main.tf | 10 +++++++ modules/aws-disks/outputs.tf | 3 ++ modules/aws-disks/variables.tf | 19 ++++++++++++ variables.tf | 15 ++++++++++ 8 files changed, 110 insertions(+), 3 deletions(-) create mode 100644 modules/aws-disk-mounts/main.tf create mode 100644 modules/aws-disk-mounts/outputs.tf create mode 100644 modules/aws-disk-mounts/variables.tf create mode 100644 modules/aws-disks/main.tf create mode 100644 modules/aws-disks/outputs.tf create mode 100644 modules/aws-disks/variables.tf diff --git a/main.tf b/main.tf index e145ad1..c34eaf6 100644 --- a/main.tf +++ b/main.tf @@ -32,9 +32,9 @@ locals { }, "k8s-wrkr" = { base-image = var.ubuntu-ami - aws-ec2-type = var.t2-medium-4gib-2vcpu + aws-ec2-type = var.c5a-xlarge-amd-8gib-4vcpu subnet-ids = local.k8s-subnets-ids - disk-size = 20 + disk-size = 32 num = 2 }, "test" = { @@ -46,7 +46,7 @@ locals { }, "nfs" = { base-image = var.ubuntu-ami - aws-ec2-type = var.t2-micro-1gib-1vcpu + aws-ec2-type = var.t3a-medium-amd-4gib-2vcpu # subnet-ids = [module.aws-network-from-scratch.subnet.id] subnet-ids = [module.aws-network-existing.subnet-by-name["subnet_4"].id] num = 1 @@ -62,6 +62,27 @@ locals { num = 1 }, } + + disks = { + "zfs-64g" = { + num = 1, + size = 64 + availability_zone = local.nfs-subnets[0].availability_zone + }, + } + + disk-mounts = [ + { + # TODO make this attach field work. + attach = false + ec2-id = module.nodes["nfs"].nodes[0].id, + disk-group = "zfs-64g" + # TODO also make sure that get drive letters or whetever still works. did + # it ever work? + drive-letters = ["g"] + }, + ] + install-qemu-agent = false } @@ -129,6 +150,23 @@ resource "aws_key_pair" "key" { } } +module "disks" { + for_each = local.disks + source = "./modules/aws-disks" + availability_zone = each.value.availability_zone + size = each.value.size + num = each.value.num + prefix = each.key +} + +module "disk-mounts" { + source = "./modules/aws-disk-mounts" + disks = module.disks[element(local.disk-mounts, count.index).disk-group].disks + ec2-id = element(local.disk-mounts, count.index).ec2-id + drive-letters = try(element(local.disk-mounts, count.index).drive-letters, null) + count = length(local.disk-mounts) +} + resource "aws_ebs_volume" "zfs" { # TODO REM look at types. availability_zone = local.nfs-subnets[0].availability_zone diff --git a/modules/aws-disk-mounts/main.tf b/modules/aws-disk-mounts/main.tf new file mode 100644 index 0000000..8cd4c53 --- /dev/null +++ b/modules/aws-disk-mounts/main.tf @@ -0,0 +1,6 @@ +resource "aws_volume_attachment" "mount-volume" { + device_name = "/dev/sd${element(var.drive-letters, count.index)}" + instance_id = var.ec2-id + count = length(var.disks) + volume_id = element(var.disks, count.index).id +} diff --git a/modules/aws-disk-mounts/outputs.tf b/modules/aws-disk-mounts/outputs.tf new file mode 100644 index 0000000..e69de29 diff --git a/modules/aws-disk-mounts/variables.tf b/modules/aws-disk-mounts/variables.tf new file mode 100644 index 0000000..b36588f --- /dev/null +++ b/modules/aws-disk-mounts/variables.tf @@ -0,0 +1,16 @@ +variable "drive-letters" { + default = ["f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] + description = "These drive letters will be used when arraching disks to EC2 instance with `ec2-id'" + type = list(string) + nullable = false +} + +variable "disks" { + description = "An array of disks to attach to the EC2 isntance with `ec2-id`" + type = list +} + +variable "ec2-id" { + description = "The ID of the EC@ instance to attach the drives to." + type = string +} diff --git a/modules/aws-disks/main.tf b/modules/aws-disks/main.tf new file mode 100644 index 0000000..b4c759c --- /dev/null +++ b/modules/aws-disks/main.tf @@ -0,0 +1,10 @@ + +resource "aws_ebs_volume" "disks" { + availability_zone = var.availability_zone + size = var.size + count = var.num + encrypted = true + tags = { + Name = "${var.prefix}-${count.index}" + } +} diff --git a/modules/aws-disks/outputs.tf b/modules/aws-disks/outputs.tf new file mode 100644 index 0000000..61a968f --- /dev/null +++ b/modules/aws-disks/outputs.tf @@ -0,0 +1,3 @@ +output "disks" { + value = aws_ebs_volume.disks +} diff --git a/modules/aws-disks/variables.tf b/modules/aws-disks/variables.tf new file mode 100644 index 0000000..5b1cb3f --- /dev/null +++ b/modules/aws-disks/variables.tf @@ -0,0 +1,19 @@ +variable "availability_zone" { + description = "The availability zone this disk will reside in. This AZ is applied to all 'num' disks." + type = string +} + +variable "num" { + description = "The number of disks to be created with this config." + type = number +} + +variable "prefix" { + description = "This prefix will be used in the name of each disk created with this module. If the prefix is 'zfs', then it will create disks with names, zfs-0 and zfs-1." + type = string +} + +variable "size" { + description = "The size of the disk in GB." + type = number +} diff --git a/variables.tf b/variables.tf index c84adb0..fbfe661 100644 --- a/variables.tf +++ b/variables.tf @@ -200,6 +200,21 @@ variable "t2-xlarge-16gib-4vcpu" { default = "t2.xlarge" } +variable "t3a-medium-amd-4gib-2vcpu" { + description = "t3a.medium EC2 instance on AMD with GiB mem and 2 vCPUs." + default = "t3a.medium" +} + +variable "t3a-large-amd-8gib-2vcpu" { + description = "t3a.large EC2 instance on AMD with 8 GiB mem and 2 vCPUs." + default = "t3a.large" +} + +variable "c5a-xlarge-amd-8gib-4vcpu" { + description = "c5a.xlarge EC2 instance on AMD with 8 GiB mem and 4 vCPUs." + default = "c5a.xlarge" +} + ################################################################################ # Libvirt Images # These variables are really more like constants. Using variables improves