feat(Packer): Introduce AMI packer images
[csit.git] / fdio.infra.terraform / 3n_aws_c5n / deploy / main.tf
index 7c029c6..073768d 100644 (file)
@@ -1,5 +1,6 @@
-provider "aws" {
-  region = var.region
+data "vault_aws_access_credentials" "creds" {
+  backend = "${var.vault-name}-path"
+  role    = "${var.vault-name}-role"
 }
 
 resource "aws_vpc" "CSITVPC" {
@@ -134,7 +135,7 @@ resource "aws_network_interface" "dut1_if1" {
   private_ip        = var.dut1_if1_ip
   private_ips       = [var.dut1_if1_ip]
   security_groups   = [aws_security_group.CSITSG.id]
-  depends_on        = [aws_vpc.CSITVPC, aws_subnet.b]
+  depends_on        = [aws_vpc.CSITVPC, aws_subnet.b, aws_instance.dut1]
 
   attachment {
     instance     = aws_instance.dut1.id
@@ -152,7 +153,7 @@ resource "aws_network_interface" "dut1_if2" {
   private_ip        = var.dut1_if2_ip
   private_ips       = [var.dut1_if2_ip]
   security_groups   = [aws_security_group.CSITSG.id]
-  depends_on        = [aws_vpc.CSITVPC]
+  depends_on        = [aws_vpc.CSITVPC, aws_subnet.c, aws_instance.dut1]
 
   attachment {
     instance     = aws_instance.dut1.id
@@ -170,7 +171,7 @@ resource "aws_network_interface" "dut2_if1" {
   private_ip        = var.dut2_if1_ip
   private_ips       = [var.dut2_if1_ip]
   security_groups   = [aws_security_group.CSITSG.id]
-  depends_on        = [aws_vpc.CSITVPC, aws_subnet.c]
+  depends_on        = [aws_vpc.CSITVPC, aws_subnet.c, aws_instance.dut2]
 
   attachment {
     instance     = aws_instance.dut2.id
@@ -188,7 +189,7 @@ resource "aws_network_interface" "dut2_if2" {
   private_ip        = var.dut2_if2_ip
   private_ips       = [var.dut2_if2_ip]
   security_groups   = [aws_security_group.CSITSG.id]
-  depends_on        = [aws_vpc.CSITVPC, aws_subnet.d]
+  depends_on        = [aws_vpc.CSITVPC, aws_subnet.d, aws_instance.dut2]
 
   attachment {
     instance     = aws_instance.dut2.id
@@ -206,7 +207,7 @@ resource "aws_network_interface" "tg_if1" {
   private_ip        = var.tg_if1_ip
   private_ips       = [var.tg_if1_ip]
   security_groups   = [aws_security_group.CSITSG.id]
-  depends_on        = [aws_vpc.CSITVPC, aws_subnet.b]
+  depends_on        = [aws_vpc.CSITVPC, aws_subnet.b, aws_instance.tg]
 
   attachment {
     instance     = aws_instance.tg.id
@@ -224,7 +225,7 @@ resource "aws_network_interface" "tg_if2" {
   private_ip        = var.tg_if2_ip
   private_ips       = [var.tg_if2_ip]
   security_groups   = [aws_security_group.CSITSG.id]
-  depends_on        = [aws_vpc.CSITVPC, aws_subnet.d]
+  depends_on        = [aws_vpc.CSITVPC, aws_subnet.d, aws_instance.tg]
 
   attachment {
     instance     = aws_instance.tg.id
@@ -262,18 +263,23 @@ data "aws_network_interface" "tg_if2" {
 
 # Instances
 resource "aws_instance" "tg" {
-  depends_on                  = [aws_vpc.CSITVPC, aws_placement_group.CSITPG]
-  ami                         = var.ami_image
-  availability_zone           = var.avail_zone
-  instance_type               = var.instance_type
-  key_name                    = aws_key_pair.CSITKP.key_name
-  associate_public_ip_address = true
-  subnet_id                   = aws_subnet.mgmt.id
-  private_ip                  = var.tg_mgmt_ip
-  vpc_security_group_ids      = [aws_security_group.CSITSG.id]
-  placement_group             = aws_placement_group.CSITPG.id
-  source_dest_check           = false
-  # host_id                   = "1"
+  ami                                  = var.ami_image_tg
+  availability_zone                    = var.avail_zone
+  instance_initiated_shutdown_behavior = var.instance_initiated_shutdown_behavior
+  instance_type                        = var.instance_type
+  key_name                             = aws_key_pair.CSITKP.key_name
+  associate_public_ip_address          = true
+  subnet_id                            = aws_subnet.mgmt.id
+  private_ip                           = var.tg_mgmt_ip
+  vpc_security_group_ids               = [aws_security_group.CSITSG.id]
+  placement_group                      = aws_placement_group.CSITPG.id
+  source_dest_check                    = false
+  # host_id                            = "1"
+
+  depends_on = [
+    aws_vpc.CSITVPC,
+    aws_placement_group.CSITPG,
+  ]
 
   root_block_device {
     volume_size = 50
@@ -286,18 +292,24 @@ resource "aws_instance" "tg" {
 }
 
 resource "aws_instance" "dut1" {
-  depends_on                  = [aws_vpc.CSITVPC, aws_placement_group.CSITPG]
-  ami                         = var.ami_image
-  availability_zone           = var.avail_zone
-  instance_type               = var.instance_type
-  key_name                    = aws_key_pair.CSITKP.key_name
-  associate_public_ip_address = true
-  subnet_id                   = aws_subnet.mgmt.id
-  private_ip                  = var.dut1_mgmt_ip
-  vpc_security_group_ids      = [aws_security_group.CSITSG.id]
-  placement_group             = aws_placement_group.CSITPG.id
-  source_dest_check           = false
-  # host_id                   = "2"
+  ami                                  = var.ami_image_sut
+  availability_zone                    = var.avail_zone
+  instance_initiated_shutdown_behavior = var.instance_initiated_shutdown_behavior
+  instance_type                        = var.instance_type
+  key_name                             = aws_key_pair.CSITKP.key_name
+  associate_public_ip_address          = true
+  subnet_id                            = aws_subnet.mgmt.id
+  private_ip                           = var.dut1_mgmt_ip
+  vpc_security_group_ids               = [aws_security_group.CSITSG.id]
+  placement_group                      = aws_placement_group.CSITPG.id
+  source_dest_check                    = false
+  # host_id                            = "2"
+
+  depends_on = [
+    aws_vpc.CSITVPC,
+    aws_placement_group.CSITPG,
+    aws_instance.tg
+  ]
 
   root_block_device {
     volume_size = 50
@@ -310,18 +322,25 @@ resource "aws_instance" "dut1" {
 }
 
 resource "aws_instance" "dut2" {
-  depends_on                  = [aws_vpc.CSITVPC, aws_placement_group.CSITPG]
-  ami                         = var.ami_image
-  availability_zone           = var.avail_zone
-  instance_type               = var.instance_type
-  key_name                    = aws_key_pair.CSITKP.key_name
-  associate_public_ip_address = true
-  subnet_id                   = aws_subnet.mgmt.id
-  private_ip                  = var.dut2_mgmt_ip
-  vpc_security_group_ids      = [aws_security_group.CSITSG.id]
-  placement_group             = aws_placement_group.CSITPG.id
-  source_dest_check           = false
-  # host_id                   = "3"
+  ami                                  = var.ami_image_sut
+  availability_zone                    = var.avail_zone
+  instance_initiated_shutdown_behavior = var.instance_initiated_shutdown_behavior
+  instance_type                        = var.instance_type
+  key_name                             = aws_key_pair.CSITKP.key_name
+  associate_public_ip_address          = true
+  subnet_id                            = aws_subnet.mgmt.id
+  private_ip                           = var.dut2_mgmt_ip
+  vpc_security_group_ids               = [aws_security_group.CSITSG.id]
+  placement_group                      = aws_placement_group.CSITPG.id
+  source_dest_check                    = false
+  # host_id                            = "3"
+
+  depends_on = [
+    aws_vpc.CSITVPC,
+    aws_placement_group.CSITPG,
+    aws_instance.tg,
+    aws_instance.dut1
+  ]
 
   root_block_device {
     volume_size = 50
@@ -358,7 +377,13 @@ resource "null_resource" "deploy_tg" {
   depends_on = [
     aws_instance.tg,
     aws_network_interface.tg_if1,
-    aws_network_interface.tg_if2
+    aws_network_interface.tg_if2,
+    aws_instance.dut1,
+    aws_network_interface.dut1_if1,
+    aws_network_interface.dut1_if2,
+    aws_instance.dut2,
+    aws_network_interface.dut2_if1,
+    aws_network_interface.dut2_if2
   ]
 
   connection {
@@ -377,7 +402,7 @@ resource "null_resource" "deploy_tg" {
         file_path      = var.ansible_file_path
         force_handlers = true
       }
-      hosts      = ["tg_aws"]
+      hosts = ["tg_aws"]
       extra_vars = {
         ansible_ssh_pass           = var.ansible_provision_pwd
         ansible_python_interpreter = var.ansible_python_executable
@@ -388,15 +413,21 @@ resource "null_resource" "deploy_tg" {
 
   provisioner "remote-exec" {
     on_failure = continue
-    inline = ["sudo reboot"]
+    inline     = ["sudo reboot"]
   }
 }
 
 resource "null_resource" "deploy_dut1" {
   depends_on = [
+    aws_instance.tg,
+    aws_network_interface.tg_if1,
+    aws_network_interface.tg_if2,
     aws_instance.dut1,
     aws_network_interface.dut1_if1,
-    aws_network_interface.dut1_if2
+    aws_network_interface.dut1_if2,
+    aws_instance.dut2,
+    aws_network_interface.dut2_if1,
+    aws_network_interface.dut2_if2
   ]
 
   connection {
@@ -405,33 +436,39 @@ resource "null_resource" "deploy_dut1" {
     private_key = tls_private_key.CSITTLS.private_key_pem
   }
 
-  provisioner "remote-exec" {
-    inline = var.first_run_commands
-  }
-
-  provisioner "ansible" {
-    plays {
-      playbook {
-        file_path      = var.ansible_file_path
-        force_handlers = true
-      }
-      hosts      = ["sut_aws"]
-      extra_vars = {
-        ansible_ssh_pass           = var.ansible_provision_pwd
-        ansible_python_interpreter = var.ansible_python_executable
-        aws                        = true
-      }
-    }
-  }
-
-  provisioner "remote-exec" {
-    on_failure = continue
-    inline = ["sudo reboot"]
-  }
+#  provisioner "remote-exec" {
+#    inline = var.first_run_commands
+#  }
+#
+#  provisioner "ansible" {
+#    plays {
+#      playbook {
+#        file_path      = var.ansible_file_path
+#        force_handlers = true
+#      }
+#      hosts = ["sut_aws"]
+#      extra_vars = {
+#        ansible_ssh_pass           = var.ansible_provision_pwd
+#        ansible_python_interpreter = var.ansible_python_executable
+#        aws                        = true
+#      }
+#    }
+#  }
+#
+#  provisioner "remote-exec" {
+#    on_failure = continue
+#    inline     = ["sudo reboot"]
+#  }
 }
 
 resource "null_resource" "deploy_dut2" {
   depends_on = [
+    aws_instance.tg,
+    aws_network_interface.tg_if1,
+    aws_network_interface.tg_if2,
+    aws_instance.dut1,
+    aws_network_interface.dut1_if1,
+    aws_network_interface.dut1_if2,
     aws_instance.dut2,
     aws_network_interface.dut2_if1,
     aws_network_interface.dut2_if2
@@ -443,40 +480,40 @@ resource "null_resource" "deploy_dut2" {
     private_key = tls_private_key.CSITTLS.private_key_pem
   }
 
-  provisioner "remote-exec" {
-    inline = var.first_run_commands
-  }
-
-  provisioner "ansible" {
-    plays {
-      playbook {
-        file_path      = var.ansible_file_path
-        force_handlers = true
-      }
-      hosts      = ["sut_aws"]
-      extra_vars = {
-        ansible_ssh_pass           = var.ansible_provision_pwd
-        ansible_python_interpreter = var.ansible_python_executable
-        aws                        = true
-      }
-    }
-  }
-
-  provisioner "remote-exec" {
-    on_failure = continue
-    inline = ["sudo reboot"]
-  }
+#  provisioner "remote-exec" {
+#    inline = var.first_run_commands
+#  }
+#
+#  provisioner "ansible" {
+#    plays {
+#      playbook {
+#        file_path      = var.ansible_file_path
+#        force_handlers = true
+#      }
+#      hosts = ["sut_aws"]
+#      extra_vars = {
+#        ansible_ssh_pass           = var.ansible_provision_pwd
+#        ansible_python_interpreter = var.ansible_python_executable
+#        aws                        = true
+#      }
+#    }
+#  }
+#
+#  provisioner "remote-exec" {
+#    on_failure = continue
+#    inline     = ["sudo reboot"]
+#  }
 }
 
 resource "null_resource" "deploy_topology" {
-  depends_on = [ aws_instance.tg, aws_instance.dut1, aws_instance.dut2 ]
+  depends_on = [aws_instance.tg, aws_instance.dut1, aws_instance.dut2]
 
   provisioner "ansible" {
     plays {
       playbook {
         file_path = var.ansible_topology_path
       }
-      hosts      = ["local"]
+      hosts = ["local"]
       extra_vars = {
         ansible_python_interpreter = var.ansible_python_executable
         testbed_name               = var.testbed_name