123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- 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
- }
|