Skip to content

Commit

Permalink
EC2 Select availability zone
Browse files Browse the repository at this point in the history
  • Loading branch information
pdostal committed Jan 19, 2024
1 parent 3e062f6 commit 18b3807
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 67 deletions.
137 changes: 71 additions & 66 deletions data/publiccloud/terraform/ec2.tf
Original file line number Diff line number Diff line change
Expand Up @@ -2,144 +2,149 @@ terraform {
required_providers {
aws = {
version = "= 5.14.0"
source = "hashicorp/aws"
source = "hashicorp/aws"
}
random = {
version = "= 3.1.0"
source = "hashicorp/random"
source = "hashicorp/random"
}
}
}

variable "region" {
default = "eu-central-1"
default = "eu-central-1"
}

provider "aws" {
region = var.region
region = var.region
}

variable "instance_count" {
default = "1"
default = "1"
}

variable "name" {
default = "openqa-vm"
default = "openqa-vm"
}

variable "type" {
default = "t2.large"
default = "t2.large"
}

variable "image_id" {
default = ""
default = ""
}

variable "extra-disk-size" {
default = "1000"
default = "1000"
}

variable "extra-disk-type" {
default = "gp2"
default = "gp2"
}

variable "create-extra-disk" {
default=false
default = false
}

variable "tags" {
type = map(string)
default = {}
type = map(string)
default = {}
}

variable "vm_create_timeout" {
default = "20m"
default = "20m"
}

variable "enable_confidential_vm" {
default = "disabled"
default = "disabled"
}

variable "vpc_security_group_ids" {
default = ""
default = ""
}

variable "availability_zone" {
default = ""
}

variable "subnet_id" {
default = ""
default = ""
}

variable "ipv6_address_count" {
default = 0
default = 0
}

resource "random_id" "service" {
count = var.instance_count
keepers = {
name = var.name
}
byte_length = 8
count = var.instance_count
keepers = {
name = var.name
}
byte_length = 8
}

resource "aws_key_pair" "openqa-keypair" {
key_name = "openqa-${element(random_id.service.*.hex, 0)}"
public_key = file("/root/.ssh/id_rsa.pub")
key_name = "openqa-${element(random_id.service.*.hex, 0)}"
public_key = file("/root/.ssh/id_rsa.pub")
}

resource "aws_instance" "openqa" {
count = var.instance_count
ami = var.image_id
instance_type = var.type
key_name = aws_key_pair.openqa-keypair.key_name
vpc_security_group_ids = [var.vpc_security_group_ids]
subnet_id = var.subnet_id
ipv6_address_count = var.ipv6_address_count

tags = merge({
openqa_created_by = var.name
openqa_created_date = timestamp()
openqa_created_id = element(random_id.service.*.hex, count.index)
}, var.tags)

ebs_block_device {
device_name = "/dev/sda1"
volume_size = 20
}
count = var.instance_count
ami = var.image_id
instance_type = var.type
key_name = aws_key_pair.openqa-keypair.key_name
vpc_security_group_ids = [var.vpc_security_group_ids]
availability_zone = var.availability_zone
subnet_id = var.subnet_id
ipv6_address_count = var.ipv6_address_count

tags = merge({
openqa_created_by = var.name
openqa_created_date = timestamp()
openqa_created_id = element(random_id.service.*.hex, count.index)
}, var.tags)

ebs_block_device {
device_name = "/dev/sda1"
volume_size = 20
}

timeouts {
create = var.vm_create_timeout
}
timeouts {
create = var.vm_create_timeout
}

dynamic "cpu_options" {
for_each = var.enable_confidential_vm == "disabled" ? [] : [1]
content {
amd_sev_snp = var.enable_confidential_vm
}
dynamic "cpu_options" {
for_each = var.enable_confidential_vm == "disabled" ? [] : [1]
content {
amd_sev_snp = var.enable_confidential_vm
}
}
}

resource "aws_volume_attachment" "ebs_att" {
count = var.create-extra-disk ? var.instance_count: 0
device_name = "/dev/sdb"
volume_id = element(aws_ebs_volume.ssd_disk.*.id, count.index)
instance_id = element(aws_instance.openqa.*.id, count.index)
count = var.create-extra-disk ? var.instance_count : 0
device_name = "/dev/sdb"
volume_id = element(aws_ebs_volume.ssd_disk.*.id, count.index)
instance_id = element(aws_instance.openqa.*.id, count.index)
}

resource "aws_ebs_volume" "ssd_disk" {
count = var.create-extra-disk ? var.instance_count : 0
availability_zone = element(aws_instance.openqa.*.availability_zone, count.index)
size = var.extra-disk-size
type = var.extra-disk-type
tags = merge({
openqa_created_by = var.name
openqa_created_date = timestamp()
openqa_created_id = element(random_id.service.*.hex, count.index)
}, var.tags)
count = var.create-extra-disk ? var.instance_count : 0
availability_zone = element(aws_instance.openqa.*.availability_zone, count.index)
size = var.extra-disk-size
type = var.extra-disk-type
tags = merge({
openqa_created_by = var.name
openqa_created_date = timestamp()
openqa_created_id = element(random_id.service.*.hex, count.index)
}, var.tags)
}

output "public_ip" {
value = aws_instance.openqa.*.public_ip
value = aws_instance.openqa.*.public_ip
}

output "vm_name" {
value = aws_instance.openqa.*.id
value = aws_instance.openqa.*.id
}
4 changes: 3 additions & 1 deletion lib/publiccloud/provider.pm
Original file line number Diff line number Diff line change
Expand Up @@ -472,9 +472,11 @@ sub terraform_apply {
}
if (is_ec2) {
my $vpc_security_group_ids = script_output("aws ec2 describe-security-groups --region '" . $self->provider_client->region . "' --filters 'Name=group-name,Values=tf-sg' --query 'SecurityGroups[0].GroupId' --output text");
my $subnet_id = script_output("aws ec2 describe-subnets --region '" . $self->provider_client->region . "' --filters 'Name=tag:Name,Values=tf-subnet' --query 'Subnets[0].SubnetId' --output text");
my $availability_zone = script_output("aws ec2 describe-instance-type-offerings --location-type availability-zone --filters Name=instance-type,Values=m6g.medium --region '" . $self->provider_client->region . "' --query 'InstanceTypeOfferings[0].Location' --output 'text'");
my $subnet_id = script_output("aws ec2 describe-subnets --region '" . $self->provider_client->region . "' --filters 'Name=tag:Name,Values=tf-subnet' 'Name=availabilityZone,Values=" . $availability_zone . "' --query 'Subnets[0].SubnetId' --output text");
my $ipv6_address_count = get_var('PUBLIC_CLOUD_EC2_IPV6_ADDRESS_COUNT', 1);
$cmd .= "-var 'vpc_security_group_ids=$vpc_security_group_ids' " if ($vpc_security_group_ids);
$cmd .= "-var 'availability_zone=$availability_zone' " if ($availability_zone);
$cmd .= "-var 'subnet_id=$subnet_id' " if ($subnet_id);
$cmd .= "-var 'ipv6_address_count=$ipv6_address_count' " if ($ipv6_address_count);
} elsif (is_azure) {
Expand Down

0 comments on commit 18b3807

Please sign in to comment.