diff --git a/src/oneprovision/lib/terraform/providers/templates/aws/cluster.erb b/src/oneprovision/lib/terraform/providers/templates/aws/cluster.erb index fd8b8db5db..da49513d8e 100644 --- a/src/oneprovision/lib/terraform/providers/templates/aws/cluster.erb +++ b/src/oneprovision/lib/terraform/providers/templates/aws/cluster.erb @@ -15,6 +15,8 @@ resource "aws_subnet" "device_<%= obj['ID'] %>" { tags = { Name = "<%= obj['NAME'] %>_subnet" } + + availability_zone = local.my_zones[0] } resource "aws_internet_gateway" "device_<%= obj['ID'] %>" { diff --git a/src/oneprovision/lib/terraform/providers/templates/aws/host.erb b/src/oneprovision/lib/terraform/providers/templates/aws/host.erb index 1032ba609e..259bf5e3fa 100644 --- a/src/oneprovision/lib/terraform/providers/templates/aws/host.erb +++ b/src/oneprovision/lib/terraform/providers/templates/aws/host.erb @@ -1,16 +1,36 @@ +data "aws_availability_zones" "available" {} + +# only filter availability zones where given instance could be deployed +data "aws_ec2_instance_type_offerings" "available" { + + for_each=toset(data.aws_availability_zones.available.names) + + filter { + name = "instance-type" + values = ["<%= provision['INSTANCETYPE'] %>"] + } + + filter { + name = "location" + values = ["${each.key}"] + } + + location_type = "availability-zone" +} + +locals { + my_zones = keys({ for az, details in data.aws_ec2_instance_type_offerings.available : + az => details.instance_types if length(details.instance_types) != 0 }) +} + + resource "aws_instance" "device_<%= obj['ID'] %>" { ami = "<%= provision['AMI'] %>" instance_type = "<%= provision['INSTANCETYPE'] %>" + availability_zone = local.my_zones[0] vpc_security_group_ids = [ aws_security_group.device_<%= c['ID'] %>_all.id ] - # - # Find below how to apply on instances the SGs provisioned in host.rb - # - #vpc_security_group_ids = [aws_security_group.device_<%= c['ID'] %>_ssh.id, - # aws_security_group.device_<%= c['ID'] %>_bgp.id, - # aws_security_group.device_<%= c['ID'] %>_vxlan.id] - subnet_id = aws_subnet.device_<%= c['ID'] %>.id <% ecidr = c['TEMPLATE']['PROVISION']['CIDR'] || "10.0.0.0/16"