main.tf 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. provider "aws" {
  2. region = var.region
  3. profile = var.profile
  4. }
  5. module "vpc" {
  6. source = "../tfmodule-aws-2tier-vpc"
  7. region = var.region
  8. profile = var.profile
  9. vpc-name = var.vpc-name
  10. vpc-cidr = var.vpc-cidr
  11. vpc-azs = var.vpc-azs
  12. enable-private = false
  13. common-tags = {
  14. "Owner" = "maguec"
  15. "Project" = "example_terraform"
  16. }
  17. }
  18. module "nodes" {
  19. source = "../tfmodule-aws-redis-enterprise"
  20. region = var.region
  21. profile = var.profile
  22. open-nets = ["76.14.80.208/32"]
  23. data-node-count = 5
  24. re-volume-size = 250
  25. re-instance-type = "m5.4xlarge"
  26. vpc-cidr = var.vpc-cidr
  27. vpc-azs = var.vpc-azs
  28. vpc-name = var.vpc-name
  29. vpc-id = module.vpc.vpc-id
  30. vpc-subnets = module.vpc.subnets-public
  31. allow-public-ssh = 1
  32. enable-flash = true
  33. common-tags = {
  34. "Owner" = "maguec"
  35. "Project" = "example_terraform"
  36. }
  37. }
  38. # Start CP Redis Testernode
  39. resource "aws_instance" "re" {
  40. ami = data.aws_ami.re-ami.id
  41. instance_type = "m5.4xlarge"
  42. availability_zone = "${element(var.vpc-azs, 1)}"
  43. subnet_id = "${element(module.vpc.subnets-public, 1)}"
  44. vpc_security_group_ids = [module.nodes.re-security-group]
  45. source_dest_check = false
  46. key_name = var.vpc-name
  47. tags = merge({ Name = "Tester-${var.vpc-name}-1" }, var.common-tags)
  48. }
  49. resource "aws_eip" "re-eip" {
  50. vpc = true
  51. tags = merge({ Name = "${var.vpc-name}-node-eip-1" }, var.common-tags)
  52. }
  53. resource "aws_eip_association" "re-eip-assoc" {
  54. instance_id = "${element(aws_instance.re.*.id, 1)}"
  55. allocation_id = "${element(aws_eip.re-eip.*.id, 1)}"
  56. depends_on = ["aws_instance.re", "aws_eip.re-eip"]
  57. }
  58. resource "null_resource" "remote-config" {
  59. provisioner "remote-exec" {
  60. connection {
  61. user = "ubuntu"
  62. host = aws_eip.re-eip.public_ip
  63. private_key = "${file("~/.ssh/${var.vpc-name}.pem")}"
  64. agent = true
  65. }
  66. inline = ["sudo apt update > /dev/null && sudo apt install -y python python-pip > /dev/null"]
  67. }
  68. depends_on = ["aws_instance.re", "aws_eip_association.re-eip-assoc"]
  69. }
  70. output "node-ips" {
  71. value = formatlist("ssh -i ~/.ssh/${var.vpc-name}.pem -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ubuntu@%s", module.nodes.node-ips)
  72. }
  73. output "tester-ips" {
  74. value = formatlist("ssh -i ~/.ssh/${var.vpc-name}.pem -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ubuntu@%s", aws_eip.re-eip.public_ip)
  75. }
  76. data "template_file" "raft_group_setup" {
  77. template = "${file("${path.module}/raft_group_setup.tpl")}"
  78. vars = {
  79. node1 = module.nodes.node-internal-ips[0]
  80. node2 = module.nodes.node-internal-ips[1]
  81. node3 = module.nodes.node-internal-ips[2]
  82. node4 = module.nodes.node-internal-ips[3]
  83. node5 = module.nodes.node-internal-ips[4]
  84. }
  85. }
  86. resource "null_resource" "raft_group_setup" {
  87. provisioner "local-exec" {
  88. command = "echo \"${data.template_file.raft_group_setup.rendered}\" > ${path.module}/ansible/raft_group_setup"
  89. }
  90. depends_on = ["data.template_file.raft_group_setup"]
  91. }