open-nomad/e2e/terraform/main.tf

167 lines
3.3 KiB
Terraform
Raw Normal View History

2018-12-17 17:40:09 +00:00
variable "name" {
description = "Used to name various infrastructure components"
default = "nomad-e2e"
}
variable "region" {
description = "The AWS region to deploy to."
default = "us-east-1"
}
variable "availability_zone" {
description = "The AWS availability zone to deploy to."
default = "us-east-1a"
}
2018-12-17 17:40:09 +00:00
variable "indexed" {
description = "Different configurations per client/server"
default = true
2018-12-17 17:40:09 +00:00
}
variable "instance_type" {
description = "The AWS instance type to use for both clients and servers."
default = "t2.medium"
}
variable "server_count" {
description = "The number of servers to provision."
default = "3"
}
variable "client_count" {
description = "The number of clients to provision."
default = "4"
}
variable "windows_client_count" {
description = "The number of windows clients to provision."
default = "1"
}
2018-12-17 17:40:09 +00:00
variable "nomad_sha" {
description = "The sha of Nomad to write to provisioning output"
default = ""
2018-12-17 17:40:09 +00:00
}
variable "aws_assume_role_arn" {
description = "The AWS IAM role to assume (not used by human users)"
default = ""
}
variable "aws_assume_role_session_name" {
description = "The AWS IAM session name to assume (not used by human users)"
default = ""
}
variable "aws_assume_role_external_id" {
description = "The AWS IAM external ID to assume (not used by human users)"
default = ""
}
2018-12-17 17:40:09 +00:00
provider "aws" {
region = var.region
assume_role {
role_arn = var.aws_assume_role_arn
session_name = var.aws_assume_role_session_name
external_id = var.aws_assume_role_external_id
}
2018-12-17 17:40:09 +00:00
}
resource "random_pet" "e2e" {
}
2018-12-17 17:40:09 +00:00
resource "random_password" "windows_admin_password" {
length = 20
special = true
override_special = "_%@"
}
2018-12-17 17:40:09 +00:00
locals {
random_name = "${var.name}-${random_pet.e2e.id}"
}
# Generates keys to use for provisioning and access
module "keys" {
name = local.random_name
path = "${path.root}/keys"
source = "mitchellh/dynamic-keys/aws"
version = "v2.0.0"
2018-12-17 17:40:09 +00:00
}
data "aws_ami" "linux" {
2018-12-17 17:40:09 +00:00
most_recent = true
owners = ["self"]
filter {
name = "name"
values = ["nomad-e2e-*"]
}
filter {
name = "tag:OS"
values = ["Ubuntu"]
}
2018-12-17 17:40:09 +00:00
}
data "aws_ami" "windows" {
most_recent = true
owners = ["self"]
filter {
name = "name"
values = ["nomad-e2e-windows-2016*"]
}
filter {
name = "tag:OS"
values = ["Windows2016"]
}
}
data "aws_caller_identity" "current" {
}
2018-12-17 17:40:09 +00:00
output "servers" {
value = aws_instance.server.*.public_ip
2018-12-17 17:40:09 +00:00
}
output "linux_clients" {
value = aws_instance.client_linux.*.public_ip
}
output "windows_clients" {
value = aws_instance.client_windows.*.public_ip
2018-12-17 17:40:09 +00:00
}
output "message" {
value = <<EOM
Your cluster has been provisioned! - To prepare your environment, run the
following:
```
export NOMAD_ADDR=http://${aws_instance.server[0].public_ip}:4646
export CONSUL_HTTP_ADDR=http://${aws_instance.server[0].public_ip}:8500
export NOMAD_E2E=1
```
Then you can run e2e tests with:
```
go test -v ./e2e
```
ssh into nodes with:
```
# server
ssh -i keys/${local.random_name}.pem ubuntu@${aws_instance.server[0].public_ip}
# clients
%{for ip in aws_instance.client_linux.*.public_ip~}
ssh -i keys/${local.random_name}.pem ubuntu@${ip}
%{endfor~}
```
EOM
}