provider "aws" { region = var.region profile = var.profile } module "vpc" { source = "git::http://gogs.mague.com/chris/tfmodule-aws-2tier-vpc.git" region = var.region profile = var.profile vpc-name = var.vpc-name vpc-cidr = var.vpc-cidr vpc-azs = var.vpc-azs enable-private = false common-tags = { "Owner" = "maguec" } } module "nodes" { source = "github.com/Redislabs-Solution-Architects/tfmodule-aws-redis-enterprise" region = var.region profile = var.profile open-nets = ["76.14.80.208/32"] data-node-count = 3 enable-volumes = false re-instance-type = "c5a.4xlarge" vpc-cidr = var.vpc-cidr vpc-azs = var.vpc-azs vpc-name = var.vpc-name vpc-id = module.vpc.vpc-id vpc-subnets = module.vpc.subnets-public allow-public-ssh = 1 enable-flash = false common-tags = { "Owner" = "maguec" "Project" = "AWS Testing Environment" } } module "tmux" { source = "github.com/shokunin/tfmodule-cloud-tmux" session-name = "cpredis" ssh-key = "${var.vpc-name}.pem" user = "ubuntu" nodes = concat(module.nodes.node-ips, [aws_eip.re-eip.public_ip]) outpath = "${path.module}" } # Start CP Redis Testernode resource "aws_instance" "re" { ami = data.aws_ami.re-ami.id instance_type = "m5a.xlarge" availability_zone = element(var.vpc-azs, 1) subnet_id = element(module.vpc.subnets-public, 1) vpc_security_group_ids = [module.nodes.re-security-group] source_dest_check = false key_name = var.vpc-name tags = merge({ Name = "Tester-${var.vpc-name}-1" }, var.common-tags) } resource "aws_eip" "re-eip" { vpc = true tags = merge({ Name = "${var.vpc-name}-node-eip-1" }, var.common-tags) } resource "aws_eip_association" "re-eip-assoc" { instance_id = element(aws_instance.re.*.id, 1) allocation_id = element(aws_eip.re-eip.*.id, 1) depends_on = [aws_instance.re, aws_eip.re-eip] } resource "null_resource" "remote-config" { provisioner "remote-exec" { connection { user = "ubuntu" host = aws_eip.re-eip.public_ip private_key = file("~/.ssh/${var.vpc-name}.pem") agent = true } #inline = ["sudo apt update > /dev/null && sudo apt install -y python-pip > /dev/null"] inline = ["sudo apt update > /dev/null"] } depends_on = [aws_instance.re, aws_eip_association.re-eip-assoc] } data "template_file" "raft_group_setup" { template = file("${path.module}/raft_group_setup.tpl") vars = { node1 = module.nodes.node-internal-ips[0] node2 = module.nodes.node-internal-ips[1] node3 = module.nodes.node-internal-ips[2] } } resource "null_resource" "raft_group_setup" { provisioner "local-exec" { command = "echo \"${data.template_file.raft_group_setup.rendered}\" > ${path.module}/ansible/raft_group_setup" } depends_on = [data.template_file.raft_group_setup] } resource "local_file" "inventory" { content = templatefile("${path.module}/inventories/inventory.ctmpl", { nodes = module.nodes.node-ips tester = aws_eip.re-eip.public_ip path = abspath(path.module) } ) filename = "${path.module}/inventories/inventory.ini" file_permission = "0644" } resource "local_file" "ssh_config" { content = templatefile("${path.module}/inventories/ssh.ctmpl", { ssh-key = "${var.vpc-name}.pem" ssh-user = "ubuntu" } ) filename = "${path.module}/inventories/ssh.cfg" file_permission = "0644" } output "tmux" { value = "run ./cloud-tmux to enable tmux connections" } output "ansible1" { value = "Setup Tester Node\n\t\tansible-playbook -i inventories/inventory.ini ansible/tester.yml" } output "ansible2" { value = "Setup CP Redis Nodes\n\t\tansible-playbook -i inventories/inventory.ini ansible/nodes.yml -e 'NODE_IPS=${join(",", module.nodes.node-internal-ips)}'" } output "cluster-setup" { value = "To set up the cluster run /usr/local/bin/setup-raft-cluster from any one of the nodes" } output "insight" { value = "http://${aws_eip.re-eip.public_ip}:8001" } output "cpredisnodes" { value = module.nodes.node-internal-ips }